Wie man Daten in SQL einfügt

0 Aktien
0
0
0
0

Einführung

Die Structured Query Language, besser bekannt als SQL, bietet große Flexibilität beim Einfügen von Daten in Tabellen. Beispielsweise können Sie einzelne Datenzeilen mit dem Schlüsselwort VALUES angeben, ganze Datensätze aus bestehenden Tabellen mit SELECT-Abfragen kopieren und Spalten so definieren, dass SQL automatisch Daten in diese einfügt.

In diesem Leitfaden werden wir untersuchen, wie man mit der INSERT INTO SQL-Syntax Daten zu Tabellen hinzufügt, und zwar mit jeder dieser Methoden.

Voraussetzungen

Um dieser Anleitung zu folgen, benötigen Sie einen Computer mit einem relationalen Datenbankmanagementsystem (RDBMS), das SQL verwendet. Die Anweisungen und Beispiele in dieser Anleitung wurden in der folgenden Umgebung getestet:

  • Ein Server mit Ubuntu 20.04, einem Benutzer ohne Root-Rechte, der über administrative Berechtigungen verfügt, und einer mit UFW konfigurierten Firewall.
  • MySQL ist auf dem Server installiert und gesichert.

Sie benötigen außerdem eine Datenbank und eine Tabelle, in die Sie das Einfügen von Daten üben können. Falls Sie diese noch nicht haben, finden Sie im Abschnitt „Verbindung zu MySQL herstellen und eine Beispieldatenbank einrichten“ weitere Informationen zum Erstellen der Datenbank und Tabelle, die in den Beispielen dieses Leitfadens verwendet werden.

Verbindung zu MySQL herstellen und eine Beispieldatenbank einrichten

Wenn Ihr SQL-Datenbanksystem auf einem Remote-Server läuft, stellen Sie eine SSH-Verbindung von Ihrem lokalen Rechner zu Ihrem Server her:

ssh sammy@your_server_ip

Öffnen Sie anschließend die MySQL-Server-Eingabeaufforderung und ersetzen Sie „Sami“ durch Ihren MySQL-Benutzernamen:

mysql -u sammy -p

Erstelle eine Datenbank namens insertDB:

CREATE DATABASE insertDB;

Wenn die Datenbank erfolgreich erstellt wurde, erhalten Sie folgende Ausgabe:

Query OK, 1 row affected (0.01 sec)

Um die Datenbank insertDB auszuwählen, führen Sie die folgende USE-Anweisung aus:

USE insertDB;
Output
Database changed

Nachdem Sie die Datenbank insertDB ausgewählt haben, erstellen Sie darin eine Tabelle. Angenommen, Sie besitzen eine Fabrik und möchten eine Tabelle erstellen, um Informationen über Ihre Mitarbeiter zu speichern. Diese Tabelle wird die folgenden fünf Spalten haben:

  • NameDer Name jedes Mitarbeiters, angegeben im Datentyp varchar mit maximal 30 Zeichen
  • PositionIn dieser Spalte wird die Berufsbezeichnung jedes Mitarbeiters gespeichert, die wiederum mit dem Datentyp varchar und maximal 30 Zeichen angegeben wird.
  • AbteilungDie Abteilung, in der jeder Mitarbeiter arbeitet, angegeben im Datentyp varchar, jedoch mit maximal 20 Zeichen.
  • StundenlohnDie Spalte zur Erfassung des Stundenlohns jedes Mitarbeiters verwendet den Datentyp Dezimalzahl. Die Werte in dieser Spalte dürfen maximal vier Stellen lang sein, wobei zwei dieser Stellen rechts vom Dezimaltrennzeichen stehen. Der zulässige Wertebereich in dieser Spalte liegt daher zwischen -99,99 und 99,99.
  • StartdatumDas Einstellungsdatum jedes Mitarbeiters, angegeben als Datumswert. Werte dieses Typs müssen dem Format JJJJ-MM-TT entsprechen.

Erstellen Sie eine Tabelle namens factoryEmployees mit diesen fünf Spalten:

CREATE TABLE factoryEmployees (
name varchar(30),
position varchar(30),
department varchar(20),
hourlyWage decimal(4,2),
startDate date
);

Damit sind Sie bereit, dem Rest der Anleitung zu folgen und zu lernen, wie man Daten mit SQL einfügt.

Daten manuell eingeben

