53 / 100

ALL

Barcha qiymatlar bilan taqqoslash

Kirish: Ushbu qo'llanmada siz PostgreSQL ALL operatori yordamida qiymatni quyi so'rov qaytargan barcha qiymatlar to'plami bilan taqqoslashni o'rganasiz.

PostgreSQL ALL operatoriga kirish

PostgreSQL ALL operatori ma'lum bir qiymatni quyi so'rov qaytargan har bir qiymat bilan solishtirish imkonini beradi. Agar shart to'plamdagi barcha qiymatlar uchun to'g'ri (true) bo'lsa, ALL operatori true qaytaradi.

ALL operatorining sintaksisi:

query.sql
value operator ALL(subquery)

Ushbu sintaksisda:

  • value — taqqoslanayotgan ustun yoki ifoda;
  • operator — taqqoslash operatorlaridan biri (=, <, >, <=, >=, !=);
  • subquery — bitta ustundan iborat natijalar to'plamini qaytaruvchi quyi so'rov.

Agar quyi so'rov hech qanday qator qaytarmasa, ALL operatori avtomatik tarzda true qaytaradi.

PostgreSQL ALL operatoriga misol

Avval namunaviy products jadvalini yaratamiz:

query.sql
CREATE TABLE products (
  id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  price DEC(11, 2) NOT NULL CHECK (price > 0),
  brand VARCHAR(50) NOT NULL
);

INSERT INTO
  products (name, price, brand)
VALUES
  ('Galaxy S24', 799.99, 'Samsung'),
  ('iPhone 16', 1099.99, 'Apple'),
  ('iPhone 16 Pro Max', 1399.99, 'Apple'),
  ('iPhone 16 Plus', 1199.99, 'Apple'),
  ('Galaxy S24 Ultra', 1299.99, 'Samsung'),
  ('Galaxy S24 Plus', 1119.99, 'Samsung');

Quyidagi so'rov barcha Samsung mahsulotlaridan ham qimmatroq bo'lgan tovarlarni topadi:

query.sql
SELECT
  name,
  brand,
  price
FROM
  products
WHERE
  price > ALL (
    SELECT
      price
    FROM
      products
    WHERE
      brand = 'Samsung'
  );

Natija:

matn
       name        | brand |  price
-------------------+-------+---------
 iPhone 16 Pro Max | Apple | 1399.99

So'rov qanday ishlaydi?

  1. Ichki so'rov Samsung brendidagi barcha mahsulotlarning narxlarini oladi: [799.99, 1299.99, 1119.99].
  2. Tashqi so'rov har bir mahsulot narxi ushbu ro'yxatdagi barcha narxlardan katta (>) ekanligini tekshiradi.
  3. Faqatgina iPhone 16 Pro Max narxi ($1399.99) ro'yxatdagi har bir Samsung tovaridan qimmat bo'lgani uchun natijaga chiqadi.

ALL operatorini MAX funksiyasi bilan almashtirish

Yuqoridagi so'rovni MAX() agregat funksiyasi yordamida quyidagicha soddaroq yozish ham mumkin:

query.sql
SELECT
  name,
  brand,
  price
FROM
  products
WHERE
  price > (
    SELECT
      MAX(price)
    FROM
      products
    WHERE
      brand = 'Samsung'
  );

Ushbu so'rov Samsung tovarlarining eng yuqori narxini (1299.99) oladi va narxi undan yuqori bo'lgan tovarlarni qaytaradi.

Xulosa

  • Qiymat quyi so'rovdagi har bir element bilan shartni qanoatlantirishini tekshirish uchun ALL(subquery) operatoridan foydalaning.
  • > ALL ifodasi to'plamdagi maksimal qiymatdan kattaligini (> MAX), < ALL esa minimal qiymatdan kichikligini (< MIN) bildiradi.