8.15. Halmazműveletek

Default book

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ényhalmazaz 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;