Көптүктөр боюнча операциялар: UNION, INTERSECT жана EXCEPT
Бүтүн натыйжа топтомдорун бириктириңиз, кесиштириңиз жана кемитиңиз - тилкелерди эмес, саптарды толугу менен
SELECT сурамы чыгарган саптарды алып, аларды вертикалдуу бириктирет. JOIN таблицаларды капталынан жабыштырып, саптарды кеңири кылат; көптүк операциясы натыйжа топтомдорун бири-биринин үстүнө коюп, бир узунураак тизме жасайт. UNION аларды бириктирет, INTERSECT экөөндө тең бар саптарды гана калтырат, ал эми EXCEPT биринчи топтомдогу, экинчисинде жок саптарды калтырат.
- эки натыйжа топтомун
UNIONменен бириктире аласыз жана анын ордуна качанUNION ALLкерек экенин билесиз, - эки сурамга ортоктош саптарды
INTERSECTменен таба аласыз, - бир натыйжа топтомун экинчисинен
EXCEPTменен кемите аласыз, - ар бир көптүк операциясы талап кылган тилкелердин шайкештик эрежелерин сактай аласыз,
INTERSECTжанаEXCEPTжок эски MySQL версияларында (8.0.31ден мурун) аларды кайра түзө аласыз.
1. Биздин үлгү маалымат базасы
Төмөндөгү ар бир сурам эки кичине таблица менен иштейт. Компания өз кызматкерлеринин (employees) тизмесин жана өзүнчө кардарларынын (customers) тизмесин жүргүзөт. Эки жазууда тең адамдын аты жана шаары сакталат.
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(50),
city VARCHAR(50)
);
CREATE TABLE customers (
cust_id INT PRIMARY KEY,
name VARCHAR(50),
city VARCHAR(50)
);
INSERT INTO employees (emp_id, name, city) VALUES
(1, 'Alice', 'London'),
(2, 'Bob', 'Paris'),
(3, 'Carol', 'London'),
(4, 'David', 'Berlin');
INSERT INTO customers (cust_id, name, city) VALUES
(101, 'Emma', 'Paris'),
(102, 'Frank', 'London'),
(103, 'Grace', 'Paris'),
(104, 'Alice', 'Madrid');
Бул сегиз сапты эсиңизде сактаңыз. Шаарларга көңүл буруңуз: кызматкерлер Лондон, Париж жана Берлинде жашашат; кардарлар Париж, Лондон жана Мадридде. Дал ушул дал келүүлөр менен айырмачылыктар көптүк операциялары сүрөттөгөн нерсе.