Szukaj…


Składnia

  • WYBIERZ nazwę_kolumny
    FROM nazwa_tabeli
    GDZIE wartość operatora nazwa_kolumny
  • WYBIERZ nazwę_kolumny, funkcja_gregatowa (nazwa_kolumny)
    FROM nazwa_tabeli
    GROUP BY nazwa_kolumny
    POSIADAJĄC wartość operatora nazwa_funkcji (nazwa_kolumny)

Klauzula WHERE zwraca tylko wiersze spełniające jej kryteria

Steam ma gry poniżej 10 USD na stronie sklepu. Gdzieś głęboko w sercu ich systemów jest prawdopodobnie zapytanie, które wygląda mniej więcej tak:

SELECT * 
FROM Items 
WHERE Price < 10

Użyj IN, aby zwrócić wiersze z wartością zawartą na liście

W tym przykładzie użyto tabeli samochodów z przykładowych baz danych.

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

To zapytanie zwróci Samochód nr 2, który kosztuje 200, i Samochód nr 3, który kosztuje 100. Zauważ, że jest to równoważne z użyciem wielu klauzul z OR , np .:

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

Użyj LIKE, aby znaleźć pasujące ciągi i podciągi

Zobacz pełną dokumentację operatora LIKE .

W tym przykładzie użyto tabeli pracowników z przykładowych baz danych.

SELECT *
FROM Employees
WHERE FName LIKE 'John'

To zapytanie zwróci tylko pracownika nr 1, którego imię dokładnie pasuje do „John”.

SELECT *
FROM Employees
WHERE FName like 'John%'

Dodanie % pozwala wyszukać podciąg:

  • John% - zwraca każdego pracownika, którego imię zaczyna się od „John”, po którym następuje dowolna liczba znaków
  • %John - zwraca każdego pracownika, którego nazwisko kończy się na „John”, poprzedzone dowolną liczbą znaków
  • %John% - zwróci każdego pracownika, którego nazwisko zawiera „John” w dowolnym miejscu w obrębie wartości

W takim przypadku zapytanie zwróci Pracownika nr 2 o nazwisku „John” oraz Pracownika nr 4 o nazwie „Johnathon”.

GDZIE klauzula z wartościami NULL / NOT NULL

SELECT *
FROM Employees
WHERE ManagerId IS NULL

Ta instrukcja zwróci wszystkie rekordy pracowników, w których wartość kolumny ManagerId wynosi NULL .

Wynik będzie:

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

SELECT *
FROM Employees
WHERE ManagerId IS NOT NULL

To oświadczenie zwróci wszystkie rekordy pracowników, w przypadku których wartość identyfikatora ManagerId nie jest równa NULL .

Wynik będzie:

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

Uwaga: To samo zapytanie nie zwróci wyników, jeśli zmienisz klauzulę WHERE ManagerId = NULL na WHERE ManagerId = NULL lub WHERE ManagerId <> NULL .

Użyj opcji HAVING z funkcjami agregującymi

W przeciwieństwie do klauzuli WHERE , HAVING może być używany z funkcjami agregującymi.

Funkcja agregująca to funkcja, w której wartości wielu wierszy są grupowane jako dane wejściowe według określonych kryteriów w celu utworzenia pojedynczej wartości o bardziej znaczącym znaczeniu lub pomiarze ( Wikipedia ).

Typowe funkcje agregujące obejmują COUNT() , SUM() , MIN() i MAX() .


W tym przykładzie użyto tabeli samochodów z przykładowych baz danych.

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

To zapytanie zwróci CustomerId i Number of Cars każdego klienta, który ma więcej niż jeden samochód. W takim przypadku jedynym klientem, który ma więcej niż jeden samochód, jest Klient nr 1.

Wyniki będą wyglądać następująco:

Identyfikator klienta Liczba samochodów
1 2)

Użyj MIĘDZY do filtrowania wyników

W poniższych przykładach wykorzystano przykładowe bazy danych Sprzedaż towarów i Klienci .

Uwaga: operator BETWEEN jest włączony.

Używanie operatora BETWEEN z liczbami:

SELECT * From ItemSales
WHERE Quantity BETWEEN 10 AND 17

To zapytanie zwróci wszystkie rekordy ItemSales , których ilość jest większa lub równa 10 i mniejsza lub równa 17. Wyniki będą wyglądać następująco:

ID Data wyprzedaży ItemId Ilość Cena £
1 01.07.2013 100 10 34,5
4 2013-07-23 100 15 34,5
5 2013-07-24 145 10 34,5

Używanie operatora BETWEEN z wartościami daty:

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

To zapytanie zwróci wszystkie ItemSales rekordy z SaleDate , która jest większa lub równa 11 lipca 2013 i mniejsza lub równa 24 maja 2013 r.

ID Data wyprzedaży ItemId Ilość Cena £
3) 2013-07-11 100 20 34,5
4 2013-07-23 100 15 34,5
5 2013-07-24 145 10 34,5

Porównując wartości daty i godziny zamiast dat, może być konieczne przekonwertowanie wartości daty i godziny na wartości daty lub dodanie lub odjęcie 24 godzin, aby uzyskać prawidłowe wyniki.


Używanie operatora BETWEEN z wartościami tekstowymi:

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

Przykład na żywo: skrzypce SQL

To zapytanie zwróci wszystkich klientów, których nazwa alfabetycznie mieści się między literami „D” i „L”. W takim przypadku klient nr 1 i nr 3 zostaną zwrócone. Klient nr 2, którego nazwa zaczyna się na „M”, nie zostanie uwzględniony.

ID FName LName
1 William Jones
3) Richard Davis

Równość

SELECT * FROM Employees 

Ta instrukcja zwróci wszystkie wiersze z tabeli 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

Użycie WHERE na końcu instrukcji SELECT pozwala ograniczyć zwracane wiersze do warunku. W takim przypadku, gdy istnieje dokładne dopasowanie za pomocą znaku = :

SELECT * FROM Employees WHERE DepartmentId = 1

Zwróci tylko wiersze, w których DepartmentId jest równy 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

I i LUB

Możesz także połączyć kilku operatorów razem, aby stworzyć bardziej złożone WHERE . Poniższe przykłady wykorzystują 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

I

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

Wróci:

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

LUB

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

Wróci:

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

Użyj opcji HAVING, aby sprawdzić wiele warunków w grupie

Tabela zamówień

Identyfikator klienta ID produktu Ilość Cena £
1 2) 5 100
1 3) 2) 200
1 4 1 500
2) 1 4 50
3) 5 6 700

Aby sprawdzić klientów, którzy zamówili oba - ProductID 2 i 3, można użyć HAVING

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

Zwracana wartość:

Identyfikator klienta
1

Zapytanie wybiera tylko rekordy z identyfikatorami produktu w pytaniach i z klauzulą HAVING dla grup mających 2 identyfikatory produktu, a nie tylko jeden.

Inną możliwością byłoby

 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

To zapytanie wybiera tylko grupy mające co najmniej jeden rekord o identyfikatorze produktu 2 i co najmniej jeden o identyfikatorze produktu 3.

Gdzie ISTNIEJE

Wybiera rekordy w TableName które mają rekordy pasujące w 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow