MySQL: Mit SELECT Daten auslesen
SELECT
dient der Auswahl von Daten, es erfolgt hier keine Änderung innerhalb der Tabelle jeweiligen Tabelle(n). Meist dient SELECT
zur Anzeige ausgewählter Daten einer Tabelle. Dann sieht das Grundgerüst einer SELECT
-Anweisung so aus:
SELECT Felder FROM Tabelle WHERE [Bedingung] [Ergänzungen]
Felder (Spalten)
Nach dem WortSELECT
muss immer ein Ausdruck angegeben werden, der beschreibt welche Felder ausgegeben werden sollen - hier notiert man z.B. die Feldnamen einer Tabelle. Mehrere Spalten werden durch Komma getrennt:
SELECT Spalte1, Spalte2, Spalte3 FROM meineTabelle
... liefert alle Zeilen mit den Spalten Spalte1, Spalte2 und Spalte3 aus der Tabelle meineTabelle. Die Reihenfolge der Spaltennamen kann beliebig gewählt werden . Außerdem kann der Stern (*) dazu verwendet werden um alle Spalten einer Tabelle auszuwählen und diese nicht alle aufzählen zu müssen. Beispiel:SELECT * FROM meineTabelle
Bei der Spaltenauswahl müssen die korrekten Spaltennamen verwendet werden, die in der Tabelle angelegt worden sind. Man kann aber andere Namen mit Hilfe vonAS
zuordnen, sogenannte Alias-Namen:
SELECT Einkaufspreis AS ep, Verkaufspreis AS vp ...
Tabelle
Nach dem WortFROM
(das nie fehlen darf) erwartet SQL den Namen einer Tabelle. Die Tabelle muss unter diesem Namen existieren. Man kann Alias-Namen zuordnen, z.B.
SELECT * FROM Preis
Auch hier können mehrere Tabellen wieder durch Kommata getrennt angegeben werden. Möchte man die Daten aus mehreren Tabellen auswählen, so müssen die einzelnen Spalten einer Tabelle zusätzlich mit dem Tabellennamen angesprochen werden. Beispiel:SELECT A.spalteA, B.spalteA FROM tabelleA AS A, tabelleB AS B
Bedingung (die Where-Klausel)
Normalerweise wählt SQL immer automatisch alle Zeilen der Tabelle(n) aus. Um die Auswahl auf bestimmte Zeilen zu begrenzen können Bedingungen eingesetzt werden, die stets nach den Tabellennamen und dem WortWHERE
notiert werden. Sie kann nicht nur bei SELECT
angewendet werden, sondern identisch auch bei UPDATE
und DELETE
. Beispiel:
SELECT * FROM tabelle WHERE ...
"Bedingung" heißt bei SQL z.B., dass in einer Spalte ein bestimmter Wert steht (manchmal auch in mehreren Spalten bestimmte Werte). Beispiel:SELECT * FROM Preis WHERE ArtikelNr = 1;
So werden alle Datensätze der Tabelle "Preis" ausgewählt, bei denen die ArtikelNr = 1 ist. Den Inhalt von Textfeldern muss man in Hochkommas setzen:SELECT * FROM Artikel WHERE Hersteller = 'Stifty';
Das = (Gleichheitszeichen) nennt man Operator oder Operand. Es steht hier zwischen dem Feldnamen und dem Wert. MySQL soll also die auswählen, wo Hersteller gleich 'Stifty' ist. Anstelle des Gleichheitszeichens können auch andere Operanden stehen, z.B. != (ungleich), > (größer), < (kleiner) usw.. Welche Operanden möglich sind wird im späteren Kapitel "Operanden" beschrieben.Bedingungen können auch mehrere angeben werden, das einleitende Schlüsselwort
WHERE
darf aber nur einmal vorhanden sein. Verkettet werden die Bedingungen nicht mit Komma, sondern mit speziellen Zeichen, die auch Operanden heißen, z.B. AND oder OR. Beispiel:
SELECT * FROM Artikel
WHERE Hersteller = 'Stifty' AND Bezeichnung = 'Faserino'
Werden mehrere Bedingungen verwendet, können zusätzlich Klammern dazu verwendet werden um die Abgrenzung der einzelnen Bedingung zu beschreiben (ähnlich wie in Mathe).
ORDER BY
MitORDER BY
können Sie die Auflistung nach einer oder mehreren Spalte(n) sortieren. Geben Sie dazu einfach nach den zwei Worten den oder die Namen der Spalten an nach denen sortiert werden soll. Beispiel:
SELECT * FROM Artikel ORDER BY Bezeichnung, Hersteller
Die Tabelle ist dann primär nach der Spalte "Bezeichnung" alphabetisch sortiert. Gibt es mehrere Zeilen mit gleichen Bezeichnung-Werten, werden diese wiederum untereinander nochmals nach Hersteller sortiert. Ohne Zusatz erfolgt die Sortierung aufsteigend (das heißt der kleinste Wert zuerst), mit den ZusatzDESC
oder DESCENDING
erfolgt die Sortierung absteigend (der höchste Wert zuerst).
GROUP BY
Um Datensätze zu Gruppen zusammen zu fassen verwendet manGROUP BY
. In eine Gruppe kommen jeweils alle Zeilen, die bei den angegebenen Feldern gleiche Werte aufweisen. Jede Gruppe wird nur einmal angezeigt.Setzt man z.B. die folgende Abfrage auf eine imaginäre Produkttabelle an, erhält man eine Auflistung der aller Hersteller - ohne die Gruppierung würden die einzelnen Hersteller so oft ausgegeben werden, wie sie in der Tabelle enthalten sind.
SELECT Hersteller FROM Produkte GROUP BY Hersteller;
Solche Gruppierungen eignen sich gut, um z.B. zu zählen wie die Werte in einer Tabelle verteilt sind. Dazu benutzt man Funktionen. Dazu gehören z.B.count(*)
, min(Feldname)
oder max(Feldname)
. Mit count(*)
zählt man, wieviele Datensätze zu dieser Gruppe gehören. Beispiel:
SELECT Typ, count(*) FROM Artikel GROUP BY Typ;
HAVING
Das ist eine Sonderform, die es nur in Zusammenhang mitGROUP BY
gibt. Sie wirkt bei Gruppierungen genauso wie die WHERE
-Klausel bei SELECT
-Statements. Mit HAVING
kann man das Ergebnis von Funktionen auswerten, was mit WHERE
nicht gehen würde. Beispiel.
SELECT Hersteller, COUNT(*) AS Anzahl
FROM Artikel GROUP BY Hesteller HAVING Anzahl > 1;
Verknüpfung von Tabellen
Oft findet man die Daten, die aufgelistet werden sollen, nicht nur in einer einzigen Tabelle, sondern sie sind über mehrere Tabellen verteilt. Diese Philosophie des relationalen Datenmodells schlägt sich auch in den SQL-Befehlen nieder. Verknüpfungen mehrerer Tabellen in einem einzigen Befehl sind nur in Verbindung mitSELECT
möglich. Alle anderen Befehle (UPDATE
, INSERT
, DELETE
, REPLACE
) wirken immer nur auf eine Tabelle.Das Grundprinzip ist bei allen Verknüpfungen gleich: Hinter dem Schlüsselwort
FROM
werden mehrere Tabellen als Datenquelle angegeben:
SELECT * FROM Artikel, Preis;
Dies ist die einfachste Form, derCROSS JOIN
. Sozusagen kreuz und quer wird hier jeder Satz von Tabelle Artikel mit jedem Satz von Preis verknüpft. Tabelle Artikel hat 3 Sätze, Preis 5. Das Ergebnis sind 3 * 5 = 15 Sätze. In der Praxis ist das selten sinnvoll. Deshalb wird meist eingeschränkt durch eine WHERE
- oder eine JOIN
-Klausel. Bei den folgenden Varianten handelt es sich um eine INNER JOIN
-Verknüpfung. In unserem Beispiel ist die Verknüpfung durch die ArtikelNr sinnvoll:
SELECT * FROM Artikel, Preis
WHERE Preis.ArtikelNr = Artikel.ArtikelNr
SELECT * FROM Artikel
INNER JOIN Preis ON Artikel.ArtikelNr = Preis.ArtikelNr
SELECT * FROM Artikel INNER JOIN Preis USING (ArtikelNr)
INNER JOIN
hat den Nachteil, dass nur Datensätze angezeigt werden, bei denen die ArtikelNr in beiden Tabellen enthalten ist. Die anderen werden einfach weggelassen. Um Datensätze, deren Schlüssel nicht in beiden Tabellen existiert, auch anzuzeigen, gibt es gibt es den
OUTER JOIN
in der Form LEFT JOIN
und RIGHT JOIN
.LEFT JOIN
schreibt man, wenn von der Tabelle, die links im SELECT
-Befehl steht, alle Datensätze angezeigt werden sollen:
SELECT * FROM Artikel LEFT JOIN Preis USING (ArtikelNr)
Analog zuLEFT JOIN
gibt es den RIGHT JOIN
. Für unser Beispiel würde RIGHT JOIN
bedeuten, dass auch Datensätze der Tabelle Preis angezeigt werden sollen, deren ArtikelNr es in der Tabelle Artikel nicht gibt:
SELECT * FROM Artikel RIGHT JOIN Preis USING (ArtikelNr)
Wer SQL aus anderen Anwendungen kennt, z.B. Oracle, vermisst vielleicht folgende Variante:SELECT * FROM Preis WHERE ArtikelNr
IN (SELECT ArtikelNr FROM Artikel WHERE Hersteller = 'Stifty');
SELECT
's aus.Unsere Beispiele zeigen nur Verknüpfungen zwischen 2 Tabellen. In der Praxis werden oft
SELECT
-Befehle mit mehrfachen Verknüpfungen benutzt. Je mehr JOINS
in einem SELECT
, desto höher ist allerdings die Laufzeit. Manchmal ist es sinnvoller, statt einem SELECT
mit vielen JOINS
mehrere SELECT
's hintereinander auszuführen und die Zwischenergebnisse in temporären Tabellen zu speichern, die nachher wieder gelöscht werden. JOINS
lassen sich nicht nur auf reine SELECT
-Befehle anwenden, sondern auch auf UPDATE
- und DELETE
-Befehle. Dort ist die Syntax für verknüpfte Tabellen aber nur eingeschränkt benutzbar. Letztlich muss der Interpreter eindeutig erkennen, in welcher Tabelle er welche Datensätze ändern oder löschen soll.
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Weiterlesen: ⯈ Daten einfügen mit INSERT
Über uns
Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project