Der Stern »*« als Auswahlliste in SQL (MySQL )
Vorbereitung
Die Vorbereitung zu dieser Lektion ist wie bei der vorherigen Lektion. Sie kann daher entfallen, wenn schon die Vorbereitung der vorherigen Lektion eingegeben wurde.
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;
Der Stern »*« als Auswahlliste in SQL (MySQL )
- Konsole (MySQL, E92, C99, C03)
SELECT * FROM ZAHL;
+---+------+------+
| I | DE | EN |
+---+------+------+
| 0 | NULL | ZERO |
| 1 | EINS | ONE |
| 2 | ZWEI | TWO |
+---+------+------+
Der Stern »*« steht an einer Stelle, an der sonst die Namen der zu übernehmenden Spalten stehen würden, und bedeutet, daß alle Spalten übernommen werden sollen. Beispiele dafür wurde schon in den vorherigen Lektionen gezeigt.
Die Verwendung des Sterns ist natürlich bequem, jedoch wird empfohlen, auf die Verwendung des Sterns zu verzichten, wenn die Abfrage irgendwo dauerhaft gespeichert wird und sichergestellt werden muß, daß genau-bestimmte Spalten in das Ergebnis übernommen werden. Dies kann beispielsweise dann der Fall sein, wenn das Ergebnis automatisch weiterverarbeitet werden soll, und dabei bestimmte Annahmen über die Anzahl, die Namen oder die Reihenfolge der Spalten des Abfrageergebnisses gemacht werden.
Falls die Anzahl oder die Bezeichnung der Spalten der Basistabellenvariablen einmal verändert wird, dann könnte sich dies nämlich bei Verwendung des Sterns so auswirken, daß die Abfrage nun eine andere Ausgabe erzeugt, ohne daß es irgendwelche Fehlermeldungen gibt.
Werden die gewünschten Spalten aber alle in der Abfrage aufgezählt, so ändert das Hinzufügen von Spalten zur Basistabellenvariablen nichts am Ergebnis der Abfrage. Das Umbenennen oder Löschen von Spalten würde dann meist zu einer Fehlermeldung führen, so daß das Problem bemerkt werden kann.
In MySQL ist es auch möglich, den Stern in einer Auswahlliste mit anderen Spalten zusammen zu verwenden, wenn die Auswahlliste mit dem Stern beginnt. Dies ist jedoch kein Standard-SQL.
- Konsole (MySQL )
SELECT *, DE FROM ZAHL;
+------+------+------+------+
| I | DE | EN | DE |
+------+------+------+------+
| 0 | NULL | ZERO | NULL |
| 1 | EINS | ONE | EINS |
| 2 | ZWEI | TWO | ZWEI |
+------+------+------+------+
Alternative SQL -Ausführer
Eventuelle können auch die folgenden alternativen SQL -Ausführer verwendet werden, falls MySQL nicht zur Verfügung steht.
- Alternative Ausführer für SQL
http://sqlfiddle.com/
http://courses.cs.byu.edu/~cs452ng/manuals/sqlfiddle.pdf
http://Ideone.com
http://www.sqlcourse.com/create.html
http://sqlzoo.net/
http://apex.oracle.com/
http://www.oraclebin.com/2013/01/how-to-execute-sql-queries-online.html
http://www.w3schools.com/sql/sql_tryit.asp
http://demo.phpmyadmin.net/STABLE/?pma_username=root
Anhang *
Zitat *
- 9075-2 7.12 (Entwurf 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> ]
- 9075-2 7.12 (Entwurf 2010, Zitat)
- the <select list> “*” is equivalent to a <value expression> sequence in which each <value expression> is a column reference that references a column of T and each column of T is referenced exactly once. The columns are referenced in the ascending sequence of their ordinal position within T.