Speicher für Tabellen mit mehreren Spalten in SQL (MySQL )
Vorbereitungen
- Konsole (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S;
Anlegen eines Speichers für Tabellen mit mehreren Spalten
Es ist auch möglich, einen Speicher für Tabellen mit mehreren Spalten anzulegen. Dazu können in den runden Klammern am Ende einer CREATE-TABLE-Anweisung mehrere Angaben zu einer Spalte hintereinandergemacht werden. Diese werden dann durch ein Komma »,« voneinander getrennt.
- Konsole (MySQL, T92, C99, C03)
CREATE TABLE ZAHL ( NUMERALE VARCHAR ( 255 ), BEZEICHNUNG VARCHAR ( 255 ));
- Angaben zur ersten Spalte
NUMERALE VARCHAR ( 255 )
- Die in der CREATE-TABLE-Anweisung erste Spalte hat den Namen »NUMERALE« und den Typ »VARCHAR ( 255 )«.
- Angaben zur zweiten Spalte
BEZEICHNUNG VARCHAR ( 255 )
- Die in der CREATE-TABLE-Anweisung zweite Spalte hat den Namen »BEZEICHNUNG« und den Typ »VARCHAR ( 255 )«.
Es gibt keine Möglichkeit, die Wiederholung von »VARCHAR ( 255 )« zu vermeiden. Die Wiederholung von »VARCHAR ( 255 )« ist in den folgenden Lektionen besonders auffällig. Sie liegt aber nur daran, daß an dieser Stelle zur Vereinfachung zunächst immer »VARCHAR ( 255 )« geschrieben wird. Später werden wir Alternativen dazu kennenlernen und verwenden, so daß »VARCHAR ( 255 )« dann nicht mehr so oft wiederholt werden wird. Aber selbst, wenn es nötig wäre, »VARCHAR ( 255 )« in einem bestimmten Fall beim Anlegen eines Tabellenspeichers mehrfach zu wiederholen, wäre dies keine große Belastung, da im Verlaufe der Arbeit mit einer Datenbank neue Tabellenspeicher nur selten angelegt werden.
- Spaltenspezifikation
Spaltenspezifikation
.------------. .----------.
--->| Bezeichner |--->| Datentyp |--->
'------------' '----------'
Spaltenname- Tabellendefinitionsanweisung
.------. .-----. .------------. .-. .----------------------. .-.
--->( CREATE )--->( TABLE )--->| Bezeichner |--->( ( )---.--->| Spaltenspezifikation |--->.---( ) )--->
'------' '-----' '------------' '-' ^ '----------------------' | '-'
Tabellenname | .-. |
'-------------( , )--------------'
'-'
Der Name jeder Spalte einer Tabelle muß sich vom Namen aller anderen Spalten derselben Tabelle unterscheiden.
Einfügen und Anzeigen von Daten
Der Tabellenspeicher ist zunächst leer.
- Konsole (MySQL, E92, C99, C03)
SELECT * FROM ZAHL;
Empty set (0.00 sec)
Eine Zeile kann nun eingefügt werden, indem in einem ersten Klammernpaar die kommagetrennten Namen der Spalten und in einem zweiten Klammernpaar die kommagetrennten Werte der Spalten für die einzufügende Zeile angegeben werden. Dabei gehört ein Spaltenwert zu dem Spaltennamen, welcher an derselben Stelle angegeben wurde. Der erste Spaltenwert gehört also zu der Spalte mit dem zuerst angegebenen Namen, der zweite Spaltenwert zu dem zweiten Namen, und so weiter.
- Konsole (MySQL, E92, C99, C03)
INSERT INTO ZAHL ( NUMERALE, BEZEICHNUNG )
VALUES ( '1', 'EINS' );Query OK, 1 row affected (0.00 sec)
- Konsole (MySQL, E92, C99, C03)
SELECT * FROM ZAHL;
+----------+-------------+
| NUMERALE | BEZEICHNUNG |
+----------+-------------+
| 1 | EINS |
+----------+-------------+
Bei der folgenden INSERT-Anweisung wurde die Reihenfolge der Spaltennamen verändert. Entsprechend wird nun der erste Wert der Bezeichnung und der zweite Wert dem Numerale zugewiesen.
- Konsole (MySQL, E92, C99, C03)
INSERT INTO ZAHL ( BEZEICHNUNG, NUMERALE )
VALUES ( 'ZWEI', '2' );Query OK, 1 row affected (0.00 sec)
- Konsole (MySQL, E92, C99, C03)
SELECT * FROM ZAHL;
+----------+-------------+
| NUMERALE | BEZEICHNUNG |
+----------+-------------+
| 1 | EINS |
| 2 | ZWEI |
+----------+-------------+
Weglassen der Spaltennamen
Der Verzicht auf die Liste von Spaltennamen ist zwar möglich, aber nicht empfehlenswert, weil dann Änderungen in der Struktur des Tabellenspeichers die Bedeutung der INSERT-Abfrage verändern können und die Bedeutung der INSERT-Abfrage dann von der in einer Tabelle eigentlich nicht festgelegten Reihenfolge der Spalten abhängen würde.
- Konsole (MySQL, E92, C99, C03)
INSERT INTO ZAHL VALUES ( 'DREI', '3' );
Query OK, 1 row affected (0.00 sec)
- Konsole (MySQL, E92, C99, C03)
SELECT * FROM ZAHL;
+----------+-------------+
| NUMERALE | BEZEICHNUNG |
+----------+-------------+
| 1 | EINS |
| 2 | ZWEI |
| DREI | 3 |
+----------+-------------+
Wenn man in einer Einfügeanweisung die Spaltennamen aufführt, so wird jeder Wert in die dadurch festgelegte Spalte eingefügt, ohne daß die Reihenfolge der Spalten in der Tabelle eine Rolle dabei spielt. Die folgende Einfügeanweisung fügt beispielsweise den Text »DREI« garantiert immer in die Spalte »BEZEICHNUNG« und den Text »3« garantiert immer in die Spalte »NUMERALE« ein, egal in welcher Reihenfolge diese Spalten in der Basistabelle angeordnet sind. (Im relationalen Modell gibt gibt es ohnehin keine Reihenfolge von Spalten).
- Konsole (MySQL, E92, C99, C03)
INSERT INTO ZAHL ( BEZEICHNUNG, NUMERALE ) VALUES ( 'DREI', '3' );
Übungsaufgaben
/ Tabelle anlegen und sichten
Geben Sie Kommandos ein, die zu der folgenden Ausgabe führen.
(Die Reihenfolge, in welcher die einzelnen Zeilen und Spalten ausgegeben werden, spielt bei Tabellen normalerweise keine Rolle und ist daher egal.)
+------+------+------+
| I | DE | EN |
+------+------+------+
| 0 | NULL | ZERO |
| 1 | EINS | ONE |
+------+------+------+- Aussprachehinweis
- zero ˈzɪroʊ
Einfügen mehrerer Zeilen mit einer einzigen Anweisung *
Es besteht auch wieder die Möglichkeit, mehrere Zeilen mit einer einzigen Anweisung einzufügen.
- Konsole (MySQL, F92, F641-99, F641-03)
INSERT INTO ZAHL ( BEZEICHNUNG, NUMERALE )
VALUES ( 'VIER', '4' ),
( 'FUENF', '5' );Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0- Aussprachehinweis
- duplicate (n) ˈduːplɪkət
- Mehrzeilige Einfuegeanweisung (vereinfacht) *
.------. .-----. .------------. .-. .------------. .-. .------. .-. .--------. .-. .-.
--->( INSERT )--->( INTO )--->| Bezeichner |---.--->( ( )--->| Bezeichner |--->( ) )---.--->( VALUES )---.--->( ( )---.--->| Skalar |---.--->( ) )---.--->( ; )--->
'------' '-----' '------------' | '-' '------------' '-' ^ '------' ^ '-' ^ '--------' | '-' | '-'
Tabellenname | Spaltenname | | | | |
| | | | .-. | |
'---------------------------------------' | '-------( , )-----' |
| '-' |
| |
| .-. |
'--------------------( , )------------------'
'-'
Man beachte hierbei:
- Jede Zeile wird eingeklammert.
- Die Wert zu einer Zeile werden mit Kommas getrennt.
- Die Angaben zu verschiedenen Zeilen werden ebenfalls mit Kommas getrennt.
Fachbegriffe *
Die Anzahl der Spalten einer Tabelle wird auch als Grad oder Arität der Tabelle bezeichnet.
Die Anzahl der Zeilen einer Tabelle wird auch als Kardinalität oder Mächtigkeit der Tabelle bezeichnet.