125 lines
3.5 KiB
Markdown
125 lines
3.5 KiB
Markdown
# SQL
|
|
|
|
## Conditions Basics
|
|
|
|
Manchmal möchten wir Datensätze abrufen, die eine bestimmte Bedingung erfüllen.
|
|
|
|
Zum Beispiel
|
|
|
|
- alle Datensätze abrufen, die den Familiennamen „Aothly“ haben
|
|
|
|
- alle Datensätze abrufen, bei denen der Betrag größer als 5 ist
|
|
|
|
- Alle Datensätze mit dem Land „Mexico“ abrufen
|
|
|
|
Um Bedingungen hinzuzufügen, können wir das `WHERE`-Schlüsselwort verwenden
|
|
|
|
Zum Beispiel hier ist eine **Verkäufe**-Tabelle:
|
|
|
|
| Münze | Menge |
|
|
| ----- | ----- |
|
|
| AGK | 13 |
|
|
| GOL | 21 |
|
|
| KLA | 15 |
|
|
| AGK | 18 |
|
|
|
|
Um alle Datensätze mit der Coin „AGK“ abzurufen, schreibt man:
|
|
|
|
`SELECT * FROM sales WHERE coin = 'AGK'`
|
|
|
|
Um alle Datensätze mit `amount` kleiner oder gleich 20 abzurufen, schreibt man:
|
|
|
|
`SELECT * FROM sales WHERE amount <= 20`
|
|
|
|
|
|
|
|
## Unique values
|
|
|
|
Angenommen man hat die folgende Tabelle:
|
|
|
|
**Verkäufe**
|
|
|
|
| | Land | Stadt | Betrag |
|
|
| ---- | ----------- | -------- | ------ |
|
|
| 1 | Polen | Warschau | 13 |
|
|
| 2 | Deutschland | Berlin | 24 |
|
|
| 3 | Polen | Katowice | 56 |
|
|
|
|
Man möchte alle Länder wissen, in denen das Produkt verkauft wurde.
|
|
|
|
Wenn man die normale Abfrage, die wir kennen, verwenden: `SELECT country from sales` liefert sie `Poland`, `Germany`, `Poland`. Das ist nicht das, wonach wir suchen, weil Polen zweimal wiederholt wird.
|
|
|
|
Um es zu lösen, können wir das `DISTINCT`-Schlüsselwort verwenden:
|
|
|
|
## NOT
|
|
|
|
Das `NOT`-Schlüsselwort bedeutet, dass man nicht möchte, dass die Bedingung erfüllt wird.
|
|
|
|
Zum Beispiel betrachte man die folgende **people**-Tabelle:
|
|
|
|
| Name | Alter | Geschlecht |
|
|
| ------ | ----- | ---------- |
|
|
| Joas | 13 | männlich |
|
|
| Holwa | 17 | männlich |
|
|
| Nohlas | 24 | weiblich |
|
|
| Polar | 23 | männlich |
|
|
| Loopa | 18 | weiblich |
|
|
|
|
`SELECT * FROM people WHERE NOT gender = 'male'`
|
|
|
|
Dies wird das Ergebnis sein:
|
|
|
|
| Name | Alter | Geschlecht |
|
|
| ------ | ----- | ---------- |
|
|
| Nohlas | 24 | weiblich |
|
|
| Loopa | 18 | weiblich |
|
|
|
|
Das `NOT`-Schlüsselwort kehrt die Bedingung im Wesentlichen um. Zum Beispiel sind die folgenden Abfragen gleich:
|
|
|
|
`WHERE age > 20`
|
|
|
|
`WHERE NOT age <= 20`
|
|
|
|
## Vorrang
|
|
|
|
`AND` geht vor `OR`
|
|
|
|
## Sortierung (ORDER BY)
|
|
|
|
`... ORDER BY ASC`, das wird standardmäßig gesetzt
|
|
|
|
`ASC` --> Aufsteigend --> kleinster Wert zuerst
|
|
|
|
`DESC` --> Absteigend --< Größter Wert zuerst
|
|
### Beispiele und Erklärung
|
|
Beim Abfragen einer Datenbank kann die Organisation der Ergebnisse in einer sinnvollen Reihenfolge die Datenanalyse erheblich effizienter machen. Um das Ergebnis zu sortieren, verwendet man das ORDER BY-Schlüsselwort und danach sollte man angeben, nach welchem Feld man sortiert. Standardmäßig sortiert es in aufsteigender Reihenfolge.
|
|
|
|
Zum Beispiel betrachten Sie die folgende **competition**-Tabelle:
|
|
|
|
| runner_id | age | avg_speed |
|
|
| --------- | ---- | --------- |
|
|
| 1 | 47 | 3.65 |
|
|
| 2 | 62 | 3.07 |
|
|
| 3 | 57 | 6.82 |
|
|
| 4 | 56 | 4.34 |
|
|
| 5 | 25 | 4.93 |
|
|
| 6 | 40 | 3.94 |
|
|
| 7 | 23 | 6.58 |
|
|
| 8 | 40 | 3.43 |
|
|
|
|
|
|
|
|
`SELECT * FROM competition WHERE age > 50 ORDER BY avg_speed`
|
|
|
|
Dies ist das Ergebnis
|
|
|
|
| runner_id | age | avg_speed |
|
|
| --------- | ---- | --------- |
|
|
| 2 | 62 | 3.07 |
|
|
| 4 | 56 | 4.34 |
|
|
| 3 | 57 | 6.82 |
|
|
|
|
Um anzugeben, wie diese Daten sortiert werden sollen, können wir die `DESC`- oder `ASC`-Schlüsselwörter nach dem Namen der Spalte hinzufügen.
|
|
|
|
`ORDER BY avg_speed ASC`
|