Spaltenbenennungen in SQL (MySQL) (Spaltenbenennungen in SQL (MySQL)), Lektion, Seite 722406
https://www.purl.org/stefan_ram/pub/spaltenbenennung_sql_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

Spaltennamen abgeleiteter Tabelle in SQL  (MySQL )

Vorbereitung

Zum Nachvollziehen der folgenden Beispiele kann das folgende Skript in einen MySQL -Klienten kopiert werden. Bei Kopieren ist darauf zu achten nur genau den Text von »DROP« bis zum letzten »;« zu kopieren und dann die Eingabetaste zu drücken.

Konsole (MySQL )
DROP SCHEMA D; CREATE SCHEMA D; USE D; 
CREATE TABLE ZAHL ( I VARCHAR ( 255 ), DE VARCHAR ( 255 ), EN VARCHAR ( 255 ));
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '0', 'NULL', 'ZERO' );
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '1', 'EINS', 'ONE' );
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '2', 'ZWEI', 'TWO' );
SELECT * FROM ZAHL;

AS-Klauseln

as ” (englisch) Aussprache: /æz/ > /əz/, deutsch: „als“

Hinter der Angabe eines Spaltennamens innerhalb einer SELECT-Klausel in einer SELECT-Abfrage kann durch eine AS-Klausel ein Spaltenname für die Ergebnistabelle festgelegt werden.

Dieses kann in späteren Lektionen dazu dienen,

— Spalten einen verständlicheren Namen zu geben,
— Spalten, die sonst gar keinen Namen hätten, einen Namen zu geben, und
— Spalten einen eigenen Namen zu geben, die sonst denselben Namen wie eine andere Spalten hätten.
Konsole
SELECT * FROM ZAHL;
+------+------+------+
| I | DE | EN |
+------+------+------+
| 0 | NULL | ZERO |
| 1 | EINS | ONE |
| 2 | ZWEI | TWO |
+------+------+------+
Konsole (MySQL, E92, C99, C03)
SELECT DE FROM ZAHL;
+------+
| DE |
+------+
| NULL |
| EINS |
| ZWEI |
+------+
Konsole (MySQL, E92, C99, C03)
SELECT DE AS DEUTSCH FROM ZAHL;
+---------+
| DEUTSCH |
+---------+
| NULL |
| EINS |
| ZWEI |
+---------+

Die neuen Namen sind nun – anders als bei Verwendung von »AS« für Tabellen – sofort im Ergebnis der Anfrage sichtbar.

Konsole (MySQL, E92, C99, C03)
SELECT DE AS DEUTSCH, EN AS ENGLISCH FROM ZAHL;
+---------+----------+
| DEUTSCH | ENGLISCH |
+---------+----------+
| NULL | ZERO |
| EINS | ONE |
| ZWEI | TWO |
+---------+----------+

Durch diese Klausel wird der Spaltenname nicht  in der Basistabelle »ZAHL« verändert, wo er weiterhin »DE« bleibt, sondern der Name der Spalte in der abgeleiteten Ergebnistabelle festgelegt, wie sie in der Ausgabe erscheint.

Eine übliche Bezeichnung für die vergebenen Namen ist auch “column alias ”.

Referenzierung von AS-Spaltennamen

Ein mit »AS« festgelegter Spaltenname kann nicht  in derselbe SELECT-Liste verwendet werden, um sich auf diese Spalte zu beziehen. Dort muß weiterhin der bisherige Name  verwendet werden.

Konsole
SELECT DE AS DEUTSCH, DEUTSCH FROM ZAHL;
ERROR 1054 (42S22): Unknown column 'DEUTSCH' in 'field list'
Konsole (MySQL, E92, C99, C03)
SELECT DE AS DEUTSCH, DE FROM ZAHL;
+---------+------+
| DEUTSCH | DE |
+---------+------+
| NULL | NULL |
| EINS | EINS |
| ZWEI | ZWEI |
+---------+------+

AS-Klauseln und Views

Ein AS-Klauseln wirkt sich auch auf ein View aus.

Konsole
CREATE VIEW ZAHLVIEW AS
SELECT DE AS DEUTSCH, EN AS ENGLISCH FROM ZAHL;

Bei Abfragen des Views erscheinen nun die neuen Spaltennamen, und die alten sind nicht mehr sichtbar oder verwendbar.

Konsole
SELECT * FROM ZAHLVIEW;
+---------+----------+
| DEUTSCH | ENGLISCH |
+---------+----------+
| NULL | ZERO |
| EINS | ONE |
| ZWEI | TWO |
+---------+----------+
SELECT DEUTSCH FROM ZAHLVIEW;
+---------+
| DEUTSCH |
+---------+
| NULL |
| EINS |
| ZWEI |
+---------+
SELECT DE FROM ZAHLVIEW;
ERROR 1054 (42S22): Unknown column 'DE' in 'field list'

Das folgende Beispiel zeigt die Vergabe neuer Namen für Tabellen kombiniert  mit der Vergaben von Namen für Spalten.

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' );

