Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
| de:modul:m290_guko:learningunits:lu06:theorie:a_where_bedingungen [2026/08/13 16:06] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | de:modul:m290_guko:learningunits:lu06:theorie:a_where_bedingungen [2026/08/13 16:06] (aktuell) – ↷ Seite von modul:m290_guko:learningunits:lu06:theorie:a_where_bedingungen nach de:modul:m290_guko:learningunits:lu06:theorie:a_where_bedingungen verschoben msuter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== LU06 - Vertiefte SQL-Abfragen ====== | ||
| + | |||
| + | In **LU02** haben Sie gelernt, wie Sie mit | ||
| + | * //SELECT// Spalten auswählen | ||
| + | * //FROM// die Tabelle bestimmen | ||
| + | * //WHERE// Bedingungen setzen | ||
| + | * //ORDER BY// die Ergebnisse sortieren | ||
| + | |||
| + | Daten aus einer Tabelle abfragen können. | ||
| + | |||
| + | In dieser Lektion gehen wir einen Schritt weiter: Wir schauen uns an, **wie Bedingungen in WHERE noch mächtiger kombiniert werden können**, wie Sie mit //LIMIT// die Ergebnismenge einschränken und mit // | ||
| + | |||
| + | ===== Vergleichsoperatoren ===== | ||
| + | |||
| + | Die **einfachsten Bedingungen** vergleichen Werte mit den Operatoren: | ||
| + | <WRAP center box 80% round>< | ||
| + | |||
| + | <WRAP center box 80% round>< | ||
| + | FROM imdb_top_1000 | ||
| + | WHERE Series_Title = ' | ||
| + | |||
| + | Beachten Sie: | ||
| + | Wir haben hier nach einem Wert vom Typ **Text** gesucht. | ||
| + | Texte sind **alphanumerische Zeichen** und müssen immer in **Anführungszeichen** stehen: | ||
| + | * //" | ||
| + | * Ohne Anführungszeichen versteht MySQL das Wort als **Namen einer Tabelle oder Spalte**. | ||
| + | |||
| + | Beispiele: | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Filme vor 1970 | ||
| + | SELECT Series_Title, | ||
| + | FROM imdb_top_1000 | ||
| + | WHERE Released_Year < 1970; | ||
| + | </ | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Filme mit Bewertung über 9.0 | ||
| + | SELECT Series_Title, | ||
| + | FROM imdb_top_1000 | ||
| + | WHERE IMDB_Rating > 9.0; | ||
| + | </ | ||
| + | |||
| + | ===== BETWEEN ===== | ||
| + | |||
| + | Prüfen, ob ein Wert zwischen zwei Grenzen liegt. | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Filme aus den 90ern | ||
| + | SELECT Series_Title, | ||
| + | FROM imdb_top_1000 | ||
| + | WHERE Released_Year BETWEEN 1990 AND 1999; | ||
| + | </ | ||
| + | |||
| + | Achtung: | ||
| + | Der Operator //BETWEEN// schliesst die beiden Grenzen **ein** (also inkl. 1990 und 1999). | ||
| + | Die folgenden beiden Bedingungen sind also **gleichwertig**: | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | Released_Year BETWEEN 1990 AND 1999 | ||
| + | </ | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | Released_Year >= 1990 AND Released_Year <= 1999 | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== IN ===== | ||
| + | |||
| + | Prüfen, ob ein Wert in einer **Liste** vorkommt. | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Filme von Nolan oder Coppola | ||
| + | SELECT Series_Title, | ||
| + | FROM imdb_top_1000 | ||
| + | WHERE Director IN (' | ||
| + | </ | ||
| + | |||
| + | ===== LIKE ===== | ||
| + | |||
| + | Mit //LIKE// können Sie nach **Textmustern** suchen. | ||
| + | * //%// = beliebig viele Zeichen | ||
| + | * //_// = genau ein Zeichen | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Alle Filme, die mit " | ||
| + | SELECT Series_Title | ||
| + | FROM imdb_top_1000 | ||
| + | WHERE Series_Title LIKE ' | ||
| + | </ | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Alle Filme, die " | ||
| + | SELECT Series_Title | ||
| + | FROM imdb_top_1000 | ||
| + | WHERE Series_Title LIKE ' | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== IS NULL / IS NOT NULL ===== | ||
| + | |||
| + | Der Wert **NULL** (sprich: //nall//, englisch ausgesprochen) bedeutet in SQL: | ||
| + | → Es ist **kein Wert vorhanden**. | ||
| + | |||
| + | Das heisst, dass in dem entsprechenden Feld nichts in der Tabelle eingetragen ist. | ||
| + | Das ist etwas anderes als **0** (Zahl) oder ein leerer Text '' | ||
| + | |||
| + | Beispiel in unserer Filmdatenbank: | ||
| + | Anschliessend bildet Metacritic daraus einen gewichteten Durchschnittswert. | ||
| + | )). | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Filme ohne Metascore | ||
| + | SELECT Series_Title, | ||
| + | FROM imdb_top_1000 | ||
| + | WHERE Meta_score IS NULL; | ||
| + | </ | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Filme mit Metascore | ||
| + | SELECT Series_Title, | ||
| + | FROM imdb_top_1000 | ||
| + | WHERE Meta_score IS NOT NULL; | ||
| + | </ | ||
| + | |||
| + | ===== Logische Verknüpfungen (AND / OR / NOT) ===== | ||
| + | |||
| + | Mehrere Bedingungen können kombiniert werden: | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Alle Sci-Fi-Filme von Christopher Nolan | ||
| + | SELECT Series_Title, | ||
| + | FROM imdb_top_1000 | ||
| + | WHERE Director = ' | ||
| + | AND Genre LIKE ' | ||
| + | </ | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Filme von Nolan oder Coppola | ||
| + | SELECT Series_Title, | ||
| + | FROM imdb_top_1000 | ||
| + | WHERE Director = ' | ||
| + | OR Director = 'Sofia Coppola'; | ||
| + | </ | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Alle Filme, die KEINE Komödie sind | ||
| + | SELECT Series_Title, | ||
| + | FROM imdb_top_1000 | ||
| + | WHERE NOT Genre LIKE ' | ||
| + | </ | ||
| + | |||
| + | ===== DISTINCT ===== | ||
| + | |||
| + | Mit // | ||
| + | Beispiel: In der Tabelle gibt es viele " | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Alle verschiedenen Genres | ||
| + | SELECT DISTINCT Certificate | ||
| + | FROM imdb_top_1000; | ||
| + | </ | ||
| + | |||
| + | Ohne // | ||
| + | |||
| + | |||
| + | ===== LIMIT ===== | ||
| + | |||
| + | Oft ist es nicht sinnvoll, **alle Zeilen** auszugeben. Mit //LIMIT// können Sie die Anzahl der Zeilen einschränken. | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Die 5 bestbewerteten Filme | ||
| + | SELECT Series_Title, | ||
| + | FROM imdb_top_1000 | ||
| + | ORDER BY IMDB_Rating DESC | ||
| + | LIMIT 5; | ||
| + | </ | ||
| + | |||
| + | <WRAP center box round 80%>< | ||
| + | -- Die ersten 10 Filme in der Tabelle | ||
| + | SELECT Series_Title, | ||
| + | FROM imdb_top_1000 | ||
| + | LIMIT 10; | ||
| + | </ | ||
| + | |||
| + | ===== Zusammenfassung ===== | ||
| + | |||
| + | Sie können WHERE-Bedingungen mit vielen Operatoren kombinieren: | ||
| + | |||
| + | ^ Operator ^ Beispiel ^ | ||
| + | | = , < , > , <= , >= , <> | // | ||
| + | | BETWEEN ... AND ... | // | ||
| + | | IN (...) | //Director IN (' | ||
| + | | LIKE | // | ||
| + | | IS NULL | // | ||
| + | | IS NOT NULL | // | ||
| + | | AND / OR / NOT | //Director = ' | ||
| + | | DISTINCT | //SELECT DISTINCT Genre// keine Doppelten Ergebnisse | | ||
| + | | LIMIT | //LIMIT 5// für die ersten 5 Ergebnisse | | ||
| + | |||