Guide for GroupBy 7: Operacions de conjunts
Com abordar aquest problema
Aquest problema practica les operacions de conjunts: agafen el resultat de dues consultes SELECT i el combinen com si fossin dos conjunts de files. No cal cap JOIN: les dues consultes s'escriuen per separat i s'enganxen amb una paraula clau.
La sintaxi que necessites
SELECT col1, col2 FROM taulaA WHERE condicioA
UNION | UNION ALL | INTERSECT | EXCEPT
SELECT col1, col2 FROM taulaB WHERE condicioB
UNION: les files que surten a qualsevol de les dues consultes, sense repeticions.UNION ALL: el mateix, però mantenint les repeticions (no elimina duplicats).INTERSECT: només les files que surten a totes dues consultes.EXCEPT: les files de la primera consulta que no surten a la segona (l'ordre importa:A EXCEPT Bno és el mateix queB EXCEPT A).- Les dues consultes han de tenir el mateix nombre de columnes, i es comparen columna a columna, per posició.
Pregunta per pregunta
Pregunta 1. Es demana el que hi ha a una taula i no a l'altra: és la feina d'una de les quatre operacions. Fixa't bé en quina taula va primer, i compara només la columna que es demana (si compares la fila sencera, el resultat canvia).
Pregunta 2. Ara la comparació és de la fila completa: les dues consultes han de seleccionar les quatre columnes, en el mateix ordre. Una fila només es considera igual si coincideixen totes les columnes. Alerta: a Employees3 hi ha salaris buits (NULL), i això fa que algunes files que semblen iguals no ho siguin.
Pregunta 3. Cada meitat té la seva pròpia condició WHERE, i l'enunciat diu explícitament que no s'han d'eliminar les repeticions: tria l'operació que les conserva. Revisa també els operadors de comparació ("o més" i "exactament" no s'escriuen igual).
Un exemple semblant
Noms de pila que surten a Employees2 però no a Employees:
SELECT FirstName FROM Employees2
EXCEPT
SELECT FirstName FROM Employees
Noms de pila dels que cobren poc a Employees juntament amb els dels que cobren molt a Employees3, sense repetir:
SELECT FirstName FROM Employees WHERE Salary < 1200
UNION
SELECT FirstName FROM Employees3 WHERE Salary > 1600
Paranys habituals:
- Fer servir
UNIONquan es demanen les repeticions:UNIONles elimina,UNION ALLno. - Posar les taules al revés en un
EXCEPT: el resultat és completament diferent. - Seleccionar un nombre diferent de columnes (o en un ordre diferent) a cada costat de l'operació.
- Posar un
ORDER BYal mig: si en vols un, només pot anar al final de tot (i aquí el jutge no mira l'ordre).