Die allgemeine Syntax zum Einfügen von Daten in SQL lautet wie folgt:

INSERT INTO table_name
(column1, column2, . . . columnN)
VALUES
(value1, value2, . . . valueN);

Um dies zu demonstrieren, führen Sie die folgende INSERT INTO-Anweisung aus, um die Tabelle factoryEmployees mit einer Datenzeile zu laden:

INSERT INTO factoryEmployees
(name, position, department, hourlyWage, startDate)
VALUES
('Agnes', 'thingamajig foreman', 'management', 26.50, '2017-05-01');
Output
Query OK, 1 row affected (0.00 sec)

Die Anweisung beginnt mit dem Schlüsselwort INSERT INTO, gefolgt vom Namen der Tabelle, in die die Daten eingefügt werden sollen. Nach dem Tabellennamen folgt eine in Klammern gesetzte Liste der Spalten, in die die Daten eingefügt werden sollen. Im Anschluss an die Spaltenliste steht das Schlüsselwort VALUES, gefolgt von einer in Klammern gesetzten und durch Kommas getrennten Werteliste.

Die Reihenfolge der Spalten ist unerheblich. Wichtig ist nur, dass die Reihenfolge der angegebenen Werte mit der Spaltenreihenfolge übereinstimmt. SQL versucht stets, den ersten Wert in die erste Spalte, den zweiten in die nächste usw. einzufügen. Die folgende INSERT-Anweisung fügt beispielsweise eine weitere Datenzeile hinzu, listet die Spalten aber in einer anderen Reihenfolge auf:

INSERT INTO factoryEmployees
(department, hourlyWage, startDate, name, position)
VALUES
('production', 15.59, '2018-04-28', 'Jim', 'widget tightener');
Output
Query OK, 1 row affected (0.00 sec)

Wenn Sie die Werte nicht korrekt ausrichten, kann SQL Ihre Daten in die falschen Spalten einfügen. Außerdem wird ein Fehler ausgegeben, wenn einer der Werte mit dem Datentyp der Spalte in Konflikt steht, wie in diesem Beispiel:

INSERT INTO factoryEmployees
(name, hourlyWage, position, startDate, department)
VALUES
('Louise', 'doodad tester', 16.50, '2017-05-01', 'quality assurance');
Output
ERROR 1366 (HY000): Incorrect decimal value: 'doodad tester' for column 'hourlyWage' at row 1

Beachten Sie, dass Sie zwar für jede angegebene Spalte einen Wert angeben müssen, aber nicht unbedingt jede Spalte der Tabelle angeben müssen, wenn Sie eine neue Datenzeile hinzufügen. Solange keine der zu löschenden Spalten eine Einschränkung aufweist, die in diesem Fall einen Fehler verursachen würde (z. B. NOT NULL), fügt MySQL nicht angegebenen Spalten NULL hinzu.

INSERT INTO factoryEmployees
(name, position, hourlyWage)
VALUES
('Harry', 'whatzit engineer', 26.50);
Output
Query OK, 1 row affected (0.01 sec)

Wenn Sie eine Zeile mit Werten für jede Spalte der Tabelle einfügen möchten, müssen Sie die Spaltennamen nicht angeben. Beachten Sie jedoch, dass die eingegebenen Werte der Reihenfolge der Spalten in der Tabellendefinition entsprechen müssen.

In diesem Beispiel sind die aufgeführten Werte in der Reihenfolge angeordnet, in der die Spalten in der CREATE TABLE-Anweisung für die Tabelle factoryEmployee definiert sind:

INSERT INTO factoryEmployees
VALUES
('Marie', 'doodad welder', 'production', 27.88, '2018-03-29');
Output
Query OK, 1 row affected (0.00 sec)

Sie können auch mehrere Datensätze gleichzeitig hinzufügen, indem Sie die einzelnen Zeilen durch Kommas trennen, zum Beispiel so:

INSERT INTO factoryEmployees
VALUES
('Giles', 'gizmo inspector', 'quality assurance', 26.50, '2019-08-06'),
('Daphne', 'gizmo presser', 'production', 32.45, '2017-11-12'),
('Joan', 'whatzit analyst', 'quality assurance', 29.00, '2017-04-29');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

Daten mit SELECT-Anweisungen kopieren

Anstatt die Daten Zeile für Zeile anzugeben, können Sie mehrere Datenzeilen aus einer Tabelle kopieren und mit einer SELECT-Abfrage in eine andere Tabelle einfügen.

