Qualifizierte Spaltennamen in SQL (Qualifizierte Spaltennamen in SQL), Lektion, Seite 722961
https://www.purl.org/stefan_ram/pub/qualifizierte_spaltennamen_sql (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

Qualifizierte Namen in SQL  (MySQL )

Vorbereitung

Zum Nachvollziehen der folgenden Beispiele kann das folgende Skript in einen MySQL -Klienten kopiert werden. Der Inhalt dieses Skripts kann aber ansonsten ignoriert 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.

Skript (MySQL )

DROP SCHEMA S; CREATE SCHEMA S; USE S;

CREATE TABLE STADT
( STADT VARCHAR ( 255 ), BEZEICHNUNG VARCHAR ( 255 ));

-- "Die Stadt mit der Kennzahl STADT hat die Bezeichnung BEZEICHNUNG."

INSERT INTO STADT ( STADT, BEZEICHNUNG ) VALUES ( '1', 'Paris' );
INSERT INTO STADT ( STADT, BEZEICHNUNG ) VALUES ( '2', 'Marseille' );
INSERT INTO STADT ( STADT, BEZEICHNUNG ) VALUES ( '3', 'Lyon' );
INSERT INTO STADT ( STADT, BEZEICHNUNG ) VALUES ( '4', 'Rom' );
INSERT INTO STADT ( STADT, BEZEICHNUNG ) VALUES ( '5', 'Mailand' );
INSERT INTO STADT ( STADT, BEZEICHNUNG ) VALUES ( '6', 'Neapel' );
INSERT INTO STADT ( STADT, BEZEICHNUNG ) VALUES ( '7', 'Tokio' );
INSERT INTO STADT ( STADT, BEZEICHNUNG ) VALUES ( '8', 'Yokohama' );
INSERT INTO STADT ( STADT, BEZEICHNUNG ) VALUES ( '9', 'Osaka' );
SELECT * FROM STADT;

Qualifizierte Namen

In dieser Lektion verwenden wir die folgende kleine Tabelle von Städten.

Konsole (MySQL, E92, C99, C03)
SELECT * FROM STADT;
+-------+-------------+
| STADT | BEZEICHNUNG |
+-------+-------------+
| 1 | Paris |
| 2 | Marseille |
| 3 | Lyon |
| 4 | Rom |
| 5 | Mailand |
| 6 | Neapel |
| 7 | Tokio |
| 8 | Yokohama |
| 9 | Osaka |
+-------+-------------+
Aussprachehinweis

Lyon lijɔ̃

Wir zeigen hier auch noch einmal die Abfrage mit einem ausgeschriebenen Spaltennamen.

Konsole
SELECT BEZEICHNUNG FROM STADT;
+-------------+
| BEZEICHNUNG |
+-------------+
| Paris |
| Marseille |
| Lyon |
| Rom |
| Mailand |
| Neapel |
| Tokio |
| Yokohama |
| Osaka |
+-------------+

Es ist in SQL  grundsätzlich erlaubt, einem Spaltentitel den Namen einer der Tabellen voranzustellen, welche in der FROM-Klausel angegeben wurden, um sich auf die Spalte zu beziehen, welche aus der Tabelle mit diesem Namen übernommen wurde. Dabei ist der Name der Tabellen durch einen Punkt ».« vom folgenden Spaltentitel zu trennen.

In dem folgenden Beispiel wird »STADT.BEZEICHNUNG« an Stelle von »BEZEICHNUNG« verwendet, obwohl die ausführliche Schreibweise hier nicht nötig ist und keine Vorteil bietet. Zunächst soll nur gezeigt werden, daß die ausführlichere Schreibweise mit dem Tabellennamen möglich  ist.

Konsole (MySQL, E92, C99, C03)
SELECT STADT.BEZEICHNUNG FROM STADT;
+-------------+
| BEZEICHNUNG |
+-------------+
| Paris |
| Marseille |
| Lyon |
| Rom |
| Mailand |
| Neapel |
| Tokio |
| Yokohama |
| Osaka |
+-------------+

Indem der Tabellenname vor den Spaltennamen gestellt wird, kann genau angegeben werden, welche  Spalte gemeint ist.

Wir werden später Fälle sehen, in denen dies nötig  ist.

Spaltenangabe
STADT.BEZEICHNUNG
Spaltenangabe auf deutsch
„Die Spalte ‚BEZEICHNUNG‘ aus der Tabelle ‚STADT

Der Qualifikationspunkt ».« als lexikalische Einheit

Der Punkt ».« ist in diesem Fall eine lexikalische Einheit für sich, wie die folgende Eingabe verdeutlicht.

