Tabellen mit mehreren Zeilen in MySQL (Tabellen mit mehreren Zeilen in MySQL), Lektion, Seite 723160
https://www.purl.org/stefan_ram/pub/mehrere_zeilen_sql (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

Tabellenspeicher mit mehreren Zeilen in MySQL 

Vorbereitung

Als Vorbereitung auf Eingaben zum Einfügen von Daten legen wir hier zunächst ein Schema und einen Tabellenspeicher an.

Skript (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S; 
CREATE TABLE LISTE ( I VARCHAR ( 255 ));
SELECT * FROM LISTE;

Mehrere Zeilen einfügen

Werden mehrere INSERT-Anweisungen in Folge eingegeben, so werden alle angegebenen Werte in den Tabellenspeicher eingefügt.

Konsole (MySQL, E92, C99, C03)
INSERT INTO LISTE ( I ) VALUES ( '0' );
Query OK, 1 row affected (0.05 sec)
INSERT INTO LISTE ( I ) VALUES ( '1' );
Query OK, 1 row affected (0.02 sec)

Hinweis zur Eingabe von Zeilen: Wenn ein Zeile eingegeben werden soll, die einer zuvor eingegebenen Zeile sehr ähnlich ist, dann ist es oft nicht nötig, jedes Zeichen erneut einzutippen. Vielmehr kann die vorigen Zeile mit einem Bedienvorgang wie dem Betätigen der Pfeil-nach-oben-Taste abgerufen werden und dann überarbeitet und erneut abgeschickt werden.

Konsole (MySQL, E92, C99, C03)
SELECT * FROM LISTE;

+------+
| I |
+------+
| 0 |
| 1 |
+------+

2 rows in set (0.00 sec)

Die Ausgabe des Tabellenspeichers enthält die Angabe »2 rows in set«, welche besagt, daß der Tabellenspeicher (»set«) zwei  Zeilen (»rows«) enthält. Da diese Information auch der darüberstehenden Darstellung des Tabellenspeichers entnommen werden kann und uns auch nicht immer interessiert, werden wir solche Zeilen zukünftig nicht immer mit abdrucken.

Durch SQL  wird keine  bestimmte Reihenfolge der Ausgabe der Zeilen nach »SELECT * FROM« garantiert.

Tabellen und Tabellenspeicher ⃗

Als Vorbereitung auf Eingaben zum Einfügen von Daten legen wir hier zunächst wieder ein leeres Schema und einen Tabellenspeicher an.

Skript (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S; CREATE TABLE LISTE ( I VARCHAR ( 255 ));
Konsole (MySQL, E92, C99, C03)
INSERT INTO LISTE ( I ) VALUES ( '0' );
Query OK, 1 row affected (0.05 sec)
Konsole (MySQL, E92, C99, C03)
SELECT * FROM LISTE;

+------+
| I |
+------+
| 0 |
+------+

1 row in set (0.00 sec)

Konsole (MySQL, E92, C99, C03)
INSERT INTO LISTE ( I ) VALUES ( '1' );
Query OK, 1 row affected (0.02 sec)
Konsole (MySQL, E92, C99, C03)
SELECT * FROM LISTE;

+------+
| I |
+------+
| 0 |
| 1 |
+------+

2 rows in set (0.00 sec)

Wir sehen, daß der Inhalt des Tabellenspeichers »LISTE« zunächst eine  Zeile umfaßt und später zwei  Zeilen. Der Name »LISTE« bezeichnet also keine feste, bestimmte  Tabelle, sondern einen Speicher  für eine Tabelle. Daher nennen wir das von dem Namen »LISTE« Bezeichnete einen Tabellenspeicher oder eine Tabellenvariable. Dieser enthält zu einem bestimmten Zeitpunkt eine bestimmte Tabelle, kann aber zu einem anderen Zeitpunkt auch eine andere Tabelle enthalten.

In vielen Texten wird aber nicht zwischen Tabellen und Tabellenspeichern unterschieden, und beide werden „Tabellen“ genannt.

Übungsfragen

?   Ausgabe vorhersagen

Die Eingabe der folgenden Zeilen führt zur daruntenstehenden Ausgabe, in der aber Teile hier durch Fragezeichen verdeckt wurden.

Nun sollen ohne tatsächliche Eingabe der Zeilen die folgenden Fragen beantwortet werden:

DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE A ( N VARCHAR ( 255 ));
INSERT INTO A ( N ) VALUES ( 'C' );
INSERT INTO A ( N ) VALUES ( 'E' );
INSERT INTO A ( N ) VALUES ( 'D' );
SELECT * FROM A;
+------+
| ? |
+------+
| ? |
| ? |
| ? |
+------+

(Die Reihenfolge der Zeilen einer Tabelle hat in einer relationalen Tabelle keine Bedeutung. Daher gilt es auch als richtige Lösung, wenn die Reihenfolge der Zeilen in der Antwort anders ist als bei einer tatsächlichen Ausgabe eines Datenbanksystem nach der obenstehenden Eingabe.)

Übungsaufgaben

/   Tabellenspeicher anlegen und sichten

Geben Sie Kommandos ein, die zu der folgenden Ausgabe führen.

+-------+
| WERTE |
+-------+
| 3 |
| 7 |
| 12 |
+-------+

(Die Reihenfolge der Zeilen einer Tabelle hat in einer relationalen Tabelle keine Bedeutung. Daher gilt es auch als richtige Lösung, wenn die Reihenfolge der Zeilen in der erzeugten Ausgabe anders ist, als hier gezeigt.)

Zitate aus der Norm *

9075-2 7.3 (Entwurf von 2010, vereinfacht)*

<table value constructor> ::= VALUES <row value expression list>
<row value expression list> ::= <table row value expression> [ { <comma> <table row value expression> }... ]

9075-2 7.2 (Entwurf von 2010, vereinfacht)*

<table row value expression> ::= <row value constructor>

9075-2 7.1 (Entwurf von 2010, vereinfacht)*

<row value constructor> ::= <explicit row value constructor>
<explicit row value constructor> ::= <left paren> <row value constructor element> <comma> <row value constructor element list> <right paren>
<row value constructor element> ::= <value expression>
<row value constructor element list> ::= <row value constructor element> [ { <comma> <row value constructor element> }... ]

9075-2 7.1 (Entwurf von 2010, vereinfacht)*

Without Feature F641, “Row and table constructors”, conforming SQL language shall not contain an <explicit row value constructor> that is not simply contained in a <table value constructor> and that contains more than one <row value constructor element>.

Einfügen mehrerer Zeilen mit einer einzigen Anweisung *

Viele Datenbanksysteme unterstützen auch das Einfügen mehrerer Zeilen mit einer einzigen INSERT-Anweisung, welche hinter dem Schlüsselwort »VALUES« eine kommagetrennte Liste eingeklammerter Werte enthält.

Konsole (MySQL, S92, 99-F641, 03-F641)
INSERT INTO LISTE ( I ) VALUES ( '100' ), ( '101' );
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
Aussprachehinweis
duplicate (n) ˈduːplɪkət
Konsole (MySQL, E92, C99, C03)
SELECT * FROM LISTE;

+------+
| I |
+------+
| 0 |
| 1 |
| 100 |
| 101 |
+------+

4 rows in set (0.00 sec)

Einfuegeanweisung (vereinfacht)
     .------.      .-----.     .------------.         .-.     .------------.     .-.          .------.          .-.     .--------.     .-.
--->( INSERT )--->( INTO )--->| Bezeichner |---.--->( ( )--->| Bezeichner |--->( ) )---.--->( VALUES )---.--->( ( )--->| Skalar |--->( ) )---.--->
'------' '-----' '------------' | '-' '------------' '-' ^ '------' ^ '-' '--------' '-' |
| | | .-. |
'---------------------------------------' '----------------( , )--------------'
'-'

Man beachte hierbei:

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723160 stefan_ram:723160 Tabellen mit mehreren Zeilen in MySQL Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723160, slrprddef723160, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/mehrere_zeilen_sql