Sök…


Syntax

  • VÄLJ kolumnnamn
    FRÅN tabellnamn
    VAR kolumnnamn operatörens värde
  • SELECT column_name, aggregate_function (column_name)
    FRÅN tabellnamn
    GROUP BY column_name
    HAR aggregat_funktion (kolumnnamn) operatörsvärde

WHERE-klausulen returnerar bara rader som matchar dess kriterier

Steam har ett spel under $ 10 på deras butiksida. Någonstans djupt i hjärtat av deras system finns det förmodligen en fråga som ser ut som:

SELECT * 
FROM Items 
WHERE Price < 10

Använd IN för att returnera rader med ett värde som finns i en lista

I det här exemplet används biltabellen från exempeldatabaserna.

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

Denna fråga returnerar bil nr 2 som kostar 200 och bil # 3 som kostar 100. Observera att detta motsvarar användning av flera klausuler med OR , t.ex.

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

Använd LIKE för att hitta matchande strängar och underlag

Se fullständig dokumentation om LIKE operatör .

I det här exemplet används medarbetartabellen från exempeldatabaserna.

SELECT *
FROM Employees
WHERE FName LIKE 'John'

Denna fråga returnerar endast anställd nr 1 vars förnamn matchar 'John' exakt.

SELECT *
FROM Employees
WHERE FName like 'John%'

Genom att lägga till % kan du söka efter en substring:

  • John% - returnerar alla anställda vars namn börjar med 'John', följt av valfritt antal tecken
  • %John - kommer att returnera alla anställda vars namn slutar med 'John', fortsätter med alla tecken
  • %John% - kommer att returnera alla anställda vars namn innehåller 'John' var som helst inom värdet

I detta fall kommer frågan att returnera anställd # 2 vars namn är 'John' samt anställd # 4 vars namn är 'Johnathon'.

VAR-klausul med NULL / NOT NULL-värden

SELECT *
FROM Employees
WHERE ManagerId IS NULL

Detta uttalande kommer att returnera alla anställda poster där värdet på kolumnen ManagerId är NULL .

Resultatet blir:

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

SELECT *
FROM Employees
WHERE ManagerId IS NOT NULL

Detta uttalande kommer att returnera alla anställda poster där värdet på ManagerId inte är NULL .

Resultatet blir:

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

Obs: Samma fråga returnerar inte resultat om du ändrar WHERE-klausulen till WHERE ManagerId = NULL eller WHERE ManagerId <> NULL .

Använd HAVING med samlade funktioner

Till skillnad från WHERE klausulen kan HAVING användas med aggregerade funktioner.

En aggregerad funktion är en funktion där värdena för flera rader grupperas tillsammans som inmatning på vissa kriterier för att bilda ett enda värde med mer betydande betydelse eller mätning ( Wikipedia ).

Vanliga aggregerade funktioner inkluderar COUNT() , SUM() , MIN() och MAX() .


I det här exemplet används biltabellen från exempeldatabaserna.

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

Denna fråga returnerar CustomerId och Number of Cars för alla kunder som har mer än en bil. I det här fallet är den enda kunden som har mer än en bil kund nr 1.

Resultaten kommer att se ut som:

Kundnummer Antal bilar
1 2

Använd MELLAN för att filtrera resultat

Följande exempel använder exempeldatabaser för artikelförsäljning och kunder .

Obs: Operatören MELLAN är inklusive.

Använda BETWEEN-operatören med siffror:

SELECT * From ItemSales
WHERE Quantity BETWEEN 10 AND 17

Denna fråga returnerar alla ItemSales poster som har en kvantitet som är större eller lika med 10 och mindre än eller lika med 17. Resultaten kommer att se ut:

Id SaleDate Artikelnummer Kvantitet Pris
1 2013/07/01 100 10 34,5
4 2013/07/23 100 15 34,5
5 2013/07/24 145 10 34,5

Använda BETWEEN-operatören med datumvärden:

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

Denna fråga returnerar alla ItemSales poster med en SaleDate som är större än eller lika med 11 juli 2013 och mindre än eller lika med 24 maj 2013.

Id SaleDate Artikelnummer Kvantitet Pris
3 2013/07/11 100 20 34,5
4 2013/07/23 100 15 34,5
5 2013/07/24 145 10 34,5

När du jämför jämförelsevärden istället för datum, kan du behöva konvertera datatvärdena till ett datumvärde eller lägga till eller subtrahera 24 timmar för att få rätt resultat.


Använda BETWEEN-operatören med textvärden:

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

Live-exempel: SQL-fiol

Denna fråga returnerar alla kunder vars namn alfabetiskt faller mellan bokstäverna 'D' och 'L'. I detta fall kommer kund nr 1 och nr 3 att returneras. Kund nr 2, vars namn börjar med en 'M' kommer inte att inkluderas.

Id fNAME LNAME
1 William Jones
3 Richard Davis

Jämlikhet

SELECT * FROM Employees 

Detta uttalande returnerar alla rader från tabellen 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

Om du använder en WHERE i slutet av ditt SELECT uttalande kan du begränsa de returnerade raderna till ett villkor. I det här fallet, där det finns en exakt matchning med hjälp av = -tecknet:

SELECT * FROM Employees WHERE DepartmentId = 1

Kommer bara att returnera raderna där DepartmentId är lika med 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

OCH och ELLER

Du kan också kombinera flera operatörer tillsammans för att skapa mer komplexa WHERE förhållanden. Följande exempel använder tabellen 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

OCH

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

Kommer att återvända:

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

ELLER

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

Kommer att återvända:

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

Använd HAVING för att kontrollera om det finns flera villkor i en grupp

Beställningstabell

Kundnummer Serienummer Kvantitet Pris
1 2 5 100
1 3 2 200
1 4 1 500
2 1 4 50
3 5 6 700

För att söka efter kunder som har beställt båda - ProductID 2 och 3, kan HAVING användas

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

Returvärde:

Kundnummer
1

Frågan väljer endast poster med produkt-ID: erna i frågor och med HAVING-klausulskontroller för grupper med två produkt-ID och inte bara en.

En annan möjlighet skulle vara

 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

Denna fråga väljer endast grupper som har minst en post med produktID 2 och minst en med produktID 3.

Var existerar

Väljer poster i TableName som har poster som matchar i 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow