TOP

SQL-Lecția 12. Interogări combinate (UNION)

Majoritatea interogărilor SQL folosesc o singură instrucțiune care returnează date dintr-unul sau mai multe tabele. De asemenea, SQL vă permite să rulați mai multe interogări separate în același timp și să afișați rezultatul ca un singur set de date. Astfel de interogări combinate sunt de obicei numite alăturari sau interogări complexe.


1. Folosind operatorul UNION

Interogările SQL sunt combinate folosind operatorul UNION. Pentru a face acest lucru, trebuie să specificați fiecare cerere SELECT și să plasați cuvântul cheie UNION între ele. Nu există limită pentru numărul de utilizări ale operatorului UNION într-o interogare generală. În secțiunea anterioară am observat că MS Access nu are capacitatea de a crea o uniune exterioară completă, acum vom vedea cum se poate realiza acest lucru prin operatorul UNION.

Run SQLSELECT *
FROM Sumproduct 
LEFT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City
UNION
SELECT * 
FROM Sumproduct 
RIGHT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City

Vedem că interogarea a afișat atât toate coloanele din primul tabel, cât și din al doilea, indiferent dacă toate înregistrările au corespondente într-un alt tabel.

De asemenea, este de remarcat faptul că în multe cazuri, în loc de UNION, putem folosi clauza WHERE cu multe condiții și obținem un rezultat similar. Cu toate acestea, prin UNION, înregistrările par mai concise și mai clare.

De asemenea, este necesar să urmați anumite reguli atunci când scrieți interogări combinate:

  • cererea UNION trebuie să includă doi sau mai mulți operatori UNION separați prin cuvântul cheie UNION (adică dacă în cerere sunt utilizați patru operatori UNION, atunci trebuie să existe trei cuvinte cheie UNION);
  • fiecare interogare din operatorul UNION trebuie să aibă aceleași coloane, expresii sau funcții statistice, care, în plus, trebuie listate în aceeași ordine;
  • tipurile de date pe coloană trebuie să fie compatibile. Nu trebuie neapărat să fie de același tip, dar trebuie să aibă un tip similar, astfel încât SGBD-ul să le poată converti fără ambiguitate (de exemplu, pot fi diferite tipuri de date numerice sau diferite tipuri de date).
  • 2. Includeți sau excludeți linii repetate

    O interogare cu UNION elimină automat toate rândurile duplicate din setul de rezultate ale interogării (cu alte cuvinte, se comportă ca o clauză WHERE cu mai multe condiții într-o singură instrucțiune SELECT). Acesta este comportamentul implicit al operatorului UNION, dar îl putem schimba dacă dorim. Pentru aceasta ar trebui să folosim operatorul UNION ALL în loc de UNION.

    3. Sortarea rezultatelor interogărilor combinate

    Rezultatele instrucțiunii SELECT sunt sortate folosind instrucțiunea ORDER BY. Când combinați interogări folosind UNION, poate fi utilizată o singură clauză ORDER BY și trebuie plasată în ultima instrucțiune SELECT. Într-adevăr, în practică, nu are prea mult sens să sortăm o parte din rezultate într-o ordine, iar cealaltă parte într-o altă ordine. Prin urmare, propozițiile multiple ORDER BY nu sunt permise.