A különböző lekérdezések adatai összekapcsolhatók. mivel az SQL halmazoknak tekinti az adattáblákban lévő, illetve a SELECT utasítások által visszaadott eredményeket, ezért a logikai műveletek értelmezhetők:
(Select 1) UNION (Select 2) | A két lekérdezés eredményeinek úniója |
(Select 1) INTERSECTS (Select 2) | A két lekérdezés eredményeinek metszete |
(Select 1) MINUS (Select 2) | A két lekérdezés eredményeinek a különbsége |
IN (eredményhalmaz | az eredményhalmazban lévő |
- A halmazműveletek esetén mind a SELECT 1 és a SELECT 2-nek is ugyanolyan típusú adatokat kell visszaadni, ugyanolyan sorrendben, ugyanolyan mezőnévvel! Ez utóbbit úgylehet megoldani, hogy aliasokat használunk a lekérdezésben
- Mivel a halmazműveletek a leglassabbak, ezért ha lehetséges érdemes őket más módon megoldani, például al-lekérdezésekkel
Néhány példa
Válasszuk ki azokat a termeket, ahol a 3/b-nek vagy a 3/a-nak vannak órái:
SELECT Tanterem FROM Orarend WHERE Osztaly = '12.B'
UNION
SELECT Tanterem FROM Orarend WHERE Osztaly = '12.E';
Ugyanez az IN operátorral rövidebb:
SELECT Tanterem FROM Orarend WHERE Osztaly IN ('12.B', '12.E');
Azon osztályok, melyeknek a 101 és 102 teremben is van órája:
SELECT Osztaly FROM Orarend WHERE Tanterem = 101
INTERSECT
SELECT Osztaly FROM Orarend WHERE Tanterem = 102;
Azon osztályok, melyeknek a 101-es teremben van, de a 102-es teremben nincs órája:
SELECT Osztaly FROM Orarend WHERE Tanterem = 101
MINUS
SELECT Osztaly FROM Orarend WHERE Tanterem = 102;
kjhgkjgh
Eloadok
Nezok
SELECT NID, nev FROM nezok
UNION
SELECT SID, nev FROM eloadok
ORDER BY nev;