09 / 100

IN

Ro'yxatdan tekshirish

Kirish: ushbu darsda siz qiymatlar ro'yxatida mavjud bo'lgan qatorlarni filtrlash uchun PostgreSQL IN operatoridan WHERE bandida qanday foydalanishni o'rganasiz.


PostgreSQL IN operatori

IN operatori qiymat berilgan ro'yxat ichida mavjud bo'lsa, true (rost) qaytaradi. Mana IN operatorining sintaksisi:

query.sql
value IN (value1, value2, ...)

Ushbu sintaksisda:

  • Birinchi, IN operatorining chap tomonida tekshirmoqchi bo'lgan qiymatingizni ko'rsating.
  • Ikkinchi, qiymat ulardan birortasiga teng yoki yo'qligini tekshirish uchun solishtiriladigan qiymatlar ro'yxatini bering.

Qiymat butun sonlar (integers), satrlar (strings), sanalar (dates) va boshqalar bo'lishi mumkin. Odatda, jadval qatorlarini filtrlash uchun SELECT so'rovining WHERE bandida IN operatoridan foydalanasiz:

query.sql
WHERE value IN (value1, value2, ...)

IN operatori OR operatori yordamida quyidagi taqqoslashga teng kuchlidir:

query.sql
value = value1 OR value = value2 OR ...

Biroq, IN operatori uzun taqqoslash ifodalari ro'yxatiga qaraganda ancha ixcham va o'qishga qulayroqdir.


PostgreSQL IN operatoriga misol

Aytaylik, bizda quyidagi inventories jadvali mavjud:

query.sql
CREATE TABLE inventories (
  name VARCHAR(255),
  brand VARCHAR(50),
  quantity INT,
  price DECIMAL(19, 2)
);

INSERT INTO
  inventories (name, brand, quantity, price)
VALUES
  ('iPhone 14 Pro', 'Apple', 10, 999.99),
  ('Galaxy S23 Ultra', 'Samsung', 15, 1199.99),
  ('Pixel 7 Pro', 'Google', 8, 899.99),
  ('Xperia 1 IV', 'Sony', 7, 1299.99);

Quyidagi so'rov ombordagi miqdori 7 yoki 8 ga teng bo'lgan mahsulotlarni olish uchun IN operatoridan foydalanadi:

query.sql
SELECT
  name,
  quantity
FROM
  inventories
WHERE
  quantity IN (7, 8);

Natija:

query.sql
    name     | quantity
-------------+----------
 Pixel 7 Pro |        8
 Xperia 1 IV |        7

Natijada miqdori 8 va 7 ga teng bo'lgan ikkita mahsulot: Pixel 7 Pro va Xperia 1 IV qaytariladi.

Quyidagi misolda oldindan belgilangan nomlar ro'yxatidagi mahsulotlarni olish uchun IN operatoridan foydalaniladi:

query.sql
SELECT
  name,
  price
FROM
  inventories
WHERE
  name IN ('iPhone 14 Pro', 'Pixel 7 Pro');

Natija:

query.sql
     name      | price
---------------+--------
 iPhone 14 Pro | 999.99
 Pixel 7 Pro   | 899.99

PostgreSQL NOT IN operatori

NOT operatori IN operatorini inkor qiladi:

query.sql
value NOT IN (value1, value2, ...)

NOT IN operatori qiymat ro'yxatdagi (value1, value2, …) qiymatlarning hech birida bo'lmasa, true qaytaradi.

NOT IN operatori quyidagi ifodaga teng:

query.sql
value != value1 AND value != value2 AND ...

Quyidagi misolda nomlari berilgan ro'yxatda bo'lmagan mahsulotlarni inventories jadvalidan olish uchun NOT IN operatoridan foydalaniladi:

query.sql
SELECT
  name,
  price
FROM
  inventories
WHERE
  name NOT IN ('iPhone 14 Pro', 'Pixel 7 Pro');

Natija:

query.sql
       name       |  price
------------------+---------
 Galaxy S23 Ultra | 1199.99
 Xperia 1 IV      | 1299.99

Xulosa

  • Qiymat ro'yxatdagi biror qiymatga tengligini tekshirish uchun IN operatoridan foydalaning.
  • Qiymat ro'yxatdagi hech bir qiymatga teng emasligini aniqlash uchun NOT IN operatoridan foydalaning.
QBilimingizni sinab ko'ring
1 / 5

1. PostgreSQL IN operatori qanday holatda true qaytaradi?