Die Syntax für diese Art von Operation lautet wie folgt:

INSERT INTO table_A (col_A1, col_A2, col_A3)
SELECT col_B1, col_B2, col_B3
FROM table_B;

Anstatt nach der Spaltenliste das Schlüsselwort VALUES einzufügen, folgt in diesem Beispiel eine SELECT-Anweisung. Die SELECT-Anweisung in diesem Beispiel enthält nur die FROM-Klausel, aber jede gültige Abfrage funktioniert.

Um dies zu veranschaulichen, führen Sie die folgende CREATE TABLE-Operation aus, um eine neue Tabelle namens showroomEmployees zu erstellen. Beachten Sie, dass die Namen und Datentypen der Spalten in dieser Tabelle mit den drei Spalten der Tabelle factoryEmployees aus dem vorherigen Abschnitt übereinstimmen:

CREATE TABLE showroomEmployees (
name varchar(30),
hourlyWage decimal(4,2),
startDate date
);
Output
Query OK, 0 rows affected (0.02 sec)

Sie können diese neue Tabelle nun mit Daten aus der zuvor erstellten Tabelle factoryEmployees laden, indem Sie eine SELECT-Abfrage in die INSERT INTO-Anweisung einfügen.

Wenn die SELECT-Abfrage die gleiche Anzahl an Spalten in der gleichen Reihenfolge wie die Spalten in der Zieltabelle zurückgibt und diese auch übereinstimmende Datentypen aufweisen, können Sie die Spaltenliste in der INSERT INTO-Anweisung weglassen:

INSERT INTO showroomEmployees
SELECT
factoryEmployees.name,
factoryEmployees.hourlyWage,
factoryEmployees.startDate
FROM factoryEmployees
WHERE name = 'Agnes';
Output
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0

Die SELECT-Anweisung in diesem Vorgang enthält eine WHERE-Klausel, die bewirkt, dass die Abfrage nur Zeilen aus der Tabelle „factoryEmployees“ zurückgibt, deren Spalte „name“ den Wert „Agnes“ enthält. Da die Quelltabelle nur eine Zeile enthält, wird nur diese Zeile in die Tabelle „showroomEmployees“ kopiert.

Um dies zu überprüfen, führen Sie die folgende Abfrage aus, um jeden Datensatz in der Tabelle „Showroom-Mitarbeiter“ zurückzugeben:

SELECT * FROM showroomEmployees;
Output
+-------+------------+------------+
| name | hourlyWage | startDate |
+-------+------------+------------+
| Agnes | 26.50 | 2017-05-01 |
+-------+------------+------------+
1 row in set (0.00 sec)

Sie können mehrere Datenzeilen mit jeder Abfrage einfügen, die mehr als eine Zeile aus der Quelltabelle zurückgibt. Die Abfrage in der folgenden Anweisung gibt beispielsweise alle Datensätze in der Datenbank „factoryEmployees“ zurück, deren Wert in der Spalte „name“ nicht mit „J“ beginnt:

INSERT INTO showroomEmployees
SELECT
factoryEmployees.name,
factoryEmployees.hourlyWage,
factoryEmployees.startDate
FROM factoryEmployees
WHERE name NOT LIKE 'J%';
Output
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0

Um alle Datensätze in der Tabelle der Showroom-Mitarbeiter zurückzugeben, führen Sie diese Abfrage erneut aus:

SELECT * FROM showroomEmployees;
+--------+------------+------------+
| name | hourlyWage | startDate |
+--------+------------+------------+
| Agnes | 26.50 | 2017-05-01 |
| Agnes | 26.50 | 2017-05-01 |
| Harry | 26.50 | NULL |
| Marie | 27.88 | 2018-03-29 |
| Giles | 26.50 | 2019-08-06 |
| Daphne | 32.45 | 2017-11-12 |
+--------+------------+------------+
6 rows in set (0.00 sec)

Beachten Sie, dass es zwei identische Zeilen mit dem Namen „Agnes“ in der Spalte „Name“ gibt. Jedes Mal, wenn Sie eine INSERT INTO-Anweisung mit SELECT ausführen, behandelt SQL die Ergebnisse der Abfrage als neuen Datensatz. Sofern Sie keine spezifischen Einschränkungen für Ihre Tabelle festlegen oder präzisere Abfragen erstellen, kann Ihre Datenbank beim Hinzufügen von Daten wie diesen unweigerlich mit doppelten Datensätzen gefüllt werden.

