SQL understøtter følgende "set operations", eller mængdeoperationer:
UNION
UNION ALL
INTERSECT
INTERSECT ALL
EXCEPT
EXCEPT ALL
Bemærk at blot fordi SQL standarden understøtter dem er det ikke alle SQL databaseprodukter der understøtter dem.
En indlejeret forespørgsel med en mængdeoperation (UNION i dette tilfælde) kunne være:
SELECT Name
FROM
(
SELECT Name FROM Employees
UNION
SELECT Name FROM Administrators
) AS AllPeople
Her antager jeg eksistensen af to tabeller der hedder Employees og Administrators. Det er dog et lidt fjoget eksempel da jeg kan få samme resultat helt uden at bruge UNION.
Et andet eksempel er følgende som udskriver alle tal mindre end 5000 som er et heltal i anden og tredje potens. Her bruger jeg også mængdeoperationen UNION:
SELECT POWER(NUMBER,2) AS POWERS
FROM (SELECT CAST(DIGIT1. DIGIT || DIGIT2. DIGIT
AS UNSIGNED INTEGER) AS NUMBER
FROM (SELECT '0' DIGIT UNION SELECT '1' UNION
SELECT '2' UNION SELECT '3' UNION
SELECT '4' UNION SELECT '5' UNION
SELECT '6' UNION SELECT '7' UNION
SELECT '8' UNION SELECT '9') AS DIGIT1,
(SELECT '0' DIGIT UNION SELECT '1' UNION
SELECT '2' UNION SELECT '3' UNION
SELECT '4' UNION SELECT '5' UNION
SELECT '6' UNION SELECT '7' UNION
SELECT '8' UNION SELECT '9') AS DIGIT2)
AS NUMBERS
WHERE POWER(NUMBER,2) < 5000
INTERSECT
SELECT POWER(NUMBER,3) AS POWERS
FROM (SELECT CAST(DIGIT1.DIGIT || DIGIT2.DIGIT
AS UNSIGNED INTEGER) AS NUMBER
FROM (SELECT '0' DIGIT UNION SELECT '1' UNION
SELECT '2' UNION SELECT '3' UNION
SELECT '4' UNION SELECT '5' UNION
SELECT '6' UNION SELECT '7' UNION
SELECT '8' UNION SELECT '9') AS DIGIT1,
(SELECT '0' DIGIT UNION SELECT '1' UNION
SELECT '2' UNION SELECT '3' UNION
SELECT '4' UNION SELECT '5' UNION
SELECT '6' UNION SELECT '7' UNION
SELECT '8' UNION SELECT '9') AS DIGIT2)
AS NUMBERS
WHERE POWER(NUMBER,3) < 5000
Såfremt dette er en opgave til skole eller lignende skal du nok ikke aflevere ovenstående da det oprindeligt kommer fra Rick F. van der Lans' "Introduction to SQL - Fourth Edition", medmindre du angiver kilde selvfølgelig.
Indlæg senest redigeret d. 30.12.2007 00:24 af Bruger #4522