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 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:
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.
Avval namunaviy products jadvalini yaratamiz:
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:
SELECT
name,
brand,
price
FROM
products
WHERE
price > ALL (
SELECT
price
FROM
products
WHERE
brand = 'Samsung'
);
Natija:
name | brand | price
-------------------+-------+---------
iPhone 16 Pro Max | Apple | 1399.99
[799.99, 1299.99, 1119.99].>) ekanligini tekshiradi.iPhone 16 Pro Max narxi ($1399.99) ro'yxatdagi har bir Samsung tovaridan qimmat bo'lgani uchun natijaga chiqadi.Yuqoridagi so'rovni MAX() agregat funksiyasi yordamida quyidagicha soddaroq yozish ham mumkin:
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.
ALL(subquery) operatoridan foydalaning.> ALL ifodasi to'plamdagi maksimal qiymatdan kattaligini (> MAX), < ALL esa minimal qiymatdan kichikligini (< MIN) bildiradi.