Befehlsreferenz SQL: Unterschied zwischen den Versionen
Jneug (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ == SELECT Anweisungen == === Ergebnisse sortieren === === Ergebnisse filtern === === Ergebnisse einschränken === === Spalten umbenennen === === Funktion…“) |
Jneug (Diskussion | Beiträge) |
||
| (20 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
{{Status/In Bearbeitung von|jneug}}{{Kurzlink|befehle-sql}} | |||
Um die SQL-Anfragen direkt auszuprobierne kannst Du die Seite [http://sqlfiddle.com/#!9/660a1/1 SQL Fiddle] benutzen. Klicke im linken Bereich unten auf "Browser", um dir das Schema der SQL-Tabellen anzeigen zu lassen. Au der rechten Seite kannst Du Deine Abfragen eingeben und mit "Run SQL" ausführen lassen. | |||
== SELECT Anweisungen == | == SELECT Anweisungen == | ||
Mit der <code>SELECT</code> Anweisung können Datensätze aus einer Datenbank abgerufen werden. | |||
<syntaxhighlight lang="SQL"> | |||
SELECT * FROM personen | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/660a1/1/0 Probier es aus.]) | |||
<code>*</code> bedeutet "Rufe alle Spalten ab", <code>personen</code> ist die Tabelle mit den Datensätzen. Um nur bestimmte Spalten abzurufen können diese statt <code>*</code> aufgelistet werden. | |||
<syntaxhighlight lang="SQL"> | |||
SELECT Gericht, Preis FROM speisen | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/660a1/4/0 Probier es aus.]) | |||
=== Ergebnisse sortieren === | === Ergebnisse sortieren === | ||
Die Datensätze im Ergebnis können mit dem <code>ORDER BY</code> Befehl sortiert werden: | |||
<syntaxhighlight lang="SQL"> | |||
SELECT id, Name, Ort FROM personen ORDER BY Name | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/660a1/5/0 Probier es aus.]) | |||
Das Egebnis ist <em>aufsteigend</em> nach den Werten in der Spalte <code>Name</code> sortiert. Die Sortierrichtung kann mit den Schlüsselwörtern <code>ASC</code> (ascending/aufsteigend) und <code>DESC</code> (descending/absteigend) festgelegt werden. | |||
<syntaxhighlight lang="SQL"> | |||
SELECT id, Name, Ort FROM personen ORDER BY Name DESC | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/660a1/6/0 Probier es aus.]) | |||
Um nach meherern Spalten zu sortieren, können diese hintereinander angegeben werden. Um zuerst absteigend nach <code>Abteilung</code> und dann jede ABteilung aufsteigend nach <code>Name</code> zu sortieren, schreibt man: | |||
<syntaxhighlight lang="SQL"> | |||
SELECT id, Name, Abteilung FROM personen ORDER BY Abteilung DESC, Name ASC | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/660a1/10/0 Probier es aus.]) | |||
=== Ergebnisse filtern === | === Ergebnisse filtern === | ||
=== Ergebnisse einschränken === | === Ergebnisse einschränken === | ||
Wenn eine Abfrage zu viele Datensätze auf einmal ergibt, dann kann man mit dem <code>LIMIT</code> Befehl die Anzahl der Datensätze einschränken. Zum Beispiel die ersten fünf Datensätze: | |||
<syntaxhighlight lang="SQL"> | |||
SELECT * FROM personen ORDER BY Name LIMIT 5 | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/660a1/11/0 Probier es aus.]) | |||
Möchte man nicht die ersten fünf, sondern fünf Datensätze ab dem dritten Datensatz, dann können mit <code>OFFSET</code> die ersten Ergebniszeilen übersprungen werden: | |||
<syntaxhighlight lang="SQL"> | |||
SELECT * FROM personen ORDER BY Name LIMIT 5 OFFSET 3 | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/660a1/12/0 Probier es aus.]) | |||
=== Spalten umbenennen === | === Spalten umbenennen === | ||
Manchmal ist es hilfreich im Ergebnis den Spalten andere Namen zu geben. Das kannst Du mit <code>AS</code> machen. Die neuen Namen kannst Du dann auch in anderen Befehlen (zum Beispiel <code>ORDER BY</code>) verwenden. | |||
<syntaxhighlight lang="SQL"> | |||
SELECT Name AS Vorname,Tel AS Telefonnummer | |||
FROM personen | |||
ORDER BY Vorname | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/660a1/13/0 Probier es aus.]) | |||
=== Funktionen nutzen === | === Funktionen nutzen === | ||
SQL hat eine ganze Reihe von ''Funktionen'' eingebaut, mit denen die Werte der Datensätze manipuliert werden können. Zum Beispiel ändert die <code>UPPER</code> Funktion einen Text in Großuchstaben um: | |||
<syntaxhighlight lang="SQL"> | |||
SELECT Name, UPPER(Name) FROM personen | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/660a1/15/0 Probier es aus.]) | |||
Bei Funktionen ist es wichtig, auf den <code>Typ</code> der Werte zu achten. Die Funktion <code>UPPER</code> macht zum Beispiel nur bei Texten Sinn. | |||
Hier ist eine Auswahl der Funktionen für verschiedene Typen: | |||
==== Text ==== | |||
; <code>UPPER(Text)</code> | |||
: Text in Großbuchstaben. | |||
; <code>LOWER(Text)</code> | |||
: Text in Kleinuchstaben. | |||
; <code>LEFT(Text, Anzahl)</code> | |||
: Ermittelt die ersten <code>Anzahl</code> Buchstaben. | |||
; <code>RIGHT(Text, Anzahl)</code> | |||
: Ermittelt die letzten <code>Anzahl</code> Buchstaben. | |||
; <code>LENGTH(Text)</code> | |||
: Zählt die Buchstaben des Textes. | |||
; <code>REVERSE(Text)</code> | |||
: Dreht den Text um (von rechts nach links). | |||
; <code>CONCAT(TextA, TextB, ...)</code> | |||
: Hängt <code>TextB</code> hinten an <code>TextA</code> an. Es können auch weitere Texte angegeben werden, die alle hintereinander zusammengefügt werden. | |||
==== Zahl ==== | |||
; <code>ABS(Zahl)</code> | |||
: Ermittelt den Absolutbetrag der Zahl. | |||
; <code>SIGN(Zahl)</code> | |||
: Ermittelt das Vorzeichen der Zahl (<code>-1</code>, <code>0</code> oder <code>1</code>). | |||
; <code>ROUND(Zahl, Stellen)</code> | |||
: Rundet die Zahl auf <code>Stellen</code> Nachkommastellen. | |||
; <code>CEIL(Zahl)</code> | |||
: Rundet die Zahl auf die nächste Ganzzahl auf. | |||
; <code>FLOOR(Zahl)</code> | |||
: Rundet die Zahl auf die nächste Ganzzahl ab. | |||
; <code>RAND()</code> | |||
: Erzeugt eine zufällige Zahl wischen <code>0.0</code> und <code>1.0</code>. | |||
; [https://www.sql-und-xml.de/server-daten/sql-befehle/mathematische-funktionen.html Mathematische Funktionen]: <code>SIN</code>, <code>COS</code>, <code>SQRT</code>, ... | |||
: Berechnung mathematischer Ausdrücke wie Sinus, Kosinus oder der Quadratwurzel. | |||
==== Datum ==== | |||
; <code>YEAR(Datum)</code> | |||
: Ermittelt das Jahr des Datums. | |||
; <code>MONTH(Datum)</code> | |||
: Ermittelt dden Monat des Datums. | |||
; <code>DAY(Datum)</code> | |||
: Ermittelt den Tag des Datums. | |||
; <code>DATE_FORMAT(Datum, Format)</code> | |||
: Erzeugt aus einem Datumswert einen Text, der das Datum in einem bestimmten Format darstellt. Das Format wird durch den Text <code>Format</code> festgelgt. Dazu werden [https://www.tutorialspoint.com/sql/sql-date-functions.htm#function_date-format Platzhalter] in den Text geschrieben, die dann ersetzt werden. Zum Beispiel erzeugt <code>"%d.%m.%Y"</code> eine Datum wie <code>11.03.2021</code>. <code>%Y</code> wird also durch das vierstellige Jahr ersetzt. | |||
Funktionen lassen sich natürlich auch kombinieren, sofern sie den pasenden Typ erzeugen: | |||
<syntaxhighlight lang="SQL"> | |||
SELECT CONCAT(Name, " (", UPPER(Abteilung), ") aus ", LEFT(Ort, 3)) FROM personen | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/660a1/26/0 Probier es aus.]) | |||
=== Ergebnisse gruppieren === | === Ergebnisse gruppieren === | ||
SQL kann die Ergebnisse einer Abfrage zusammenfassen (''gruppieren'') und dann Berechnungen für die so erstellten Gruppen durchzuführen. Dazu wird mit <code>GROUP BY</code> die Spalte angegeben, nach der Gruppiert werden soll. | |||
<syntaxhighlight lang="SQL"> | |||
SELECT Abteilung, COUNT(*) FROM personen GROUP BY Abteilung | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/f74511/9/0 Probier es aus]) | |||
Das funktioniert auch mit mehreren Spalten: | |||
<syntaxhighlight lang="SQL"> | |||
SELECT Abteilung, Ort, COUNT(*) FROM personen GROUP BY Abteilung, Ort | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/f74511/10/0 Probier es aus]) | |||
Um die Ergebnisse einer Gruppierung zu filtern, gibt es zusätzlich zum <code>WHERE</code>-Befehl noch den <code>HAVING</code>-Befehl. <code>WHERE</code> wird wie [[#Ergebnisse_filtern|oben beschrieben]] benutzt, um einzelne Datensätze zu filter ''bevor sie für die Gruppierung berücksichtigt werden''. <code>HAVING</code> filtert dagegen die Gruppen, nachdem die Datensätze diesen zugeordnet wurden. | |||
<syntaxhighlight lang="SQL"> | |||
SELECT Abteilung, COUNT(*) FROM personen GROUP BY Abteilung HAVING COUNT(*) > 3 | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/f74511/11/0 Probier es aus]) | |||
Im Vergleich dazu: | |||
<syntaxhighlight lang="SQL"> | |||
SELECT Abteilung, COUNT(*) FROM personen WHERE Ort <> "" GROUP BY Abteilung | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/f74511/15/0 Probier es aus]) | |||
=== Aggregatsfunktionen nutzen === | === Aggregatsfunktionen nutzen === | ||
Aggregatfunktionen ermitteln einen Wert über den gesamten Datensatz hinweg. Ein Beispiel sind die Funktionen <code>MIN</code> und <code>MAX</code>, die den Minimal- bzw. Maximalwert eines Datensatzes abfragen. Kombiniert mit der Gruppierung von Datensätzen, werden diese Aggregatfunktionen gruppenweise angewandt und ermitteln zum Beispiel den Minimal- bzw. Maximalwert ''jeder Gruppe''. <code>COUNT</code> ist auch eine Aggregatfunktion. | |||
<syntaxhighlight lang="SQL"> | |||
SELECT Abteilung, COUNT(*), MIN(Plz) FROM personen GROUP BY Abteilung | |||
</syntaxhighlight> | |||
([http://sqlfiddle.com/#!9/f74511/16/0 Probier es aus]) | |||
Bis auf <code>COUNT</code> werden Aggregatfunktionen auf Zahlkarte angewandt: | |||
; <code>COUNT</code> | |||
: Ermittelt die Anzahl der Datensätze (in der Gruppe). | |||
; <code>SUM</code> | |||
: Ermittelt die Summe des Datensatzes / der Gruppe. | |||
; <code>MIN</code> | |||
: Ermittelt das Minimum des Datensatzes / der Gruppe. | |||
; <code>MAX</code> | |||
: Ermittelt das Maximum des Datensatzes / der Gruppe. | |||
; <code>AVG</code> | |||
: Ermittelt das arithmetische Mittel des Datensatzes / der Gruppe. | |||
=== Tabellen verknüpfen === | === Tabellen verknüpfen === | ||
Aktuelle Version vom 25. März 2021, 16:12 Uhr
Diese Seite ist auch erreichbar unter link.ngb.schule/befehle-sql
Um die SQL-Anfragen direkt auszuprobierne kannst Du die Seite SQL Fiddle benutzen. Klicke im linken Bereich unten auf "Browser", um dir das Schema der SQL-Tabellen anzeigen zu lassen. Au der rechten Seite kannst Du Deine Abfragen eingeben und mit "Run SQL" ausführen lassen.
SELECT Anweisungen
Mit der SELECT Anweisung können Datensätze aus einer Datenbank abgerufen werden.
SELECT * FROM personen
* bedeutet "Rufe alle Spalten ab", personen ist die Tabelle mit den Datensätzen. Um nur bestimmte Spalten abzurufen können diese statt * aufgelistet werden.
SELECT Gericht, Preis FROM speisen
Ergebnisse sortieren
Die Datensätze im Ergebnis können mit dem ORDER BY Befehl sortiert werden:
SELECT id, Name, Ort FROM personen ORDER BY Name
Das Egebnis ist aufsteigend nach den Werten in der Spalte Name sortiert. Die Sortierrichtung kann mit den Schlüsselwörtern ASC (ascending/aufsteigend) und DESC (descending/absteigend) festgelegt werden.
SELECT id, Name, Ort FROM personen ORDER BY Name DESC
Um nach meherern Spalten zu sortieren, können diese hintereinander angegeben werden. Um zuerst absteigend nach Abteilung und dann jede ABteilung aufsteigend nach Name zu sortieren, schreibt man:
SELECT id, Name, Abteilung FROM personen ORDER BY Abteilung DESC, Name ASC
Ergebnisse filtern
Ergebnisse einschränken
Wenn eine Abfrage zu viele Datensätze auf einmal ergibt, dann kann man mit dem LIMIT Befehl die Anzahl der Datensätze einschränken. Zum Beispiel die ersten fünf Datensätze:
SELECT * FROM personen ORDER BY Name LIMIT 5
Möchte man nicht die ersten fünf, sondern fünf Datensätze ab dem dritten Datensatz, dann können mit OFFSET die ersten Ergebniszeilen übersprungen werden:
SELECT * FROM personen ORDER BY Name LIMIT 5 OFFSET 3
Spalten umbenennen
Manchmal ist es hilfreich im Ergebnis den Spalten andere Namen zu geben. Das kannst Du mit AS machen. Die neuen Namen kannst Du dann auch in anderen Befehlen (zum Beispiel ORDER BY) verwenden.
SELECT Name AS Vorname,Tel AS Telefonnummer
FROM personen
ORDER BY Vorname
Funktionen nutzen
SQL hat eine ganze Reihe von Funktionen eingebaut, mit denen die Werte der Datensätze manipuliert werden können. Zum Beispiel ändert die UPPER Funktion einen Text in Großuchstaben um:
SELECT Name, UPPER(Name) FROM personen
Bei Funktionen ist es wichtig, auf den Typ der Werte zu achten. Die Funktion UPPER macht zum Beispiel nur bei Texten Sinn.
Hier ist eine Auswahl der Funktionen für verschiedene Typen:
Text
UPPER(Text)- Text in Großbuchstaben.
LOWER(Text)- Text in Kleinuchstaben.
LEFT(Text, Anzahl)- Ermittelt die ersten
AnzahlBuchstaben. RIGHT(Text, Anzahl)- Ermittelt die letzten
AnzahlBuchstaben. LENGTH(Text)- Zählt die Buchstaben des Textes.
REVERSE(Text)- Dreht den Text um (von rechts nach links).
CONCAT(TextA, TextB, ...)- Hängt
TextBhinten anTextAan. Es können auch weitere Texte angegeben werden, die alle hintereinander zusammengefügt werden.
Zahl
ABS(Zahl)- Ermittelt den Absolutbetrag der Zahl.
SIGN(Zahl)- Ermittelt das Vorzeichen der Zahl (
-1,0oder1). ROUND(Zahl, Stellen)- Rundet die Zahl auf
StellenNachkommastellen. CEIL(Zahl)- Rundet die Zahl auf die nächste Ganzzahl auf.
FLOOR(Zahl)- Rundet die Zahl auf die nächste Ganzzahl ab.
RAND()- Erzeugt eine zufällige Zahl wischen
0.0und1.0. - Mathematische Funktionen
SIN,COS,SQRT, ...- Berechnung mathematischer Ausdrücke wie Sinus, Kosinus oder der Quadratwurzel.
Datum
YEAR(Datum)- Ermittelt das Jahr des Datums.
MONTH(Datum)- Ermittelt dden Monat des Datums.
DAY(Datum)- Ermittelt den Tag des Datums.
DATE_FORMAT(Datum, Format)- Erzeugt aus einem Datumswert einen Text, der das Datum in einem bestimmten Format darstellt. Das Format wird durch den Text
Formatfestgelgt. Dazu werden Platzhalter in den Text geschrieben, die dann ersetzt werden. Zum Beispiel erzeugt"%d.%m.%Y"eine Datum wie11.03.2021.%Ywird also durch das vierstellige Jahr ersetzt.
Funktionen lassen sich natürlich auch kombinieren, sofern sie den pasenden Typ erzeugen:
SELECT CONCAT(Name, " (", UPPER(Abteilung), ") aus ", LEFT(Ort, 3)) FROM personen
Ergebnisse gruppieren
SQL kann die Ergebnisse einer Abfrage zusammenfassen (gruppieren) und dann Berechnungen für die so erstellten Gruppen durchzuführen. Dazu wird mit GROUP BY die Spalte angegeben, nach der Gruppiert werden soll.
SELECT Abteilung, COUNT(*) FROM personen GROUP BY Abteilung
Das funktioniert auch mit mehreren Spalten:
SELECT Abteilung, Ort, COUNT(*) FROM personen GROUP BY Abteilung, Ort
Um die Ergebnisse einer Gruppierung zu filtern, gibt es zusätzlich zum WHERE-Befehl noch den HAVING-Befehl. WHERE wird wie oben beschrieben benutzt, um einzelne Datensätze zu filter bevor sie für die Gruppierung berücksichtigt werden. HAVING filtert dagegen die Gruppen, nachdem die Datensätze diesen zugeordnet wurden.
SELECT Abteilung, COUNT(*) FROM personen GROUP BY Abteilung HAVING COUNT(*) > 3
Im Vergleich dazu:
SELECT Abteilung, COUNT(*) FROM personen WHERE Ort <> "" GROUP BY Abteilung
Aggregatsfunktionen nutzen
Aggregatfunktionen ermitteln einen Wert über den gesamten Datensatz hinweg. Ein Beispiel sind die Funktionen MIN und MAX, die den Minimal- bzw. Maximalwert eines Datensatzes abfragen. Kombiniert mit der Gruppierung von Datensätzen, werden diese Aggregatfunktionen gruppenweise angewandt und ermitteln zum Beispiel den Minimal- bzw. Maximalwert jeder Gruppe. COUNT ist auch eine Aggregatfunktion.
SELECT Abteilung, COUNT(*), MIN(Plz) FROM personen GROUP BY Abteilung
Bis auf COUNT werden Aggregatfunktionen auf Zahlkarte angewandt:
COUNT- Ermittelt die Anzahl der Datensätze (in der Gruppe).
SUM- Ermittelt die Summe des Datensatzes / der Gruppe.
MIN- Ermittelt das Minimum des Datensatzes / der Gruppe.
MAX- Ermittelt das Maximum des Datensatzes / der Gruppe.
AVG- Ermittelt das arithmetische Mittel des Datensatzes / der Gruppe.