Suche…


Syntax

  • SELECT Spaltenname
    FROM tabellenname
    WHERE Spaltenname Operatorwert
  • SELECT Spaltenname, Aggregatfunktion (Spaltenname)
    FROM tabellenname
    GROUP BY Spaltenname
    HAVING Aggregate_function (Spaltenname) Operatorwert

Die WHERE-Klausel gibt nur Zeilen zurück, die ihren Kriterien entsprechen

Steam bietet Spiele unter 10 USD auf der Shop-Seite. Irgendwo tief im Herzen ihrer Systeme gibt es wahrscheinlich eine Abfrage, die ungefähr so ​​aussieht:

SELECT * 
FROM Items 
WHERE Price < 10

Verwenden Sie IN, um Zeilen mit einem in einer Liste enthaltenen Wert zurückzugeben

In diesem Beispiel wird die Autotabelle aus den Beispieldatenbanken verwendet.

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

Diese Abfrage gibt Auto Nr. 2 zurück, das 200 kostet, und Auto Nr. 3, das 100 kostet. Beachten Sie, dass dies der Verwendung mehrerer Klauseln mit OR , z.

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

Verwenden Sie LIKE, um übereinstimmende Zeichenfolgen und Teilzeichenfolgen zu finden

Siehe vollständige Dokumentation zum LIKE-Operator .

In diesem Beispiel wird die Employees-Tabelle aus den Beispieldatenbanken verwendet.

SELECT *
FROM Employees
WHERE FName LIKE 'John'

Diese Abfrage gibt nur Mitarbeiter # 1 zurück, dessen Vorname genau mit 'John' übereinstimmt.

SELECT *
FROM Employees
WHERE FName like 'John%'

Durch Hinzufügen von % können Sie nach einer Teilzeichenfolge suchen:

  • John% - gibt jeden Mitarbeiter zurück, dessen Name mit 'John' beginnt, gefolgt von einer beliebigen Anzahl von Zeichen
  • %John - gibt jeden Mitarbeiter zurück, dessen Name mit 'John' endet, gefolgt von einer beliebigen Anzahl von Zeichen
  • %John% - gibt jeden Mitarbeiter, dessen Name "John" enthält, an eine beliebige Stelle innerhalb des Werts zurück

In diesem Fall gibt die Abfrage Mitarbeiter # 2 mit dem Namen 'John' sowie Mitarbeiter # 4 mit dem Namen 'Johnathon' zurück.

WHERE-Klausel mit NULL / NOT NULL-Werten

SELECT *
FROM Employees
WHERE ManagerId IS NULL

Diese Anweisung gibt alle Employee- Datensätze zurück, bei denen der Wert der ManagerId Spalte NULL .

Das Ergebnis wird sein:

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

SELECT *
FROM Employees
WHERE ManagerId IS NOT NULL

Diese Anweisung gibt alle Employee- Datensätze zurück, bei denen der Wert der ManagerId nicht NULL .

Das Ergebnis wird sein:

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

Anmerkung: WHERE ManagerId = NULL Abfrage gibt keine Ergebnisse zurück, wenn Sie die WHERE-Klausel in WHERE ManagerId = NULL oder WHERE ManagerId <> NULL .

Verwenden Sie HAVING mit Aggregatfunktionen

Im Gegensatz zur WHERE Klausel kann HAVING mit Aggregatfunktionen verwendet werden.

Eine Aggregatfunktion ist eine Funktion, bei der die Werte mehrerer Zeilen als Eingabe für bestimmte Kriterien gruppiert werden, um einen einzelnen Wert mit signifikanterer Bedeutung oder Messung ( Wikipedia ) zu bilden.

Häufige Aggregatfunktionen umfassen COUNT() , SUM() , MIN() und MAX() .


In diesem Beispiel wird die Autotabelle aus den Beispieldatenbanken verwendet.

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

Diese Abfrage gibt die CustomerId und die Number of Cars jedes Kunden zurück, der mehr als ein Auto hat. In diesem Fall ist der einzige Kunde, der mehr als ein Auto hat, Kunde # 1.

