54 / 100

ANY

Istalgan qiymat bilan taqqoslash

Kirish: Ushbu qo'llanmada siz PostgreSQL ANY operatori yordamida qiymatni quyi so'rov qaytargan qiymatlarning kamida bittasi bilan taqqoslashni o'rganasiz.

PostgreSQL ANY operatoriga kirish

PostgreSQLda ANY operatori qiymatni quyi so'rov natijalari to'plami bilan solishtiradi. Agar taqqoslash to'plamdagi kamida bitta qiymat uchun to'g'ri (true) bo'lsa, ANY operatori true qaytaradi.

ANY operatorining sintaksisi:

query.sql
value operator ANY(subquery)

Ushbu sintaksisda:

  • value — tekshirilayotgan ustun yoki ifoda;
  • operator — taqqoslash operatori (=, <, >, <=, >=, !=);
  • subquery — bitta ustunli natija qaytaruvchi quyi so'rov.

PostgreSQLda SOME va ANY to'liq sinonimlar hisoblanadi, ularni bir-birining o'rnida ishlatishingiz mumkin.

E'tibor bering: = ANY(subquery) ifodasi IN (subquery) bilan aynan bir xil ma'noni anglatadi.

PostgreSQL ANY operatoriga misol

Dastlab 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 Apple mahsulotlarining istalgan birortasidan qimmatroq bo'lgan tovarlarni topadi:

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

Natija:

matn
       name        |  brand  |  price
-------------------+---------+---------
 iPhone 16 Pro Max | Apple   | 1399.99
 iPhone 16 Plus    | Apple   | 1199.99
 Galaxy S24 Ultra  | Samsung | 1299.99
 Galaxy S24 Plus   | Samsung | 1119.99

So'rov qanday ishlaydi?

  1. Quyi so'rov Apple mahsulotlarining barcha narxlarini qaytaradi: [1099.99, 1399.99, 1199.99].
  2. Tashqi so'rov har bir mahsulot narxi ushbu ro'yxatdagi kamida bitta narxdan katta (>) bo'lishini tekshiradi.
  3. Apple mahsulotlarining eng arzoni $1099.99 bo'lgani sababli, narxi $1099.99 dan yuqori bo'lgan barcha tovarlar natijaga chiqadi.

ANY operatorini MIN funksiyasi bilan almashtirish

Yuqoridagi so'rovni MIN() agregat funksiyasi yordamida quyidagicha qayta yozish mumkin:

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

Ichki so'rov Apple mahsulotlarining eng past narxini (1099.99) topadi, tashqi so'rov esa narxi undan yuqori bo'lgan mahsulotlarni tanlab oladi.

Xulosa

  • Qiymat quyi so'rovdagi kamida bitta element bilan shartni bajarsa true olish uchun ANY(subquery) dan foydalaning.
  • = ANY bu IN bilan bir xil.
  • > ANY to'plamdagi eng kichik qiymatdan kattalikni (> MIN), < ANY esa eng katta qiymatdan kichiklikni (< MAX) bildiradi.