Zoeken…


Syntaxis

  • SELECT kolomnaam
    VAN tafel_naam
    WAAR operatorwaarde kolomnaam
  • SELECT kolomnaam, aggregaatfunctie (kolomnaam)
    VAN tafel_naam
    GROEPEN op kolomnaam
    HEEFT operatorwaarde aggregate_function (kolomnaam)

De clausule WHERE retourneert alleen rijen die overeenkomen met de criteria

Steam heeft een spellen onder $ 10 sectie van hun winkelpagina. Ergens diep in het hart van hun systemen is er waarschijnlijk een vraag die er ongeveer zo uitziet:

SELECT * 
FROM Items 
WHERE Price < 10

Gebruik IN om rijen te retourneren met een waarde in een lijst

In dit voorbeeld wordt de autotabel uit de voorbeelddatabases gebruikt.

SELECT *
FROM Cars
WHERE TotalCost IN (100, 200, 300)

Deze zoekopdracht retourneert Auto # 2 die 200 kost en Auto # 3 die 100 kost. Merk op dat dit overeenkomt met het gebruik van meerdere clausules met OR , bijvoorbeeld:

SELECT *
FROM Cars
WHERE TotalCost = 100 OR TotalCost = 200 OR TotalCost = 300

Gebruik LIKE om overeenkomende tekenreeksen en substrings te vinden

Zie volledige documentatie over LIKE-operator .

In dit voorbeeld wordt de tabel Werknemers uit de voorbeelddatabases gebruikt.

SELECT *
FROM Employees
WHERE FName LIKE 'John'

Deze zoekopdracht retourneert alleen werknemer # 1 waarvan de voornaam exact overeenkomt met 'John'.

SELECT *
FROM Employees
WHERE FName like 'John%'

Door % toe te voegen, kunt u zoeken naar een substring:

  • John% - geeft elke werknemer terug wiens naam begint met 'John', gevolgd door een willekeurig aantal tekens
  • %John - retourneert elke werknemer wiens naam eindigt op 'John', gevolgd door een willekeurig aantal tekens
  • %John% - retourneert elke werknemer wiens naam 'John' bevat ergens binnen de waarde

In dit geval retourneert de zoekopdracht werknemer # 2 met de naam 'John', evenals werknemer # 4 met de naam 'Johnathon'.

WAAR clausule met NULL / NIET NULL waarden

SELECT *
FROM Employees
WHERE ManagerId IS NULL

Deze verklaring retourneert alle werknemersrecords waarvan de waarde van de kolom ManagerId NULL .

Het resultaat zal zijn:

Id    FName    LName    PhoneNumber    ManagerId    DepartmentId
1     James    Smith    1234567890     NULL         1

SELECT *
FROM Employees
WHERE ManagerId IS NOT NULL

Deze verklaring retourneert alle werknemersrecords waarvan de waarde van de ManagerId niet NULL .

Het resultaat zal zijn:

Id    FName       LName     PhoneNumber    ManagerId    DepartmentId
2     John        Johnson   2468101214     1            1
3     Michael     Williams  1357911131     1            2
4     Johnathon   Smith     1212121212     2            1

Opmerking: dezelfde zoekopdracht retourneert geen resultaten als u de clausule WHERE ManagerId = NULL in WHERE ManagerId = NULL of WHERE ManagerId <> NULL .

Gebruik HEBBEN met verzamelfuncties

In tegenstelling tot de WHERE component kan HAVING worden gebruikt met geaggregeerde functies.

Een aggregatiefunctie is een functie waarbij de waarden van meerdere rijen worden gegroepeerd als invoer op bepaalde criteria om een enkele waarde met een significantere betekenis of meting te vormen ( Wikipedia ).

Veelgebruikte aggregatiefuncties zijn COUNT() , SUM() , MIN() en MAX() .


In dit voorbeeld wordt de autotabel uit de voorbeelddatabases gebruikt.

SELECT CustomerId, COUNT(Id) AS [Number of Cars]
FROM Cars
GROUP BY CustomerId
HAVING COUNT(Id) > 1

Deze zoekopdracht retourneert het aantal CustomerId Number of Cars en Number of Cars van elke klant die meer dan één auto heeft. In dit geval is klant # 1 de enige klant die meer dan één auto heeft.

