Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
modul:m290_guko:learningunits:lu02:theorie:b_sql_select [2025/08/24 14:50] – gkoch | modul:m290_guko:learningunits:lu02:theorie:b_sql_select [2025/08/31 11:27] (aktuell) – gkoch | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Daten mit SQL abfragen ====== | + | ====== |
===== Daten abfragen ===== | ===== Daten abfragen ===== | ||
- | Das // | + | Das // |
- | Mit <code sql> | + | Mit <WRAP center box round 80%><code sql> |
* alle Spalten | * alle Spalten | ||
* bestimmte Spalten | * bestimmte Spalten | ||
Zeile 10: | Zeile 10: | ||
* sortiert | * sortiert | ||
- | ---- | ||
===== Alle Spalten ausgeben ===== | ===== Alle Spalten ausgeben ===== | ||
Die einfachste Abfrageform ist: | Die einfachste Abfrageform ist: | ||
- | <code sql> | + | <WRAP center box round 80%><code sql> |
SELECT * FROM imdb_top_1000; | SELECT * FROM imdb_top_1000; | ||
- | </ | + | </ |
+ | |||
+ | Die **FROM-Anweisung** sagt in welcher Tabelle gesucht werden soll. | ||
Dies gibt **alle Spalten** und **alle Zeilen** der Tabelle zurück. | Dies gibt **alle Spalten** und **alle Zeilen** der Tabelle zurück. | ||
Zeile 31: | Zeile 32: | ||
===== Bestimmte Spalten ausgeben ===== | ===== Bestimmte Spalten ausgeben ===== | ||
- | Wenn nur bestimmte Daten benötigt werden, empfiehlt es sich, die Spalten **explizit** anzugeben: | + | Wenn nur bestimmte Daten benötigt werden, empfiehlt es sich, die Spalten **explizit** anzugeben. Die Spalten werden mit **Kommas (,)** getrennt: |
- | <code sql> | + | <WRAP center box round 80%><code sql> |
SELECT Series_Title, | SELECT Series_Title, | ||
FROM imdb_top_1000; | FROM imdb_top_1000; | ||
- | </ | + | </code></ |
- | Beispielauszug: | ||
+ | Beispielauszug: | ||
+ | <WRAP center box round 80%> | ||
^ Filmtitel ^ Jahr ^ Bewertung ^ | ^ Filmtitel ^ Jahr ^ Bewertung ^ | ||
| The Godfather | 1972 | 9.2 | | | The Godfather | 1972 | 9.2 | | ||
| Interstellar | 2014 | 8.6 | | | Interstellar | 2014 | 8.6 | | ||
+ | | The Green Mile | 1999 | 8.6 | | ||
| Whiplash | 2014 | 8.5 | | | Whiplash | 2014 | 8.5 | | ||
+ | </ | ||
===== Ausgabe sortieren ===== | ===== Ausgabe sortieren ===== | ||
- | Mit <code sql>ORDER BY</code> | + | Mit //ORDER BY// können Ergebnisse sortiert werden. |
- | <code sql> | + | <WRAP center box round 80%><code sql> |
-- Die Filme nach Erscheinungsjahr sortieren | -- Die Filme nach Erscheinungsjahr sortieren | ||
SELECT Series_Title, | SELECT Series_Title, | ||
FROM imdb_top_1000 | FROM imdb_top_1000 | ||
ORDER BY Released_Year ASC; | ORDER BY Released_Year ASC; | ||
- | </ | + | </code></ |
- | Oder umgekehrt, | + | Mit //ASC// (engl. ascending = Aufsteigend) oder //DESC// (engl. descending = Absteigend) kann die Sortierung bestimmt werden. |
- | <code sql> | + | Die besten Filme zuerst: |
+ | |||
+ | <WRAP center box round 80%><code sql> | ||
SELECT Series_Title, | SELECT Series_Title, | ||
FROM imdb_top_1000 | FROM imdb_top_1000 | ||
ORDER BY IMDB_Rating DESC; | ORDER BY IMDB_Rating DESC; | ||
- | </ | + | </code></ |
===== Abfragen filtern ===== | ===== Abfragen filtern ===== | ||
- | Nicht immer sind alle Daten interessant – mit <code sql>WHERE</code> | + | Nicht immer sind alle Daten interessant – **mit //WHERE// können Bedingungen definiert** werden. |
+ | Während die bisher behandelten //SELECT//- und // | ||
+ | Wegen seiner wichtigen Bedeutung zur Einschränkung (Restriktion) einer Tabelle auf bestimmte Zeilen kommt die WHERE-Anweisung in der Praxis trotzdem in fast allen SELECT-Befehlen vor. Die Struktur einer Abfrage mit Bedingung lautet in Worten: | ||
+ | |||
+ | * **Was?** (welche **Spalten** werden ausgewählt -> z.B. //SELECT Series_Title// | ||
+ | * **Woher?** (aus welcher/n **Tabelle/ | ||
+ | * Unter **welcher/n Bedingung/ | ||
+ | \\ | ||
- | <code sql> | + | <WRAP center box round 80%><code sql> |
- | -- Alle Drama-Filme mit Bewertung über 8.5 | + | -- Alle Filme mit Bewertung über 8.5 |
SELECT Series_Title, | SELECT Series_Title, | ||
FROM imdb_top_1000 | FROM imdb_top_1000 | ||
WHERE IMDB_Rating > 8.5; | WHERE IMDB_Rating > 8.5; | ||
- | </ | + | </code></ |
Ergebnis (Auszug): | Ergebnis (Auszug): | ||
+ | <WRAP center box round 80%> | ||
^ Filmtitel ^ Bewertung ^ | ^ Filmtitel ^ Bewertung ^ | ||
| The Godfather | 9.2 | | | The Godfather | 9.2 | | ||
| The Green Mile | 8.6 | | | The Green Mile | 8.6 | | ||
| Interstellar | 8.6 | | | Interstellar | 8.6 | | ||
- | + | </ | |
- | ---- | + | |
===== Operatoren ===== | ===== Operatoren ===== | ||
- | Im <code sql>WHERE</code>-Statement können verschiedene Operatoren eingesetzt werden. | + | Im //WHERE//-Statement können verschiedene Operatoren eingesetzt werden, um die Auswahl von Datensätzen einzuschränken. |
- | * Arithmetische Operatoren: | + | ==== Vergleichsoperatoren ==== |
- | * Logische Operatoren: | + | <WRAP center box 80%>< |
- | * Spezifische Operatoren: < | + | → werden vor allem bei Zahlen verwendet. |
+ | Beispiel: nur Filme anzeigen, die **vor 1970** erschienen sind. | ||
- | **Beispiele: | + | <WRAP center box round 80%><code sql> |
- | + | ||
- | <code sql> | + | |
- | -- Alle Filme von 1990 bis 1999 | + | |
SELECT Series_Title, | SELECT Series_Title, | ||
FROM imdb_top_1000 | FROM imdb_top_1000 | ||
- | WHERE Released_Year | + | WHERE Released_Year |
- | </ | + | </code></ |
- | < | + | |
- | -- Filme von Nolan oder Coppola | + | ==== Logische Verknüpfungen ==== |
+ | |||
+ | <WRAP center box round 80%><code>AND, OR, NOT</ | ||
+ | → verbinden mehrere Bedingungen. | ||
+ | Beispiel: | ||
+ | |||
+ | <WRAP center box round 80%>< | ||
SELECT Series_Title, | SELECT Series_Title, | ||
FROM imdb_top_1000 | FROM imdb_top_1000 | ||
- | WHERE Director | + | WHERE Director |
- | </ | + | </code></ |
- | <code sql> | + | Mit //AND// kann man Bedingungen kombinieren, |
- | -- Alle Filme, deren Titel mit ' | + | <WRAP center box round 80%><code sql> |
- | SELECT Series_Title, | + | -- Alle Sci-Fi-Filme von Christopher Nolan |
+ | SELECT Series_Title, | ||
FROM imdb_top_1000 | FROM imdb_top_1000 | ||
- | WHERE Series_Title LIKE 'The%'; | + | WHERE Director = 'Christopher Nolan' AND Genre = 'Drama'; |
- | </ | + | </code></ |
- | ---- | + | ==== IN-Operator ==== |
+ | <WRAP center box round 80%>< | ||
+ | → vereinfacht Abfragen mit vielen Bedingungen. | ||
- | ===== SQL-Funktionen ===== | + | <WRAP center box round 80%>< |
- | SQL stellt hilfreiche Funktionen zur Verfügung: | + | -- Filme von Nolan oder Coppola |
+ | SELECT Series_Title, | ||
+ | FROM imdb_top_1000 | ||
+ | WHERE Director IN (' | ||
+ | </ | ||
- | * Anzahl Datensätze zählen: | + | Das Gegenteil mit //NOT IN//: |
- | <code sql> | + | <WRAP center box round 80%><code sql> |
+ | -- Alle Filme, die NICHT von Nolan oder Coppola sind | ||
+ | SELECT | ||
+ | FROM imdb_top_1000 | ||
+ | WHERE Director NOT IN (' | ||
+ | </code></ | ||
- | * Durchschnittliche Bewertung: | ||
- | <code sql> | ||
- | |||
- | * Höchste Bewertung: | ||
- | <code sql> | ||
- | |||
- | * Gruppierung nach Regisseur: | ||
- | <code sql> | ||
- | SELECT Director, AVG(IMDB_Rating) AS avg_rating | ||
- | FROM imdb_top_1000 | ||
- | GROUP BY Director | ||
- | ORDER BY avg_rating DESC; | ||
- | </ | ||
- | |||
- | ---- | ||
===== Zusammenfassung ===== | ===== Zusammenfassung ===== | ||
Zeile 143: | Zeile 156: | ||
* <code sql> | * <code sql> | ||
* <code sql> | * <code sql> | ||
- | * <code sql> | ||
Mit diesen Befehlen sind die wichtigsten Grundlagen für Abfragen in relationalen Datenbanken gelegt. | Mit diesen Befehlen sind die wichtigsten Grundlagen für Abfragen in relationalen Datenbanken gelegt. | ||
- | ---- | + | |