SQL
Subzoekopdrachten
Zoeken…
Opmerkingen
Subquery's kunnen worden weergegeven in verschillende clausules van een externe query of in de ingestelde bewerking.
Ze moeten tussen haakjes worden geplaatst ()
. Als het resultaat van de subquery met iets anders wordt vergeleken, moet het aantal kolommen overeenkomen. Tabelaliassen zijn vereist voor subquery's in de clausule FROM om de tijdelijke tabel een naam te geven.
Subquery in WHERE-clausule
Gebruik een subquery om de resultatenset te filteren. Dit levert bijvoorbeeld alle werknemers op met een salaris gelijk aan de best betaalde werknemer.
SELECT *
FROM Employees
WHERE Salary = (SELECT MAX(Salary) FROM Employees)
Subquery in clausule FROM
Een subquery in een FROM
component werkt op dezelfde manier als een tijdelijke tabel die tijdens de uitvoering van een query wordt gegenereerd en daarna verloren gaat.
SELECT Managers.Id, Employees.Salary
FROM (
SELECT Id
FROM Employees
WHERE ManagerId IS NULL
) AS Managers
JOIN Employees ON Managers.Id = Employees.Id
Subquery in clausule SELECT
SELECT
Id,
FName,
LName,
(SELECT COUNT(*) FROM Cars WHERE Cars.CustomerId = Customers.Id) AS NumberOfCars
FROM Customers
Subquery's in de clausule FROM
U kunt subquery's gebruiken om een tijdelijke tabel te definiëren en deze te gebruiken in de clausule FROM van een "buitenste" query.
SELECT * FROM (SELECT city, temp_hi - temp_lo AS temp_var FROM weather) AS w
WHERE temp_var > 20;
Het bovenstaande vindt steden uit de weertabel waarvan de dagelijkse temperatuurvariatie groter is dan 20. Het resultaat is:
stad | temp_var |
---|---|
ST. LOUIS | 21 |
LOS ANGELES | 31 |
LOS ANGELES | 23 |
LOS ANGELES | 31 |
LOS ANGELES | 27 |
LOS ANGELES | 28 |
LOS ANGELES | 28 |
LOS ANGELES | 32 |
.
Subquery's in de clausule WHERE
In het volgende voorbeeld worden steden gevonden (uit het voorbeeld van steden ) waarvan de bevolking onder de gemiddelde temperatuur ligt (verkregen via een subquery):
SELECT name, pop2000 FROM cities
WHERE pop2000 < (SELECT avg(pop2000) FROM cities);
Hier: de subquery (SELECT avg (pop2000) FROM steden) wordt gebruikt om voorwaarden op te geven in de WHERE-component. Het resultaat is:
naam | pop2000 |
---|---|
San Francisco | 776.733 |
ST. LOUIS | 348.189 |
Kansas stad | 146.866 |
Subquery's in clausule SELECT
Subquery's kunnen ook worden gebruikt in het SELECT
gedeelte van de buitenste query. De volgende query geeft alle weersomstandigheden tafel kolommen met de overeenstemmende toestanden uit de steden tafel .
SELECT w.*, (SELECT c.state FROM cities AS c WHERE c.name = w.city ) AS state
FROM weather AS w;
Filter queryresultaten met behulp van query op verschillende tabel
Deze query selecteert alle werknemers die niet op de tabel Supervisors staan.
SELECT *
FROM Employees
WHERE EmployeeID not in (SELECT EmployeeID
FROM Supervisors)
Dezelfde resultaten kunnen worden bereikt met een LINKS JOIN.
SELECT *
FROM Employees AS e
LEFT JOIN Supervisors AS s ON s.EmployeeID=e.EmployeeID
WHERE s.EmployeeID is NULL
Gecorreleerde subquery's
Gecorreleerde (ook bekend als gesynchroniseerde of gecoördineerde) subquery's zijn geneste query's die verwijzen naar de huidige rij van hun buitenste query:
SELECT EmployeeId
FROM Employee AS eOuter
WHERE Salary > (
SELECT AVG(Salary)
FROM Employee eInner
WHERE eInner.DepartmentId = eOuter.DepartmentId
)
Subquery SELECT AVG(Salary) ...
is gecorreleerd omdat deze verwijst naar Employee
eOuter
uit de externe query.