So verwalten Sie eine SQL-Datenbank

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 Siehighlighted 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üsselwortPRIVILEGESin 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üsselwortPRIVILEGESerforderlich 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

BETWEEN

prüft, ob ein Wert innerhalb eines bestimmten Bereichs liegt

IN

testet, ob der Wert einer Zeile in einer Reihe angegebener Werte enthalten ist

EXISTS

testet, ob unter den angegebenen Bedingungen Zeilen vorhanden sind

LIKE

Testet, ob ein Wert mit einer angegebenen Zeichenfolge übereinstimmt

IS NULL

testet aufNULL Werte

IS NOT NULL

Tests für alle anderen Werte alsNULL

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 FunktionAVGnur 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.

Related