Konsole (MySQL, E92, C99, C03)
SELECT STADT
.
BEZEICHNUNG FROM STADT;
+-------------+
| BEZEICHNUNG |
+-------------+
| Paris |
| Marseille |
| Lyon |
| Rom |
| Mailand |
| Neapel |
| Tokio |
| Yokohama |
| Osaka |
+-------------+

Bezeichner und qualifizierte Namen

Einen Namen ohne Punkt, wie beispielsweise »LAND« oder »BEZEICHNUNG« nennen wir auch einen Bezeichner  (oder einfachen Namen ). ⃖

Einen Namen, der einen Punkt enthält, nennen wir auch einen qualifizierten Namen. ⃖

Falls einem Namen ein Bezeichner vorangestellt wird, der mit einem Punkt ».« getrennt ist, so sagen wir auch, daß der Name durch den Bezeichner qualifiziert  werde. ⃖

Beispielsweise ist »STADT.BEZEICHNUNG« kein Bezeichner, aber ein qualifizierter Name, in welchem der Name »BEZEICHNUNG« durch den vorangestellten Bezeichner »LAND« qualifiziert ist.

Der Bezeichner am Ende  eines qualifizierten Namens ist der eigentliche Name der Sache, für die der Name steht, während das Davorstehende nur dazu dient, den ganzen Namen eindeutig  zu machen. Daher nennen wir den Bezeichner am Ende eines Namens auch den eigentlichen Namen. ⃖

Qualifikation mit dem Schema

Man kann einem Tabellennamen auch noch den Namen des Schemas, zu dem sie gehört, voranstellen, um auszudrücken, daß die Tabelle aus jenem Schema gemeint ist.

In dem folgenden Beispiel stellen wir dem Namen der Tabelle »STADT« noch den Namen des Schemas »S« voran (sowohl in der SELECT- als auch in der FROM-Klausel).

Konsole
SELECT S.STADT.BEZEICHNUNG FROM S.STADT;
+-------------+
| BEZEICHNUNG |
+-------------+
| Paris |
| Marseille |
| Lyon |
| Rom |
| Mailand |
| Neapel |
| Tokio |
| Yokohama |
| Osaka |
+-------------+

Ein qualifizierter Name, der mit einem Schema-Namen beginnt, wird maximal qualifiziert  oder vollständig qualifiziert  genannt, da man ihm nichts mehr voranstellen kann. Solche Namen sind besonders robust, da ihre Bedeutung kaum von mit »USE« vorgenommenen Einstellungen abhängt. ⃖

(Einen qualifizierten Namen, der nicht maximal qualifiziert ist, könnte man auch als „einfach qualifizierten Namen“ bezeichnen.)

Qualifikationen finden sich auch in Fehlermeldungen  (wie unten »s.example«). Daher muß man Qualifikationen allein schon deshalb verstehen, damit man solche Fehlermeldungen richtig interpretieren kann.

Konsole
SELECT * FROM EXAMPLE;
ERROR 1146 (42S02): Table 's.example' doesn't exist
Spaltenangabe
S.STADT.BEZEICHNUNG
Spaltenangabe auf deutsch
„Die Spalte ‚BEZEICHNUNG‘ aus der Tabelle ‚STADT‘, welche ihrerseits in dem Schema ‚S‘ enthalten ist.
Aussprachehinweis
example  ⌊ɩgˈzæ̣mpŁ̩⌋

Qualifikation eines Sternchens »*«

Ein Stern »*« in der Auswahlliste steht ja für „alle Spalten“. Auch dem Stern kann ein Tabellenname einer Tabelle vorangestellt werden, um zu sagen, daß alle Spalten aus jener Tabelle gemeint sind.

Konsole
SELECT * FROM STADT;
+-------+-------------+
| STADT | BEZEICHNUNG |
+-------+-------------+
| 1 | Paris |
| 2 | Marseille |
| 3 | Lyon |
| 4 | Rom |
| 5 | Mailand |
| 6 | Neapel |
| 7 | Tokio |
| 8 | Yokohama |
| 9 | Osaka |
+-------+-------------+
Konsole
SELECT STADT.* FROM STADT;
+-------+-------------+
| STADT | BEZEICHNUNG |
+-------+-------------+
| 1 | Paris |
| 2 | Marseille |
| 3 | Lyon |
| 4 | Rom |
| 5 | Mailand |
| 6 | Neapel |
| 7 | Tokio |
| 8 | Yokohama |
| 9 | Osaka |
+-------+-------------+
Konsole
SELECT S.STADT.* FROM STADT;
+-------+-------------+
| STADT | BEZEICHNUNG |
+-------+-------------+
| 1 | Paris |
| 2 | Marseille |
| 3 | Lyon |
| 4 | Rom |
| 5 | Mailand |
| 6 | Neapel |
| 7 | Tokio |
| 8 | Yokohama |
| 9 | Osaka |
+-------+-------------+