Informationen automatisch einfügen

Beim Erstellen einer Tabelle können Sie Spalten bestimmte Attribute zuweisen, die das RDBMS veranlassen, diese automatisch mit Daten zu füllen.

Zur Veranschaulichung führen Sie die folgende Anweisung aus, um eine Tabelle namens „interns“ zu definieren. Dadurch wird eine Tabelle namens „interns“ mit drei Spalten erstellt. Die erste Spalte in diesem Beispiel, „internID“, enthält Daten vom Typ „int“. Beachten Sie jedoch, dass sie auch das Attribut „AUTO_INCREMENT“ enthält. Dieses Attribut bewirkt, dass SQL für jede neue Zeile automatisch einen eindeutigen numerischen Wert generiert, der standardmäßig bei 1 beginnt und dann mit jedem weiteren Datensatz um eins erhöht wird.

Die zweite Spalte, section, enthält analog dazu das Schlüsselwort DEFAULT. Wenn Sie section aus der Spaltenliste der INSERT INTO-Anweisung entfernen, fügt das RDBMS automatisch den Standardwert ein – in diesem Beispiel “production”.

CREATE TABLE interns (
internID int AUTO_INCREMENT PRIMARY KEY,
department varchar(20) DEFAULT 'production',
name varchar(30)
);

Um diese Funktionen zu demonstrieren, laden Sie die Tabelle „Interns“ mit einigen Daten, indem Sie die folgende INSERT INTO-Anweisung ausführen. Dieser Vorgang legt nur die Werte für die Spalte „Name“ fest:

INSERT INTO interns (name) VALUES ('Pierre'), ('Sheila'), ('Francois');
Output
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0

Führen Sie anschließend diese Abfrage aus, um alle Datensätze aus der Tabelle zurückzugeben:

SELECT * FROM interns;
Output
+----------+------------+----------+
| internID | department | name |
+----------+------------+----------+
| 1 | production | Pierre |
| 2 | production | Sheila |
| 3 | production | Francois |
+----------+------------+----------+
3 rows in set (0.00 sec)

Diese Ausgabe zeigt, dass aufgrund der Spaltendefinitionen die vorherige INSERT INTO-Anweisung Werte sowohl zum inneren als auch zum äußeren Abschnitt hinzufügt, obwohl diese nicht angegeben sind.

Um einer Abschnittsspalte einen anderen Wert als den Standardwert hinzuzufügen, müssen Sie diese Spalte in der INSERT INTO-Anweisung angeben, wie folgt:

INSERT INTO interns (name, department)
VALUES
('Jacques', 'management'),
('Max', 'quality assurance'),
('Edith', 'management'),
('Daniel', DEFAULT);
Output
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0

Beachten Sie, dass die letzte Zeile der in diesem Beispiel angegebenen Werte das Schlüsselwort DEFAULT anstelle eines Zeichenkettenwerts enthält. Dies veranlasst die Datenbank, den Standardwert (‘production’) einzufügen:

SELECT * FROM interns;
Output
+----------+-------------------+----------+
| internID | department | name |
+----------+-------------------+----------+
| 1 | production | Pierre |
| 2 | production | Sheila |
| 3 | production | Francois |
| 4 | management | Jacques |
| 5 | quality assurance | Max |
| 6 | management | Edith |
| 7 | production | Daniel |
+----------+-------------------+----------+
7 rows in set (0.00 sec)

Ergebnis

Mit dem Lesen dieses Leitfadens haben Sie verschiedene Möglichkeiten kennengelernt, Daten in eine Tabelle einzufügen, darunter das Festlegen einzelner Datenzeilen mit dem Schlüsselwort VALUES, das Kopieren ganzer Datensätze mit SELECT-Abfragen und das Definieren von Spalten, in die SQL automatisch Daten einfügt.

Die hier aufgeführten Befehle sollten auf jedem Datenbankmanagementsystem funktionieren, das SQL verwendet. Beachten Sie jedoch, dass jede SQL-Datenbank ihre eigene Implementierung der Sprache nutzt. Daher sollten Sie die Dokumentation Ihres DBMS konsultieren, um eine detailliertere Erklärung zur Funktionsweise der INSERT INTO-Anweisung und den verfügbaren Optionen zu erhalten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte Ihnen auch gefallen