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.
IN operatori qiymat berilgan ro'yxat ichida mavjud bo'lsa, true (rost) qaytaradi. Mana IN operatorining sintaksisi:
value IN (value1, value2, ...)
Ushbu sintaksisda:
IN operatorining chap tomonida tekshirmoqchi bo'lgan qiymatingizni ko'rsating.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:
WHERE value IN (value1, value2, ...)
IN operatori OR operatori yordamida quyidagi taqqoslashga teng kuchlidir:
value = value1 OR value = value2 OR ...
Biroq, IN operatori uzun taqqoslash ifodalari ro'yxatiga qaraganda ancha ixcham va o'qishga qulayroqdir.
Aytaylik, bizda quyidagi inventories jadvali mavjud:
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:
SELECT
name,
quantity
FROM
inventories
WHERE
quantity IN (7, 8);
Natija:
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:
SELECT
name,
price
FROM
inventories
WHERE
name IN ('iPhone 14 Pro', 'Pixel 7 Pro');
Natija:
name | price
---------------+--------
iPhone 14 Pro | 999.99
Pixel 7 Pro | 899.99
NOT operatori IN operatorini inkor qiladi:
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:
value != value1 AND value != value2 AND ...
Quyidagi misolda nomlari berilgan ro'yxatda bo'lmagan mahsulotlarni inventories jadvalidan olish uchun NOT IN operatoridan foydalaniladi:
SELECT
name,
price
FROM
inventories
WHERE
name NOT IN ('iPhone 14 Pro', 'Pixel 7 Pro');
Natija:
name | price
------------------+---------
Galaxy S23 Ultra | 1199.99
Xperia 1 IV | 1299.99
IN operatoridan foydalaning.NOT IN operatoridan foydalaning.