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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow