Подсуроолор: скалярдык, IN, EXISTS жана байланышкан
Суроонун ичиндеги суроо - чоңураак суроого жооп бериш үчүн бир суроого жооп бериңиз
Негизги идея: Подсуроо - бул башка оператордун ичине жазылган толук
SELECT. Сырткы суроо ички суроо кайтарган нерсени колдонот: бир маани, маанилердин тизмеси же жөн гана "дал келген сап барбы?" деген суроого "ооба/жок" деген жооп. Төрт форманы (скалярдык, IN, EXISTS жана байланышкан) өздөштүрүү менен бир жалпак суроо чече албаган суроолорду туюнта аласыз.
Аягында сиз:
WHEREжанаSELECTичинде скалярдык подсуроолорду жаза аласыз,FROMичинде подсуроону туунду таблица катары колдоно аласыз,INаркылуу чыпкалап, маанилүүNOT IN+ NULL тузагын билесиз,EXISTS/NOT EXISTSаркылуу бар экенин текшересиз,- байланышкан подсуроону таанып, анын баасы жөнүндө ой жүгүртөсүз,
- көп подсуроолорду бириктирүү (join) катары кайра жазып, качан керек экенин билесиз.
1. Биздин үлгү дүкөн базасы
Төмөнкү бардык суроолор бир кичинекей онлайн-дүкөн схемасында аткарылат. Үч таблицаны азыр бир жолу окуп чыгыңыз; биз аларды бүт тема боюнча колдонобуз.
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(50),
city VARCHAR(50)
);
CREATE TABLE products (
product_id INT PRIMARY KEY,
name VARCHAR(50),
price DECIMAL(8,2)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
product_id INT,
quantity INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
INSERT INTO customers VALUES
(1,'Alice','London'), (2,'Bob','Paris'),
(3,'Carol','London'), (4,'Dan','Berlin');
INSERT INTO products VALUES
(1,'Keyboard',45.00), (2,'Mouse',25.00),
(3,'Monitor',220.00), (4,'Webcam',60.00);
INSERT INTO orders VALUES
(1,1,3,1,'2026-01-05'), (2,1,2,2,'2026-01-06'),
(3,2,1,1,'2026-02-10'), (4,3,3,1,'2026-02-11'),
(5,3,4,1,'2026-03-01');
Мисалдарды кызыктуу кылган эки фактка көңүл буруңуз: Dan (кардар 4) бир да заказ берген эмес, ал эми Monitor (товар 3) - эң кымбат товар. Мына orders таблицасы:
| order_id | customer_id | product_id | quantity | order_date |
|---|---|---|---|---|
| 1 | 1 | 3 | 1 | 2026-01-05 |
| 2 | 1 | 2 | 2 | 2026-01-06 |
| 3 | 2 | 1 | 1 | 2026-02-10 |
| 4 | 3 | 3 | 1 | 2026-02-11 |
| 5 | 3 | 4 | 1 | 2026-03-01 |