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

Spaltennamen und Projektion 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 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;

Ausgabe des Inhalts eines Tabellenspeichers

Wie schon behandelt wurde, führt die folgende Eingabe zur Ausgabe der Tabelle im Tabellenspeicher »ZAHL«.

Konsole (MySQL, E92, C99, C03)

SELECT * FROM ZAHL;

+------+------+------+
| I | DE | EN |
+------+------+------+
| 0 | NULL | ZERO |
| 1 | EINS | ONE |
| 2 | ZWEI | TWO |
+------+------+------+

Projektion auf eine Spalte

Es ist auch möglich, nach »SELECT« an Stelle eines Sterns »*« den Namen einer Spalte (hier »DE«) anzugeben.

Das Ergebnis dieser Abfrage ist dann eine Tabelle, welche nur die angegebenen Spalte enthält.

Konsole (MySQL, E92, C99, C03)

SELECT DE FROM ZAHL;

+------+
| DE |
+------+
| NULL |
| EINS |
| ZWEI |
+------+

Projektion auf mehrere Spalten

Durch die Angabe mehrerer kommagetrennter Spaltenangaben kann eine Tabelle mit mehreren Spalten erzeugt werden.

Das Ergebnis dieser Abfrage ist dann eine Tabelle, welche die angegebenen Spalten enthält.

Konsole (MySQL, E92, C99, C03)

SELECT DE, EN FROM ZAHL;

+------+------+
| DE | EN |
+------+------+
| NULL | ZERO |
| EINS | ONE |
| ZWEI | TWO |
+------+------+

Reihenfolge von Spalten

Für relationale Datenverarbeitung spielt die Reihenfolge von Zeilen oder Spalten einer Tabelle normalerweise keine Rolle. Die von der folgenden Abfrage erzeugt Tabelle enthält dieselbe Information wie die weiter oben stehende Tabelle mit einer vertauschten Reihenfolge der beiden Spalten. Die Reihenfolge der Angabe der Spaltennamen ist insofern bedeutungslos. Falls die Tabelle ein Endergebnis darstellt, das direkt so einem Benutzer angezeigt wird, dann könnte die eine oder die andere Reihenfolge freilich für den Benutzer übersichtlicher sein.

Konsole (MySQL, E92, C99, C03)

SELECT EN, DE FROM ZAHL;

+------+------+
| EN | DE |
+------+------+
| ZERO | NULL |
| ONE | EINS |
| TWO | ZWEI |
+------+------+

Wiederholung von Spalten

Aus der Sicht des relationalen Modells hat es keinen Sinn, von einer Spalte zu sagen, daß sie mehrfach  in einer Tabelle vorkomme, weil durch die Wiederholung keine neue Information entsteht. Daher hat die von der folgenden Abfrage erzeugte Tabelle als Relation nur eine Spalte, auch wenn diese Spalte zwiefach  angezeigt wird. Weil dadurch eher Probleme entstehen, werden solche Tabellen mit der Wiederholung gleicher Spalten aber normalerweise selten absichtlich erzeugt. Deswegen sind solche Abfragen nur als Lehrbeispiel aber nicht als Empfehlung zu verstehen.

Konsole (MySQL, E92, C99, C03)

SELECT DE, DE FROM ZAHL;

+------+------+
| DE | DE |
+------+------+
| NULL | NULL |
| EINS | EINS |
| ZWEI | ZWEI |
+------+------+

Symbolische Darstellung einer Projektion

Unter Projektion  versteht man die Auswahl  bestimmter Spalten durch Angabe ihres Namens in der Auswahlliste. Die folgende Abbildung stellt sie symbolisch dar.

Symbolische Darstellung einer Projektion
.--------------.
| ### |
| ### |
| ### |
| ### |
| ### |
| ### |
| ### |
| ### |
'--------------'

Syntax

Die gesamte Angabe zwischen »SELECT« und »FROM« wird Auswahlliste  (<selection list>) genannt. Sie enthält durch ein Komma getrennte Ausdrücke zum Inhalt jeweils einer Spalte der Ergebnistabelle. Jede Angabe darin kann ein Spaltenname sein. Die folgenden Beispiele veranschaulichen diese Syntax.

Konsole (MySQL, E92, C99, C03)
SELECT   *        FROM ZAHL;
SELECT DE FROM ZAHL;
SELECT DE, EN FROM ZAHL;
SELECT EN, DE FROM ZAHL;
SELECT DE, DE FROM ZAHL;
Direkte SQL-Anweisung

Direkte SQL-Anweisung

.------------------------. .-.
--->| Direkte Datenanweisung |--->( ; )--->
'------------------------' '-'

Direkte Datenanweisung

Direkte Datenanweisung

.----------------------.
--->| Abfragespezifikation |--->
'----------------------'

Abfragespezifikation

Abfragespezifikation

.------. .--------------. .------------------.
--->( SELECT )--->| Auswahlliste |--->| Tabellenausdruck |--->
'------' '--------------' '------------------'

Auswahlliste

Auswahlliste

.------------.
---.---.--->| Bezeichner |---.---.--->
| ^ '------------' | |
| | .-. | |
| '--------( , )--------' |
| '-' |
| .-. |
'----------->( * )------------'
'-'

Tabellenausdruck

Tabellenausdruck

.----. .------------.
--->( FROM )--->| Bezeichner |--->
'----' '------------'