Die Ergebnisse werden wie folgt aussehen:

Kundennummer Anzahl der Autos
1 2

Verwenden Sie ZWISCHEN, um Ergebnisse zu filtern

In den folgenden Beispielen werden die Beispieldatenbanken " Artikelverkauf und Kunden" verwendet.

Hinweis: Der Operator BETWEEN ist inklusive.

Verwenden des BETWEEN-Operators mit Zahlen:

SELECT * From ItemSales
WHERE Quantity BETWEEN 10 AND 17

Diese Abfrage gibt alle ItemSales Datensätze zurück, deren Menge größer oder gleich 10 und kleiner oder gleich 17 ist. Die Ergebnisse sehen folgendermaßen aus:

Ich würde Verkaufsdatum Artikel Identifikationsnummer Menge Preis
1 2013-07-01 100 10 34,5
4 2013-07-23 100 fünfzehn 34,5
5 2013-07-24 145 10 34,5

Verwenden des BETWEEN-Operators mit Datumswerten:

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

Diese Abfrage gibt alle ItemSales Datensätze mit einem SaleDate , das größer oder gleich dem 11. Juli 2013 und weniger als dem 24. Mai 2013 ist.

Ich würde Verkaufsdatum Artikel Identifikationsnummer Menge Preis
3 2013-07-11 100 20 34,5
4 2013-07-23 100 fünfzehn 34,5
5 2013-07-24 145 10 34,5

Wenn Sie datetime-Werte anstelle von Datumsangaben vergleichen, müssen Sie die datetime-Werte möglicherweise in Datumswerte konvertieren oder 24 Stunden addieren oder subtrahieren, um die richtigen Ergebnisse zu erhalten.


Verwenden des BETWEEN-Operators mit Textwerten:

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

Live-Beispiel: SQL-Geige

Diese Abfrage gibt alle Kunden zurück, deren Name alphabetisch zwischen den Buchstaben 'D' und 'L' liegt. In diesem Fall werden Kunde Nr. 1 und Nr. 3 zurückgegeben. Kunde 2, dessen Name mit einem 'M' beginnt, wird nicht berücksichtigt.

Ich würde FName LName
1 Wilhelm Jones
3 Richard Davis

Gleichberechtigung

SELECT * FROM Employees 

Diese Anweisung gibt alle Zeilen aus der Tabelle 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

Wenn Sie am Ende Ihrer SELECT Anweisung ein WHERE können Sie die zurückgegebenen Zeilen auf eine Bedingung beschränken. In diesem Fall, wenn es eine genaue Übereinstimmung mit dem = -Zeichen gibt:

SELECT * FROM Employees WHERE DepartmentId = 1

Gibt nur die Zeilen zurück, bei denen die DepartmentId gleich 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

UND UND ODER

Sie können auch mehrere Operatoren kombinieren, um komplexere WHERE Bedingungen zu erstellen. Die folgenden Beispiele verwenden die Employees Tabelle:

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

UND

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

Wird zurückkehren:

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

ODER

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

Wird zurückkehren:

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

Verwenden Sie HAVING, um nach mehreren Bedingungen in einer Gruppe zu suchen

Bestellungstabelle

Kundennummer Produkt ID Menge Preis
1 2 5 100
1 3 2 200
1 4 1 500
2 1 4 50
3 5 6 700

Um nach Kunden zu suchen, die beide - ProductID 2 und 3 - bestellt haben, kann HAVING verwendet werden

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

Rückgabewert:

Kundennummer
1

Die Abfrage wählt nur Datensätze mit den Produkt-IDs in Fragen aus und prüft mit der HAVING-Klausel nach Gruppen mit 2 Produkt-IDs und nicht nur einer.

Eine andere Möglichkeit wäre

 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

Diese Abfrage wählt nur Gruppen aus, die mindestens einen Datensatz mit der Produkt-ID 2 und mindestens einen mit der Produkt-ID 3 haben.

Wo EXISTEN

TableName Datensätze in TableName , deren Datensätze in TableName1 übereinstimmen.

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow