Database
 sql >> Datenbank >  >> RDS >> Database

Grundlegende SQL-Abfragen

Dieser Artikel enthält Beispiele für grundlegende SQL-Abfragen, mit denen Anfänger Daten aus ihren Datenbanken abrufen können.

Einfaches SELECT Abfrage

Hier ist ein Beispiel für die möglicherweise am häufigsten verwendete Abfrage in SQL:

SELECT * 
FROM Pets;

Ergebnis:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Diese Abfrage wählt alle Zeilen und alle Spalten der Pets aus Tisch. Das liegt daran, dass das Sternchen (* ) Wildcard wählt alle Spalten aus.

Spaltennamen auswählen

Aus Leistungsgründen ist es normalerweise am besten, nicht alle Spalten auszuwählen, es sei denn, Sie benötigen sie wirklich. Normalerweise ist es besser, nur die benötigten Spalten auszuwählen.

Hier ist ein Beispiel.

SELECT PetId, PetName
FROM Pets;

Ergebnis:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Fluffy    |
| 2       | Fetch     |
| 3       | Scratch   |
| 4       | Wag       |
| 5       | Tweet     |
| 6       | Fluffy    |
| 7       | Bark      |
| 8       | Meow      |
+---------+-----------+

Ergebnisse filtern

Sie können ein WHERE hinzufügen -Klausel, um die Ergebnisse nur auf die Zeilen zu filtern, die Sie benötigen.

SELECT PetId, PetName
FROM Pets
WHERE PetName = 'Fluffy';

Ergebnis:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Fluffy    |
| 6       | Fluffy    |
+---------+-----------+

Hier ist ein weiteres Beispiel für das Filtern der Ergebnisse. Dieses Mal verwenden wir den Größer-als-Operator (> ), um es nach Datum zu filtern.

SELECT PetName, DOB 
FROM Pets
WHERE DOB > '2020-01-01';

Ergebnis:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Sie können den Größer-als-Operator gegen andere Operatoren austauschen, z. B. den Größer-als-gleich-Operator (>= ), Kleiner-als-Operator (< ) oder Kleiner-gleich-Operator (<= ).

Sie können auch den BETWEEN verwenden Operator, um die Ergebnisse auf einen bestimmten Bereich zu filtern (z. B. zwischen zwei Daten).

SELECT
    PetName,
    DOB
FROM Pets
WHERE DOB BETWEEN '2018-01-01' AND '2020-01-01';

Ergebnis:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
+-----------+------------+

Sortieren Sie die Ergebnisse

Sie können einen ORDER BY hinzufügen -Klausel, um die von der Abfrage zurückgegebenen Zeilen zu sortieren.

Aufsteigende Reihenfolge

Verwenden Sie den ASC Schlüsselwort, um die Ergebnisse in aufsteigender Reihenfolge zu sortieren. Dies ist der Standardwert, Sie können dieses Schlüsselwort also auch weglassen, wenn Sie die Ergebnisse in aufsteigender Reihenfolge wünschen.

SELECT PetId, PetName
FROM Pets
ORDER BY PetName ASC;

Oder:

SELECT PetId, PetName
FROM Pets
ORDER BY PetName;

Ergebnis:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 7       | Bark      |
| 2       | Fetch     |
| 1       | Fluffy    |
| 6       | Fluffy    |
| 8       | Meow      |
| 3       | Scratch   |
| 5       | Tweet     |
| 4       | Wag       |
+---------+-----------+

Absteigende Reihenfolge

Verwenden Sie den DESC Stichwort, um die Ergebnisse in absteigender Reihenfolge zu sortieren.

SELECT PetId, PetName
FROM Pets
ORDER BY PetName DESC;

Ergebnis:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 4       | Wag       |
| 5       | Tweet     |
| 3       | Scratch   |
| 8       | Meow      |
| 1       | Fluffy    |
| 6       | Fluffy    |
| 2       | Fetch     |
| 7       | Bark      |
+---------+-----------+

Nach mehreren Spalten sortieren

Sie können nach mehreren Spalten sortieren, indem Sie jede Spalte durch ein Komma getrennt auflisten.

SELECT PetId, PetName
FROM Pets
ORDER BY PetName ASC, PetId ASC;

SELECT PetId, PetName
FROM Pets
ORDER BY PetName ASC, PetId DESC;

Ergebnis:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 7       | Bark      |
| 2       | Fetch     |
| 1       | Fluffy    |
| 6       | Fluffy    |
| 8       | Meow      |
| 3       | Scratch   |
| 5       | Tweet     |
| 4       | Wag       |
+---------+-----------+
(8 rows affected)
+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 7       | Bark      |
| 2       | Fetch     |
| 6       | Fluffy    |
| 1       | Fluffy    |
| 8       | Meow      |
| 3       | Scratch   |
| 5       | Tweet     |
| 4       | Wag       |
+---------+-----------+
(8 rows affected)

Wir können sehen, dass die beiden Fluffys in jedem Ergebnis eine andere Reihenfolge haben (wir können dies anhand ihrer PetId erkennen Werte). Das liegt daran, dass der PetName Spalte wurde zuerst sortiert, dann die PetId alle Duplikate aus der ersten Sortierung sortiert.

Nach ausgeblendeten Spalten sortieren

Sie können nach Spalten sortieren, die nicht im SELECT enthalten sind Liste.

SELECT PetId, PetName
FROM Pets
ORDER BY DOB DESC;

Ergebnis:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 5       | Tweet     |
| 1       | Fluffy    |
| 6       | Fluffy    |
| 4       | Wag       |
| 2       | Fetch     |
| 3       | Scratch   |
| 7       | Bark      |
| 8       | Meow      |
+---------+-----------+