Qualifikation in der WHERE-Klausel

Die oben gezeigten Qualifikationen sind nicht nur in einer SELECT-Klausel oder FROM-Klausel sondern auch in einer WHERE-Klausel möglich.

Konsole
SELECT * FROM STADT WHERE STADT.STADT = '4';
+-------+-------------+
| STADT | BEZEICHNUNG |
+-------+-------------+
| 4 | Rom |
+-------+-------------+

Vor- und Nachteile vollständig qualifizierter Namen

Die Qualifikation mit einem Schema kann folgende Vorteile  haben:

Die Qualifikation mit einem Schema kann folgende Nachteile  haben:

Abtrennung eines portablen Teils in Skripten

Die Qualifikation mit einem Schema erlaubt es auf die nicht-portable USE-Anweisung des MySQL-Klienten zu verzichten und Skripte zum Anlegen von Tabellen in reinem Standard-SQL  zu schreiben, so daß sie mit möglichst vielen verschiedenen Datenbankprodukten zusammen verwendet werden können.

Skript (SQL )

DROP SCHEMA S; CREATE SCHEMA S;

CREATE TABLE S.VORNAME ( VORNAME VARCHAR ( 255 ));

INSERT INTO S.VORNAME ( VORNAME ) VALUES ( 'Hans' );
INSERT INTO S.VORNAME ( VORNAME ) VALUES ( 'Lotte' );

CREATE TABLE S.NACHNAME ( NACHNAME VARCHAR ( 255 ));

INSERT INTO S.NACHNAME ( NACHNAME ) VALUES ( 'Fischer' );
INSERT INTO S.NACHNAME ( NACHNAME ) VALUES ( 'Mayer' );

Nach solch einem Skript könnte dann noch »USE S« eingegeben werden, wenn man mit MySQL oder kompatiblen Systemen arbeitet.

Übungsfragen ⃖

Für die folgenden Übungsfragen wird vorausgesetzt, daß das am Anfang dieser Lektion stehende Skript ausgeführt und danach nichts verändert wurde.

?   Namen ⃖

Welcher der folgenden Namen ist einfach (also ein Bezeichner), welcher qualifiziert und welcher vollständig qualifiziert?

S« ist ein Schema und »S.STADT« eine Tabelle.)

?   Benanntes

Wofür stehen die folgenden Namen jeweils? (Spalte, Tabelle oder Schema?)

Hierbei soll angenommen werden, daß »BEZEICHNUNG« der Name einer Spalte der Tabelle »STADT« ist, die in dem Schema »S« enthalten ist und das Schema »S« mit »USE S« als aktuelles Schema eingestellt wurde.

?   Enthaltensein

Was kann man aus der Schreibweise »alpha.gamma« in SQL  normalerweise entnehmen?

?   Ausdrücke

Welcher der folgenden Texte kann zwischen »SELECT« und »FROM« verwendet werden?

S« ist ein Schema und »S.STADT« eine Tabelle.)

o »S.STADT«
o »S.STADT.BEZEICHNUNG«

?   Eigentliche Namen

Was ist der eigentliche Name der Tabelle »S.STADT«?

Was ist der eigentliche Name der Spalte »S.STADT.BEZEICHNUNG«?

Übungsaufgabe ⃖

/   Übungsaufgabe ⃖

Legen Sie ein neues Schema mit Hilfe des folgende Skripts an.

Skript (MySQL )

DROP SCHEMA S; CREATE SCHEMA S; USE S;

CREATE TABLE NRW
( NRWSTADT VARCHAR ( 255 ), BEZEICHNUNG VARCHAR ( 255 ), EINWOHNER VARCHAR ( 255 ));

INSERT INTO NRW ( NRWSTADT, BEZEICHNUNG, EINWOHNER ) VALUES ( '1', 'Dortmund', '586181' );
INSERT INTO NRW ( NRWSTADT, BEZEICHNUNG, EINWOHNER ) VALUES ( '2', 'Essen', '582624' );
INSERT INTO NRW ( NRWSTADT, BEZEICHNUNG, EINWOHNER ) VALUES ( '3', 'Duisburg', '491231' );

SELECT * FROM NRW;

Geben Sie dann alle Zeilen der Tabelle aus, wobei die Spalten in der folgenden Reihenfolge ausgegeben werden:

Verwenden Sie zur Bezeichnung der Spalten dabei Namen wie folgt:

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 stefanram722961 stefan_ram:722961 Qualifizierte Spaltennamen in SQL Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722961, slrprddef722961, 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/qualifizierte_spaltennamen_sql