De resultaten zien er als volgt uit:

Klanten ID Aantal auto's
1 2

Gebruik TUSSEN om resultaten te filteren

De volgende voorbeelden gebruiken de voorbeelddatabases Artikelverkoop en Klanten .

Opmerking: de operator TUSSEN is inclusief.

De operator BETWEEN met Numbers gebruiken:

SELECT * From ItemSales
WHERE Quantity BETWEEN 10 AND 17

Deze query retourneert alle ItemSales records met een hoeveelheid groter dan of gelijk aan 10 en kleiner dan of gelijk aan 17. De resultaten zien er als volgt uit:

ID kaart Verkoopdatum Item ID Aantal stuks Prijs
1 2013/07/01 100 10 34.5
4 2013/07/23 100 15 34.5
5 2013/07/24 145 10 34.5

De operator BETWEEN met datumwaarden gebruiken:

SELECT * From ItemSales
WHERE SaleDate BETWEEN '2013-07-11' AND '2013-05-24'

Deze zoekopdracht retourneert alle ItemSales records met een SaleDate die groter is dan of gelijk is aan 11 juli 2013 en kleiner is dan of gelijk is aan 24 mei 2013.

ID kaart Verkoopdatum Item ID Aantal stuks Prijs
3 2013/07/11 100 20 34.5
4 2013/07/23 100 15 34.5
5 2013/07/24 145 10 34.5

Bij het vergelijken van datetime-waarden in plaats van datums, moet u mogelijk de datetime-waarden omzetten in datumwaarden of 24 uur optellen of aftrekken om de juiste resultaten te krijgen.


De operator BETWEEN met tekstwaarden gebruiken:

SELECT Id, FName, LName FROM Customers
WHERE LName BETWEEN 'D' AND 'L';

Live voorbeeld: SQL fiddle

Deze zoekopdracht retourneert alle klanten waarvan de naam alfabetisch tussen de letters 'D' en 'L' valt. In dit geval worden klant # 1 en # 3 geretourneerd. Klant # 2, wiens naam begint met een 'M' wordt niet opgenomen.

ID kaart FName lname
1 William Jones
3 Richard Davis

Gelijkheid

SELECT * FROM Employees 

Deze verklaring retourneert alle rijen uit de tabel Employees .

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

Met behulp van een WHERE aan het einde van uw SELECT instructie kunt u de geretourneerde rijen beperken tot een voorwaarde. In dit geval, wanneer er een exacte overeenkomst is met het = -teken:

SELECT * FROM Employees WHERE DepartmentId = 1

Retourneert alleen de rijen waarbij het DepartmentId gelijk is aan 1 :

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

EN en OF

Je kunt ook verschillende operators combineren om complexere WHERE voorwaarden te creëren. De volgende voorbeelden gebruiken de tabel Employees :

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

EN

SELECT * FROM Employees WHERE DepartmentId = 1 AND ManagerId = 1

Zal terugkomen:

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002

OF

SELECT * FROM Employees WHERE DepartmentId = 2 OR ManagerId = 2

Zal terugkomen:

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

Gebruik HEBBEN om te controleren op meerdere voorwaarden in een groep

Orderentabel

Klanten ID Product-ID Aantal stuks Prijs
1 2 5 100
1 3 2 200
1 4 1 500
2 1 4 50
3 5 6 700

Om te controleren op klanten die beide hebben besteld - ProductID 2 en 3, kan HAVING worden gebruikt

 select customerId
 from orders
 where productID in (2,3)
 group by customerId
 having count(distinct productID) = 2

Winstwaarde:

Klanten ID
1

De query selecteert alleen records met de product-ID's in vragen en met de clausules HAVING voor groepen met 2 product-ID's en niet slechts één.

Een andere mogelijkheid zou zijn

 select customerId
 from orders
 group by customerId
 having sum(case when productID = 2 then 1 else 0 end) > 0
    and sum(case when productID = 3 then 1 else 0 end) > 0

Deze query selecteert alleen groepen met ten minste één record met productID 2 en ten minste één met productID 3.

Waar BESTAAT

Selecteert records in TableName die overeenkomende records hebben in TableName1 .

SELECT * FROM TableName t WHERE EXISTS (
    SELECT 1 FROM TableName1 t1 where t.Id = t1.Id)


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