In diesem Fall können wir aus diesen Ergebnissen schließen, dass Tweet ist das jüngste Haustier und Meow ist die älteste. Das liegt daran, dass wir nach ihrem Geburtsdatum sortiert haben (DOB ) Spalte in absteigender Reihenfolge.

Nur zur Sicherheit hier nochmal mit dem DOB Spalte, die in SELECT enthalten ist Liste.

SELECT PetId, PetName, DOB
FROM Pets
ORDER BY DOB DESC;

Ergebnis:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 5       | Tweet     | 2020-11-28 |
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
| 4       | Wag       | 2020-03-15 |
| 2       | Fetch     | 2019-08-16 |
| 3       | Scratch   | 2018-10-01 |
| 7       | Bark      | NULL       |
| 8       | Meow      | NULL       |
+---------+-----------+------------+

Tatsächlich können wir jetzt sehen, dass Meow und Bark NULL haben Werte im DOB Säule. Daher wissen wir nicht, ob sie tatsächlich älter oder jünger sind.

Aber das zeigt, dass NULL Werte werden als niedrigstmögliche Werte behandelt. Achten Sie auf NULL Werte beim Ausführen von Abfragen.

Musterabgleich

Sie können den LIKE verwenden Operator, um den Musterabgleich zu verwenden.

SELECT PetId, PetName
FROM Pets
WHERE PetName LIKE 'F%';

Ergebnis:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Fluffy    |
| 2       | Fetch     |
| 6       | Fluffy    |
+---------+-----------+

In diesem Beispiel suchen wir nach allen Haustieren, deren Namen mit dem Buchstaben F beginnen . Das Prozentzeichen (% ) ist ein Platzhalterzeichen, das mit einer beliebigen Zeichenfolge aus null oder mehr Zeichen übereinstimmt. Es kann entweder als Präfix oder Suffix verwendet werden, und es kann auch in der Mitte einer Zeichenfolge verwendet werden.

Hier ist ein weiteres Beispiel.

SELECT FirstName, LastName, Email
FROM Owners
WHERE Email LIKE '%@example.%';

Ergebnis:

+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Homer       | Connery    | [email protected] |
| Bart        | Pitt       | [email protected]  |
+-------------+------------+-------------------+

Aus einer Liste auswählen

Der IN -Operator bestimmt, ob ein angegebener Wert mit einem beliebigen Wert in einer Unterabfrage oder einer Liste übereinstimmt.

Hier ist ein Beispiel.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');

Ergebnis:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 4       | Wag       | 2020-03-15 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

Unterabfragen

Sie können den IN verwenden -Operator beim Ausführen einer Unterabfrage (eine in einer anderen Abfrage verschachtelte Abfrage).

Hier ist ein Beispiel.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Ergebnis:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Dies gab Spalten aus einer Tabelle zurück (PetTypes ), aber nur, wenn es mindestens eine entsprechende Zeile in einer anderen Tabelle gab (Pets ), die mit PetTypeId übereinstimmten Spalte.

Um dies weiter zu demonstrieren, werden die relevanten Inhalte dieser beiden Tabellen unten gezeigt.

Die PetTypes Tabelle:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
| 4           | Rabbit    |
+-------------+-----------+

Die Pets Tabelle:

+-------------+-----------+
| PetTypeId   | PetName   |
|-------------+-----------|
| 2           | Fluffy    |
| 3           | Fetch     |
| 2           | Scratch   |
| 3           | Wag       |
| 1           | Tweet     |
| 3           | Fluffy    |
| 3           | Bark      |
| 2           | Meow      |
+-------------+-----------+

Wir können sehen, dass die PetTypes Die Tabelle enthält den Haustiertyp Rabbit , aber keines der Haustiere in Pets Tabelle wurde dieser Typ zugewiesen (d. h. es gibt keinen Wert von 4 in der Pets.PetTypeId Spalte).

Siehe 12 häufig verwendete SQL-Operatoren und diese Liste von SQL-Operatoren für weitere Informationen über Operatoren in SQL.

Beitreten

Es ist fraglich, ob SQL-Joins als „einfache SQL-Abfragen“ betrachtet werden, aber ich füge hier trotzdem einen Join hinzu.

Um diesen Artikel abzurunden, hier ein Beispiel für einen Inner Join.

SELECT 
    p.PetName,
    pt.PetType
FROM Pets p
INNER JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId;

Ergebnis:

+-----------+-----------+
| PetName   | PetType   |
|-----------+-----------|
| Fluffy    | Cat       |
| Fetch     | Dog       |
| Scratch   | Cat       |
| Wag       | Dog       |
| Tweet     | Bird      |
| Fluffy    | Dog       |
| Bark      | Dog       |
| Meow      | Cat       |
+-----------+-----------+

In diesem Fall haben wir einen INNER JOIN verwendet um alle Tiernamen mit ihren jeweiligen Tierarten zurückzugeben. Wir haben den ON verwendet -Klausel, um das Prädikat anzugeben, das für jedes Paar verbundener Zeilen ausgewertet werden soll. In diesem Fall die p.PetTypeId Spalte ist ein Fremdschlüssel der pt.PetTypeId Spalte, die der Primärschlüssel für die PetTypes ist Tabelle.

In diesem Beispiel habe ich auch Aliase für die Tabellen verwendet, was dazu beigetragen hat, den Code schön und prägnant zu halten.

Weitere Beispiele für Joins finden Sie in meinem Tutorial zu SQL-Joins.