SELECT * FROM STADT; SELECT * FROM LAND;

Konsole (MySQL, T92, C99, C03)
SELECT STADT.BEZEICHNUNG, LAND.BEZEICHNUNG FROM STADT, LAND WHERE STADT.LAND = LAND.LAND;
+-------------+-------------+
| BEZEICHNUNG | BEZEICHNUNG |
+-------------+-------------+
| Paris | Frankreich |
| Marseille | Frankreich |
| Lyon | Frankreich |
| Rom | Italien |
| Mailand | Italien |
| Neapel | Italien |
| Tokio | Japan |
| Yokohama | Japan |
| Osaka | Japan |
+-------------+-------------+
Konsole (MySQL, T92, C99, C03)
SELECT S.BEZEICHNUNG AS STADT, L.BEZEICHNUNG AS LAND FROM STADT AS S, LAND AS L WHERE S.LAND = L.LAND;
+-----------+------------+
| STADT | LAND |
+-----------+------------+
| Paris | Frankreich |
| Marseille | Frankreich |
| Lyon | Frankreich |
| Rom | Italien |
| Mailand | Italien |
| Neapel | Italien |
| Tokio | Japan |
| Yokohama | Japan |
| Osaka | Japan |
+-----------+------------+
Konsole

CREATE VIEW SL AS SELECT S.BEZEICHNUNG AS STADT, L.BEZEICHNUNG AS LAND FROM STADT AS S, LAND AS L WHERE S.LAND = L.LAND;

SELECT * FROM SL;

+-----------+------------+
| STADT | LAND |
+-----------+------------+
| Paris | Frankreich |
| Marseille | Frankreich |
| Lyon | Frankreich |
| Rom | Italien |
| Mailand | Italien |
| Neapel | Italien |
| Tokio | Japan |
| Yokohama | Japan |
| Osaka | Japan |
+-----------+------------+

Ohne Umbenennen der Spalten hätte das View nicht  angelegt werden können, da zwei Spalten mit gleichem Namen in einem View nicht gestattet sind!

Konsole
CREATE VIEW SL AS SELECT S.BEZEICHNUNG, L.BEZEICHNUNG FROM STADT AS S, LAND AS L WHERE S.LAND = L.LAND;
ERROR 1060 (42S21): Duplicate column name 'BEZEICHNUNG'
Aussprachehinweis
duplicate (n) ˈduːplɪkət

Übungsaufgaben

/   Ausgabe einer Tabelle

Konsole (MySQL )
DROP SCHEMA D; CREATE SCHEMA D; USE D; 
CREATE TABLE ZAHL ( I VARCHAR ( 255 ), DE VARCHAR ( 255 ), EN VARCHAR ( 255 ));
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '0', 'NULL', 'ZERO' );
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '1', 'EINS', 'ONE' );
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '2', 'ZWEI', 'TWO' );
SELECT * FROM ZAHL;

Schreiben Sie eine Abfrage, welche Informationen aus der Tabelle »ZAHL« in der folgenden Weise ausgibt.

Konsole
+--------+-------------+
| NUMMER | BEZEICHNUNG |
+--------+-------------+
| 0 | NULL |
| 1 | EINS |
| 2 | ZWEI |
+--------+-------------+

/   Ausgabe einer Tabelle

Konsole (MySQL )
DROP SCHEMA D; CREATE SCHEMA D; USE D; 
CREATE TABLE ZAHL ( I VARCHAR ( 255 ), DE VARCHAR ( 255 ), EN VARCHAR ( 255 ));
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '0', 'NULL', 'ZERO' );
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '1', 'EINS', 'ONE' );
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '2', 'ZWEI', 'TWO' );
SELECT * FROM ZAHL;

Definieren Sie ein View »ND«, so daß dann Informationen aus der Tabelle mit »SELECT * FROM ND;« in der folgenden Weise ausgegeben werden können.

Konsole
SELECT * FROM ND;
+--------+-------------+
| NUMBER | DESIGNATION |
+--------+-------------+
| 0 | ZERO |
| 1 | ONE |
| 2 | TWO |
+--------+-------------+
Aussprachehinweise
designation ˌdɛzɪgˈneɪʃən

Anmerkungen *

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

<query specification> ::= SELECT <select list> <table expression>
<select list> ::= <asterisk> | <select sublist> [ { <comma> <select sublist> }... ]
<select sublist> ::= <derived column>
<derived column> ::= <value expression> [ <as clause> ]
<as clause> ::= [ AS ] <column name>

9075-2 7.12 19)a) (Entwurf von 2010, Zitat)*

If the i-th <derived column> in the <select list> specifies an <as clause> that contains a <column name> CN, then the <column name> of the i-th column of the result is CN.

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 stefanram722406 stefan_ram:722406 Spaltenbenennungen in SQL (MySQL) Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722406, slrprddef722406, 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/spaltenbenennung_sql_de