Unter einem „Tabellenausdruck“ würde man in der Informatik normalerweise etwas verstehen, dessen Wert eine Tabelle ist oder das für eine Tabelle steht. In der SQL-Norm, an deren Namen die oben angegebenen syntaktischen Kategorien angelehnt sind, versteht man darunter jedoch die FROM-Klausel einer Abfragespezifikation!

Basistabellenvariablen und abgeleitete Tabellen

Der Wert (das Ergebnis) einer SELECT-Abfrage ist eine Tabelle. Diese wird in den obigen Beispielen ausgegeben. In anderen Fällen kann sie aber auch ohne Ausgabe  weiterverarbeitet werden.

Die Ausgangsdaten stehen als Inhalt einer Basistabellenvariablen  (hier: ZAHL) bereit. Die SELECT-Abfrage erzeugt aus der Basistabellenvariablen eine abgeleitete Tabelle  (welche für uns als Ausgabe der SELECT-Abfrage sichtbar wird).

9075-1:2011 4.3 SQL-data consists entirely of table variables, called base tables. An operation that references zero or more base tables and returns a table is called a query. The result of a query is called a derived table.

Eine abgeleitete Tabelle, ist eine Tabelle, aber kein Tabellenspeicher, weil sie keinen Speicher darstellt, in den Werte geschrieben werden können, sondern eine bestimmte unveränderliche Tabelle mit unveränderlichen Inhalten. Eine Ort, unter dem zu einem späteren Zeitpunkt ein anderer Inhalt gefunden werden kann als zu einem früheren Zeitpunkt, ist hingegen ein Speicher  – falls der Inhalt eine Tabelle ist, also eine Tabellenspeicher.

Ein abgeleitete Tabelle existiert nur, während eine Abfrage ausgeführt wird. (Sie kann im Zuge der Abfrage ausgegeben werden, so daß ihre Ausgabe als Zeugnis ihrer Existenz auch nach dem Ende ihrer Existenz noch auf dem Bildschirm bleibt.)

Ein Tabellenspeicher hat einen Namen, während eine abgeleitete Tabelle keinen  Namen hat. (Beide haben aber Spaltenname.)

Eine mögliche Aussprache von “query ” ist: /ˈkwɪɚ i/.

Normalisierung

Die Anforderungen der Normalformen (der Normalisierung) gelten nur für Basistabellen, nicht  für abgeleitete Tabellen.

»SELECT« und »CREATE TABLE«

Wir haben gesehen, daß die Ausgabe einer SELECT-Abfrage nicht immer dem Inhalt eines Tabellenspeichers gleichen muß.

Tatsächlich erzeugt eine SELECT-Abfrage eine neue Tabelle, welche uns dann ausgegeben wird. Diese neue Tabelle wird nach dem Ende der Bearbeitung der SELECT-Abfrage aber im allgemeinen nicht  dauerhaft gespeichert. In diesem Teil des Kurses wird uns die von der SELECT-Abfrage erzeugte neue Tabelle angezeigt und danach wird sie wieder gelöscht.

»CREATE TABLE« erzeugt einen dauerhaften Tabellenspeicher, der einen Namen hat und im Laufe der Zeit verschiedene Tabellen enthalten kann.

»SELECT« erzeugt eine Tabelle, die aber im allgemeinen nicht  dauerhaft gespeichert wird und auch keinen Namen hat. Sie wird in vielen Fällen einfach nur ausgegeben und verschwindet danach wieder.

Man kann nicht  direkt sehen, was sich in einem dauerhaften Tabellenspeicher befindet, solang man nicht mit einer SELECT-Abfrage eine Tabelle daraus erzeugt hat. Daher kann man sagen, daß eine SELECT-Abfrage in SQL  das universelle Mittel ist, um eine Tabelle zu erzeugen. (In späteren Teilen des Kurses werden wir sogar noch sehen, daß man mit einer SELECT-Abfrage auch ohne Bezug auf einen Tabellenspeicher eine Tabelle erzeugen kann, und daß man die von einer SELECT-Abfrage erzeugten Tabellen auch von anderen SELECT-Abfrage weiterverarbeitet werden können.)

Übungsaufgaben

/   Ausgabe einer Tabelle

Schreiben Sie eine Abfrage, welche Informationen aus dem Tabellenspeicher »ZAHL« in der folgenden Weise ausgibt. (Die Reihenfolge der Zeilen kann auch anders sein.)

Lösungsmuster: Einsetzen einer passenden Auswahlliste in »SELECT FROM ZAHL;«

Konsole
+------+------+
| DE | I |
+------+------+
| NULL | 0 |
| EINS | 1 |
| ZWEI | 2 |
+------+------+

/   Ausgabe einer Tabelle

Schreiben Sie eine Abfrage, welche Informationen aus dem Tabellenspeicher »ZAHL« in der folgenden Weise ausgibt. (Die Reihenfolge der Zeilen kann auch anders sein.)

Lösungsmuster: Einsetzen einer passenden Auswahlliste in »SELECT FROM ZAHL;«

Konsole
+------+------+------+
| I | I | I |
+------+------+------+
| 0 | 0 | 0 |
| 1 | 1 | 1 |
| 2 | 2 | 2 |
+------+------+------+

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 stefanram722404 stefan_ram:722404 Spaltennamen in SQL (MySQL) Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722404, slrprddef722404, 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/spaltennamen_sql_de