Ein SQL-Spickzettel
Einführung
SQL-Datenbanken werden mit allen Befehlen geliefert, die Sie zum Hinzufügen, Ändern, Löschen und Abfragen Ihrer Daten benötigen. Diese Anleitung im Spickzettelstil bietet eine kurze Übersicht über einige der am häufigsten verwendeten SQL-Befehle.
Verwendung dieses Handbuchs:
-
Diese Anleitung ist im Spickzettel-Format mit in sich geschlossenen Befehlszeilen-Snippets
-
Wechseln Sie zu einem Abschnitt, der für die Aufgabe relevant ist, die Sie ausführen möchten
-
Wenn Sie
highlighted text
in den Befehlen dieses Handbuchs sehen, beachten Sie, dass dieser Text auf die Spalten, Tabellen und Daten in der Datenbank vonyour ownverweisen sollte. -
In diesem Handbuch werden die angegebenen Beispieldatenwerte alle in Apostrophe (
'
) eingeschlossen. In SQL müssen alle Datenwerte, die aus Zeichenfolgen bestehen, in Apostrophe eingeschlossen werden. Dies ist für numerische Daten nicht erforderlich, verursacht jedoch keine Probleme, wenn Sie Apostrophe einfügen.
Beachten Sie, dass SQL zwar als Standard erkannt wird, die meisten SQL-Datenbankprogramme jedoch eigene proprietäre Erweiterungen haben. In diesem Handbuch wird MySQL als Beispiel für ein relationales Datenbankverwaltungssystem (RDBMS) verwendet. Die angegebenen Befehle funktionieren jedoch auch mit anderen relationalen Datenbankprogrammen, einschließlich PostgreSQL, MariaDB und SQLite. Wo es signifikante Unterschiede zwischen RDBMSs gibt, haben wir die alternativen Befehle aufgenommen.
Öffnen der Datenbank-Eingabeaufforderung (mithilfe der Socket / Trust-Authentifizierung)
Standardmäßig kann sich der MySQL-Benutzer vonrootunter Ubuntu 18.04 mit dem folgenden Befehl ohne Kennwort authentifizieren:
sudo mysql
Verwenden Sie den folgenden Befehl, um eine PostgreSQL-Eingabeaufforderung zu öffnen. In diesem Beispiel werden Sie als Benutzer vonpostgresangemeldet. Dies ist die enthaltene Superuser-Rolle. Sie können diese jedoch durch eine bereits erstellte Rolle ersetzen:
sudo -u postgres psql
Öffnen der Datenbank-Eingabeaufforderung (mithilfe der Kennwortauthentifizierung)
Wenn Ihr MySQL-Benutzerrooto eingestellt ist, dass er sich mit einem Kennwort authentifiziert, können Sie dies mit dem folgenden Befehl tun:
mysql -u root -p
Wenn Sie bereits ein Nicht-Root-Benutzerkonto für Ihre Datenbank eingerichtet haben, können Sie sich auch mit dieser Methode als dieser Benutzer anmelden:
mysql -u user -p
Der obige Befehl fordert Sie auf, Ihr Kennwort einzugeben, nachdem Sie es ausgeführt haben. Wenn Sie Ihr Kennwort als Teil des Befehls angeben möchten, folgen Sie sofort der Option-p
mit Ihrem Kennwort, ohne Leerzeichen dazwischen:
mysql -u root -ppassword
Eine Datenbank erstellen
Der folgende Befehl erstellt eine Datenbank mit Standardeinstellungen.
CREATE DATABASE database_name;
Wenn Sie möchten, dass Ihre Datenbank einen anderen Zeichensatz und eine andere Sortierung als die Standardwerte verwendet, können Sie diese mithilfe der folgenden Syntax angeben:
CREATE DATABASE database_name CHARACTER SET character_set COLLATE collation;
Auflisten von Datenbanken
Führen Sie den folgenden Befehl aus, um festzustellen, welche Datenbanken in Ihrer MySQL- oder MariaDB-Installation vorhanden sind:
SHOW DATABASES;
In PostgreSQL können Sie sehen, welche Datenbanken mit dem folgenden Befehl erstellt wurden:
\list
Datenbank löschen
Führen Sie einen Befehl aus, der dieser Struktur entspricht, um eine Datenbank einschließlich aller darin enthaltenen Tabellen und Daten zu löschen:
DROP DATABASE IF EXISTS database;
Benutzer anlegen
Führen Sie den folgenden Befehl aus, um ein Benutzerprofil für Ihre Datenbank zu erstellen, ohne dafür Berechtigungen anzugeben:
CREATE USER username IDENTIFIED BY 'password';
PostgreSQL verwendet eine ähnliche, jedoch leicht abweichende Syntax:
CREATE USER user WITH PASSWORD 'password';
Wenn Sie einen neuen Benutzer erstellen und ihm in einem Befehl Berechtigungen erteilen möchten, können Sie dies tun, indem Sie eineGRANT
-Anweisung ausgeben. Der folgende Befehl erstellt einen neuen Benutzer und gewährt ihm alle Berechtigungen für jede Datenbank und Tabelle im RDBMS:
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Beachten Sie das SchlüsselwortPRIVILEGES
in dieser vorherigen AnweisungGRANT
. In den meisten RDBMS ist dieses Schlüsselwort optional und diese Anweisung kann wie folgt geschrieben werden:
GRANT ALL ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Beachten Sie jedoch, dass das SchlüsselwortPRIVILEGES
erforderlich ist, um solche Berechtigungen zu erteilen, wennStrict SQL mode aktiviert ist.
Benutzer löschen
Verwenden Sie die folgende Syntax, um ein Datenbankbenutzerprofil zu löschen:
DROP USER IF EXISTS username;
Beachten Sie, dass dieser Befehl standardmäßig keine vom gelöschten Benutzer erstellten Tabellen löscht und der Versuch, auf solche Tabellen zuzugreifen, zu Fehlern führen kann.
Datenbank auswählen
Bevor Sie eine Tabelle erstellen können, müssen Sie dem RDBMS zunächst mitteilen, in welcher Datenbank Sie sie erstellen möchten. Führen Sie dazu in MySQL und MariaDB die folgende Syntax aus:
USE database;
In PostgreSQL müssen Sie den folgenden Befehl verwenden, um die gewünschte Datenbank auszuwählen:
\connect database
Eine Tabelle erstellen
Die folgende Befehlsstruktur erstellt eine neue Tabelle mit dem Namentable
und enthält zwei Spalten mit jeweils einem eigenen Datentyp:
CREATE TABLE table ( column_1 column_1_data_type, column_2 column_2_data_taype );
Eine Tabelle löschen
Führen Sie Folgendes aus, um eine Tabelle einschließlich aller Daten vollständig zu löschen:
DROP TABLE IF EXISTS table
Einfügen von Daten in eine Tabelle
Verwenden Sie die folgende Syntax, um eine Tabelle mit einer Datenzeile zu füllen:
INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_A', 'data_B', 'data_C' );
Sie können eine Tabelle auch mit mehreren Datenzeilen füllen, indem Sie einen einzigen Befehl eingeben:
INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_1A', 'data_1B', 'data_1C' ), ( 'data_2A', 'data_2B', 'data_2C' ), ( 'data_3A', 'data_3B', 'data_3C' );
Daten aus einer Tabelle löschen
Verwenden Sie die folgende Befehlsstruktur, um eine Datenzeile aus einer Tabelle zu löschen. Beachten Sie, dassvalue
der Wert sein sollte, der in den angegebenencolumn
in der Zeile enthalten ist, die Sie löschen möchten:
DELETE FROM table WHERE column='value';
[.Hinweis]##
Note: Wenn Sie keineWHERE
-Klausel in eineDELETE
-Anweisung aufnehmen, wie im folgenden Beispiel, werden alle in einer Tabelle enthaltenen Daten gelöscht, jedoch nicht die Spalten oder die Tabelle selbst:
DELETE FROM table;
Daten in einer Tabelle ändern
Verwenden Sie die folgende Syntax, um die in einer bestimmten Zeile enthaltenen Daten zu aktualisieren. Beachten Sie, dass dieWHERE
-Klausel am Ende des Befehls SQL mitteilt, welche Zeile aktualisiert werden soll. value
ist der Wert incolumn_A
, der mit der Zeile übereinstimmt, die Sie ändern möchten.
[.note] #Note: Wenn Sie eineWHERE
-Klausel nicht in eineUPDATE
-Anweisung aufnehmen, ersetzt der Befehl die Daten in jeder Zeile der Tabelle.
#
UPDATE table SET column_1 = value_1, column_2 = value_2 WHERE column_A=value;
Einfügen einer Spalte
Die folgende Befehlssyntax fügt einer Tabelle eine neue Spalte hinzu:
ALTER TABLE table ADD COLUMN column data_type;
Eine Spalte löschen
Ein Befehl, der dieser Struktur folgt, löscht eine Spalte aus einer Tabelle:
ALTER TABLE table DROP COLUMN column;
Ausführen grundlegender Abfragen
Verwenden Sie die folgende Syntax, um alle Daten aus einer einzelnen Spalte in einer Tabelle anzuzeigen:
SELECT column FROM table;
Um mehrere Spalten aus derselben Tabelle abzufragen, trennen Sie die Spaltennamen durch ein Komma:
SELECT column_1, column_2 FROM table;
Sie können auch jede Spalte in einer Tabelle abfragen, indem Sie die Namen der Spalten durch ein Sternchen (*
) ersetzen. In SQL fungieren Sternchen als Platzhalter, um "alle" darzustellen:
SELECT * FROM table;
Verwenden von WHERE-Klauseln
Sie können die Ergebnisse einer Abfrage eingrenzen, indem Sie die AnweisungSELECT
mit einer KlauselWHERE
wie folgt anhängen:
SELECT column FROM table WHERE conditions_that_apply;
Beispielsweise können Sie alle Daten aus einer einzelnen Zeile mit einer Syntax wie der folgenden abfragen. Beachten Sie, dassvalue
ein Wert sein sollte, der sowohl in den angegebenencolumn
als auch in der Zeile enthalten ist, die Sie abfragen möchten:
SELECT * FROM table WHERE column = value;
Arbeiten mit Vergleichsoperatoren
Ein Vergleichsoperator in einerWHERE
-Klausel definiert, wie die angegebene Spalte mit dem Wert verglichen werden soll. Hier sind einige gängige SQL-Vergleichsoperatoren:
Operator | Was es macht |
---|---|
|
Tests auf Gleichheit |
|
Tests auf Ungleichheit |
|
Tests für weniger als |
|
Tests für größer als |
|
Tests für weniger als oder gleich |
|
Tests für größer als oder gleich |
|
prüft, ob ein Wert innerhalb eines bestimmten Bereichs liegt |
|
testet, ob der Wert einer Zeile in einer Reihe angegebener Werte enthalten ist |
|
testet, ob unter den angegebenen Bedingungen Zeilen vorhanden sind |
|
Testet, ob ein Wert mit einer angegebenen Zeichenfolge übereinstimmt |
|
testet auf |
|
Tests für alle anderen Werte als |
Mit Platzhaltern arbeiten
SQL erlaubt die Verwendung von Platzhalterzeichen. Diese sind nützlich, wenn Sie versuchen, einen bestimmten Eintrag in einer Tabelle zu finden, sich aber nicht sicher sind, um welchen Eintrag es sich genau handelt.
Sternchen (*
) sind Platzhalter, die "alle" darstellen. Dadurch wird jede Spalte in einer Tabelle abgefragt:
SELECT * FROM table;
Prozentzeichen (%
) stehen für null oder mehr unbekannte Zeichen.
SELECT * FROM table WHERE column LIKE val%;
Unterstriche (_
) werden verwendet, um ein einzelnes unbekanntes Zeichen darzustellen:
SELECT * FROM table WHERE column LIKE v_lue;
Einträge in einer Spalte zählen
Die FunktionCOUNT
wird verwendet, um die Anzahl der Einträge in einer bestimmten Spalte zu ermitteln. Die folgende Syntax gibt die Gesamtzahl der incolumn
enthaltenen Werte zurück:
SELECT COUNT(column) FROM table;
Sie können die Ergebnisse einerCOUNT
-Funktion eingrenzen, indem Sie eineWHERE
-Klausel wie folgt anhängen:
SELECT COUNT(column) FROM table WHERE column=value;
Ermitteln des Durchschnittswerts in einer Spalte
Die FunktionAVG
wird verwendet, um den Durchschnitt (in diesem Fall den Mittelwert) unter den in einer bestimmten Spalte enthaltenen Werten zu ermitteln. Beachten Sie, dass die FunktionAVG
nur mit Spalten funktioniert, die numerische Werte enthalten. Bei Verwendung in einer Spalte mit Zeichenfolgenwerten wird möglicherweise ein Fehler oder0
zurückgegeben:
SELECT AVG(column) FROM table;
Ermitteln der Summe der Werte in einer Spalte
Die FunktionSUM
wird verwendet, um die Gesamtsumme aller in einer Spalte enthaltenen numerischen Werte zu ermitteln:
SELECT SUM(column) FROM table;
Wie bei der FunktionAVG
kann die Ausführung der FunktionSUM
für eine Spalte mit Zeichenfolgenwerten je nach RDBMS einen Fehler oder nur0
zurückgeben.
Den größten Wert in einer Spalte finden
Verwenden Sie die FunktionMAX
, um den größten numerischen Wert in einer Spalte oder den letzten Wert alphabetisch zu ermitteln:
SELECT MAX(column) FROM table;
Den kleinsten Wert in einer Spalte finden
Verwenden Sie die FunktionMIN
, um den kleinsten numerischen Wert in einer Spalte oder den ersten Wert alphabetisch zu ermitteln:
SELECT MIN(column) FROM table;
Sortieren von Ergebnissen mit ORDER BY-Klauseln
EineORDER BY
-Klausel wird verwendet, um Abfrageergebnisse zu sortieren. Die folgende Abfragesyntax gibt die Werte voncolumn_1
undcolumn_2
zurück und sortiert die Ergebnisse nach den Werten incolumn_1
in aufsteigender Reihenfolge oder für Zeichenfolgenwerte in alphabetischer Reihenfolge:
SELECT column_1, column_2 FROM table ORDER BY column_1;
Um dieselbe Aktion auszuführen, aber die Ergebnisse in absteigender oder umgekehrter alphabetischer Reihenfolge zu ordnen, fügen Sie der AbfrageDESC
hinzu:
SELECT column_1, column_2 FROM table ORDER BY column_1 DESC;
Sortieren von Ergebnissen mit GROUP BY-Klauseln
Die KlauselGROUP BY
ähnelt der KlauselORDER BY
, wird jedoch zum Sortieren der Ergebnisse einer Abfrage verwendet, die eine Aggregatfunktion wieCOUNT
,MAX
,MIN
oderSUM
. Die im vorherigen Abschnitt beschriebenen Aggregatfunktionen geben für sich genommen nur einen einzigen Wert zurück. Sie können jedoch die Ergebnisse einer Aggregatfunktion anzeigen, die für jeden übereinstimmenden Wert in einer Spalte ausgeführt wird, indem Sie eineGROUP BY
-Klausel einfügen.
Die folgende Syntax zählt die Anzahl der übereinstimmenden Werte incolumn_2
und gruppiert sie in aufsteigender oder alphabetischer Reihenfolge:
SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2;
Um dieselbe Aktion auszuführen, aber die Ergebnisse in absteigender oder umgekehrter alphabetischer Reihenfolge zu gruppieren, fügen Sie die Abfrage mitDESC
hinzu:
SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2 DESC;
Mehrere Tabellen mit JOIN-Klauseln abfragen
JOIN
-Klauseln werden verwendet, um Ergebnismengen zu erstellen, die Zeilen aus zwei oder mehr Tabellen kombinieren:
SELECT table_1.column_1, table_2.column_2 FROM table_1 JOIN table_2 ON table_1.common_column=table_2.common_column;
Dies ist ein Beispiel für eineINNER JOIN
-Klausel. EinINNER JOIN
gibt alle Datensätze zurück, deren Werte in beiden Tabellen übereinstimmen, zeigt jedoch keine Datensätze an, deren Werte nicht übereinstimmen.
Mithilfe einerouterJOIN
-Klausel können alle Datensätze aus einer von zwei Tabellen zurückgegeben werden, einschließlich der Werte, die in der anderen Tabelle nicht übereinstimmen. ÄußereJOIN
-Klauseln werden entweder alsLEFT JOIN
oderRIGHT JOIN
geschrieben.
EineLEFT JOIN
-Klausel gibt alle Datensätze aus der "linken" Tabelle und nur die übereinstimmenden Datensätze aus der "rechten" Tabelle zurück. Im Kontext der äußerenJOIN
-Klauseln ist die linke Tabelle diejenige, auf die in derFROM
-Klausel verwiesen wird, und die rechte Tabelle ist jede andere Tabelle, auf die nach derJOIN
-Anweisung verwiesen wird. Im Folgenden werden alle Datensätze vontable_1
und nur die übereinstimmenden Werte vontable_2
angezeigt. Alle Werte, die intable_2
nicht übereinstimmen, werden in der Ergebnismenge alsNULL
angezeigt:
SELECT table_1.column_1, table_2.column_2 FROM table_1 LEFT JOIN table_2 ON table_1.common_column=table_2.common_column;
EineRIGHT JOIN
-Klausel funktioniert genauso wie eineLEFT JOIN
-Klausel, druckt jedoch alle Ergebnisse aus der rechten Tabelle und nur die übereinstimmenden Werte aus der linken:
SELECT table_1.column_1, table_2.column_2 FROM table_1 RIGHT JOIN table_2 ON table_1.common_column=table_2.common_column;
Mehrere SELECT-Anweisungen mit UNION-Klauseln kombinieren
DerUNION
-Operator ist nützlich, um die Ergebnisse von zwei (oder mehr)SELECT
-Anweisungen in einer einzigen Ergebnismenge zu kombinieren:
SELECT column_1 FROM table UNION SELECT column_2 FROM table;
Darüber hinaus kann dieUNION
-Klausel zwei (oder mehr)SELECT
-Anweisungen kombinieren, die verschiedene Tabellen in derselben Ergebnismenge abfragen:
SELECT column FROM table_1 UNION SELECT column FROM table_2;
Fazit
In diesem Handbuch werden einige der gebräuchlichsten SQL-Befehle behandelt, die zum Verwalten von Datenbanken, Benutzern und Tabellen sowie zum Abfragen des Inhalts dieser Tabellen verwendet werden. Es gibt jedoch viele Kombinationen von Klauseln und Operatoren, die alle eindeutige Ergebnismengen erzeugen. Wenn Sie nach einer umfassenderen Anleitung für die Arbeit mit SQL suchen, empfehlen wir Ihnen,Oracle’s Database SQL Reference zu lesen.
Wenn Sie in diesem Handbuch häufig verwendete SQL-Befehle sehen möchten, fragen Sie in den Kommentaren unten nach oder machen Sie Vorschläge.