Lokale Namen für Tabellen in SQL (MySQL )
Vorbereitung
- Konsole (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE STADT
( STADT VARCHAR ( 255 ), BEZEICHNUNG VARCHAR ( 255 ), LAND VARCHAR ( 255 ));INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '1', 'Paris', '1' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '2', 'Marseille', '1' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '3', 'Lyon', '1' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '4', 'Rom', '2' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '5', 'Mailand', '2' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '6', 'Neapel', '2' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '7', 'Tokio', '3' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '8', 'Yokohama', '3' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '9', 'Osaka', '3' );CREATE TABLE LAND ( LAND VARCHAR ( 255 ), BEZEICHNUNG VARCHAR ( 255 ));
INSERT INTO LAND ( LAND, BEZEICHNUNG ) VALUES ( '1', 'Frankreich' );
INSERT INTO LAND ( LAND, BEZEICHNUNG ) VALUES ( '2', 'Italien' );
INSERT INTO LAND ( LAND, BEZEICHNUNG ) VALUES ( '3', 'Japan' );CREATE TABLE ZIFFER ( SPALTENNAME VARCHAR ( 255 ));
INSERT INTO ZIFFER ( SPALTENNAME ) VALUES ( '0' );
INSERT INTO ZIFFER ( SPALTENNAME ) VALUES ( '1' );
INSERT INTO ZIFFER ( SPALTENNAME ) VALUES ( '2' );
INSERT INTO ZIFFER ( SPALTENNAME ) VALUES ( '3' );
INSERT INTO ZIFFER ( SPALTENNAME ) VALUES ( '4' );
INSERT INTO ZIFFER ( SPALTENNAME ) VALUES ( '5' );
INSERT INTO ZIFFER ( SPALTENNAME ) VALUES ( '6' );
INSERT INTO ZIFFER ( SPALTENNAME ) VALUES ( '7' );
INSERT INTO ZIFFER ( SPALTENNAME ) VALUES ( '8' );
INSERT INTO ZIFFER ( SPALTENNAME ) VALUES ( '9' );SELECT * FROM STADT;
SELECT * FROM LAND;
SELECT * FROM ZIFFER;
AS-Klauseln
“as ” (englisch) Aussprache: /æz/ > /əz/, deutsch: „als“
“alias ” (englisch) Aussprache: /ˈe li əs/
- Konsole (MySQL, E92, C99, C03)
SELECT * FROM STADT;
+-------+-------------+------+
| STADT | BEZEICHNUNG | LAND |
+-------+-------------+------+
| 1 | Paris | 1 |
| 2 | Marseille | 1 |
| 3 | Lyon | 1 |
| 4 | Rom | 2 |
| 5 | Mailand | 2 |
| 6 | Neapel | 2 |
| 7 | Tokio | 3 |
| 8 | Yokohama | 3 |
| 9 | Osaka | 3 |
+-------+-------------+------+
Lyon /lijɔ̃/
- Konsole (MySQL, E92, C99, C03)
SELECT BEZEICHNUNG FROM STADT;
+-------------+
| BEZEICHNUNG |
+-------------+
| Paris |
| Marseille |
| Lyon |
| Rom |
| Mailand |
| Neapel |
| Tokio |
| Yokohama |
| Osaka |
+-------------+- Konsole (MySQL, T92, C99, C03)
SELECT BEZEICHNUNG FROM STADT AS ORT;
+-------------+
| BEZEICHNUNG |
+-------------+
| Paris |
| Marseille |
| Lyon |
| Rom |
| Mailand |
| Neapel |
| Tokio |
| Yokohama |
| Osaka |
+-------------+
Die AS-Klausel direkt hinter dem Tabellennamen legt einen neuen Namen »ORT« für die Tabelle mit diesem Tabellennamen fest.
In der Ausgabe sieht man keinen Unterschied zur Ausgabe ohne die AS-Klausel, weil der Tabellenname bei der Ausgabe normalerweise nicht mit ausgegeben wird.
Diese AS-Klausel direkt hinter dem Tabellennamen bezieht sich auf die Tabelle und nicht auf eine der Spalten!
Die Umbenennung einer Tabelle ersetzt den bisherigen Tabellennamen durch einen neuen. Der bisherige Tabellenname kann danach nicht mehr verwendet werden, um sich auf die Tabelle zu beziehen.
- Konsole (MySQL, E92, C99, C03)
SELECT BEZEICHNUNG FROM STADT;
+-------------+
| BEZEICHNUNG |
+-------------+
| Paris |
| Marseille |
| Lyon |
| Rom |
| Mailand |
| Neapel |
| Tokio |
| Yokohama |
| Osaka |
+-------------+
Lyon /lijɔ̃/
- Konsole (MySQL, T92, C99, C03)
SELECT STADT.BEZEICHNUNG FROM STADT AS ORT;
ERROR 1054 (42S22): Unknown column 'STADT.BEZEICHNUNG' in 'field list'
- Konsole (MySQL, T92, C99, C03)
SELECT ORT.BEZEICHNUNG FROM STADT AS ORT;
+-------------+
| BEZEICHNUNG |
+-------------+
| Paris |
| Marseille |
| Lyon |
| Rom |
| Mailand |
| Neapel |
| Tokio |
| Yokohama |
| Osaka |
+-------------+- Konsole (MySQL, T92, C99, C03)
SELECT ORT.BEZEICHNUNG FROM STADT;
ERROR
Lyon /lijɔ̃/
Man beachte, daß der neue Name einer Tabelle in der SELECT-Klausel verwendet werden, obwohl seine Definition im Text der Abfrage erst später in der FROM-Klausel folgt.
Die Umbennennung kann verwendet werden, um einen langen Tabellennamen für die wiederholte Verwendung in einer Abfrage abzukürzen. (In dem folgenden Beispiel wäre die Qualifikation aber nicht nötig.)
- Konsole (MySQL, T92, C99, C03)
SELECT S.STADT, S.BEZEICHNUNG, S.LAND FROM STADT AS S;
+-------+-------------+------+
| STADT | BEZEICHNUNG | LAND |
+-------+-------------+------+
| 1 | Paris | 1 |
| 2 | Marseille | 1 |
| 3 | Lyon | 1 |
| 4 | Rom | 2 |
| 5 | Mailand | 2 |
| 6 | Neapel | 2 |
| 7 | Tokio | 3 |
| 8 | Yokohama | 3 |
| 9 | Osaka | 3 |
+-------+-------------+------+
Der neue Name wird aber nur innerhalb der Abfrage für die Tabelle festgelegt. Der Name der verwendeten Basistabelle wird nicht dauerhaft verändert.
Das folgende Beispiel zeigt die Vergabe neuer Namen für mehrere Tabellen.
- Konsole (MySQL, T92, C99, C03)
SELECT S.BEZEICHNUNG, L.BEZEICHNUNG FROM STADT AS S, LAND AS L WHERE S.LAND = L.LAND;
+-------------+-------------+
| BEZEICHNUNG | BEZEICHNUNG |
+-------------+-------------+
| Paris | Frankreich |
| Marseille | Frankreich |
| Lyon | Frankreich |
| Rom | Italien |
| Mailand | Italien |
| Neapel | Italien |
| Tokio | Japan |
| Yokohama | Japan |
| Osaka | Japan |
+-------------+-------------+
Lyon /lijɔ̃/
Das folgende Beispiel zeigt, daß »AS« auch weggelassen werden kann.
- Konsole
SELECT S.BEZEICHNUNG, L.BEZEICHNUNG FROM STADT S, LAND L WHERE S.LAND = L.LAND;
+-------------+-------------+
| BEZEICHNUNG | BEZEICHNUNG |
+-------------+-------------+
| Paris | Frankreich |
| Marseille | Frankreich |
| Lyon | Frankreich |
| Rom | Italien |
| Mailand | Italien |
| Neapel | Italien |
| Tokio | Japan |
| Yokohama | Japan |
| Osaka | Japan |
+-------------+-------------+
Kartesisches Produkt einer Tabelle mit sich selbst
Das kartesische Produkt der 10 Ziffern mit sich selbst ergibt alle Zahlen von 0 bis 99.
- Konsole (MySQL, E92, C99, C03)
SELECT * FROM ZIFFER;
+-------------+
| SPALTENNAME |
+-------------+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+-------------+SELECT * FROM ZIFFER AS A, ZIFFER AS B;
+-------------+-------------+
| SPALTENNAME | SPALTENNAME |
+-------------+-------------+
| 0 | 0 |
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 0 |
| 9 | 0 |
| 0 | 1 |
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 1 |
| 7 | 1 |
| 8 | 1 |
| 9 | 1 |
| 0 | 2 |
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
| 4 | 2 |
| 5 | 2 |
| 6 | 2 |
| 7 | 2 |
| 8 | 2 |
| 9 | 2 |
| 0 | 3 |
| 1 | 3 |
| 2 | 3 |
| 3 | 3 |
| 4 | 3 |
| 5 | 3 |
| 6 | 3 |
| 7 | 3 |
| 8 | 3 |
| 9 | 3 |
| 0 | 4 |
| 1 | 4 |
| 2 | 4 |
| 3 | 4 |
| 4 | 4 |
| 5 | 4 |
| 6 | 4 |
| 7 | 4 |
| 8 | 4 |
| 9 | 4 |
| 0 | 5 |
| 1 | 5 |
| 2 | 5 |
| 3 | 5 |
| 4 | 5 |
| 5 | 5 |
| 6 | 5 |
| 7 | 5 |
| 8 | 5 |
| 9 | 5 |
| 0 | 6 |
| 1 | 6 |
| 2 | 6 |
| 3 | 6 |
| 4 | 6 |
| 5 | 6 |
| 6 | 6 |
| 7 | 6 |
| 8 | 6 |
| 9 | 6 |
| 0 | 7 |
| 1 | 7 |
| 2 | 7 |
| 3 | 7 |
| 4 | 7 |
| 5 | 7 |
| 6 | 7 |
| 7 | 7 |
| 8 | 7 |
| 9 | 7 |
| 0 | 8 |
| 1 | 8 |
| 2 | 8 |
| 3 | 8 |
| 4 | 8 |
| 5 | 8 |
| 6 | 8 |
| 7 | 8 |
| 8 | 8 |
| 9 | 8 |
| 0 | 9 |
| 1 | 9 |
| 2 | 9 |
| 3 | 9 |
| 4 | 9 |
| 5 | 9 |
| 6 | 9 |
| 7 | 9 |
| 8 | 9 |
| 9 | 9 |
+-------------+-------------+
Übungsfragen
? Kartesisches Produkt ermitteln
Es gebe zwei Tabellen »A« und »N« gemäß der folgenden Auflistung.
Wie lauten die Zeilen des kartesischen Produktes »SELECT * FROM A, A AS B;«?
Wie lauten die Zeilen des kartesischen Produktes »SELECT * FROM N, N AS M;«
- Konsole
SELECT * FROM A;
+------+
| A |
+------+
| X |
| Y |
+------+SELECT * FROM N;
+------+
| N |
+------+
| 1 |
+------+
Übungsaufgabe ⃖
? Kartesisches Produkt ermitteln ⃖
Schreiben Sie Eingaben um die beiden Tabellen der vorangehenden Übungsfrage anzulegen und um die vier kartesischen Produkte der vorangehenden Übungsfrage auszugeben.