Literale in SQL (MySQL )
Vorbereitung
Zum Nachvollziehen der folgenden Beispiele kann das folgende Skript in einen MySQL -Klienten kopiert werden.
- Skript (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE POSTEN ( NAME VARCHAR ( 255 ), ANZAHL VARCHAR ( 255 ), WERT VARCHAR ( 255 ) );
-- "ANZAHL Artikel der Ware NAME mit einem Wert von WERT pro Stueck"INSERT INTO POSTEN ( NAME, ANZAHL, WERT ) VALUES ( 'Stuhl', '6', '720' );
INSERT INTO POSTEN ( NAME, ANZAHL, WERT ) VALUES ( 'Tisch', '1', '2800' );CREATE TABLE ONE ( COL VARCHAR ( 255 ));
INSERT INTO ONE ( COL ) VALUES ( 'A' );SELECT * FROM POSTEN;
SELECT * FROM ONE;
Ganzzahlige Numeralia
Neben Zeichenfolgenliteralen können auch Numeralia als relativ direkte Angaben von Zahlenwerten verwendet werden.
Ein Numerale ist im wesentlichen eine Folge von Ziffern. Sein Wert ergibt sich durch die übliche Interpretation von Numeralia (das Numerale »12« hat den Wert Zwölf usw.).
Das Numerale steht als anders als ein Zeichenfolgenliteral nicht in Apostrophen.
- Konsole (MySQL)
SELECT 1;
+---+
| 1 |
+---+
| 1 |
+---+
Auf das Schlüsselwort »SELECT« folgt oben ein Leerzeichen und dann das Numerale »1«.
Da »SELECT« und das Literal jeweils eine lexikalische Einheit sind, darf zwischen ihnen Leeraum stehen.
In diesem Fall muß sogar Leerraum vorhanden sein, weil das Zeichen »1« sonst als Teil eines Wortes »SELECT1« angesehen werden würde.
SELECT1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT1' at line 1
Numeralia mit Nachkommastellen
Ein Punktnumerale ist ein Numerale mit Ziffern und einem einzigen Punkt. Sein Wert ergibt sich durch die übliche Interpretation, wobei der Punkt aber als Komma zu lesen ist (das Numerale »12.2« hat den Wert Zwölf-Komma-Zwei „12,2“ usw.).
Das folgende Beispiel zeigt also beispielsweise die Ausgabe des Wertes 1,2 (also zwölf Zehntel).
- Konsole (MySQL)
SELECT 1.20;
+------+
| 1.20 |
+------+
| 1.20 |
+------+
Das folgende Beispiel zeigt eine zusätzliche Benennung der Spalte als »WERT«.
- Konsole (MySQL)
SELECT 214.97 AS WERT;
+--------+
| WERT |
+--------+
| 214.97 |
+--------+
Ausdrücke
Eine Angabe, die in der Liste hinter »SELECT« erscheinen kann, nennen wir einen Ausdruck.
Ein Primärausdruck ist eine besonders einfache Form eines Ausdrucks. Spaltennamen und Literal sind Primärausdrücke.
- Primaerausdruck (Syntaxdiagramm)
Ausdruck
.-----------------.
--->| Primaerausdruck |--->
'-----------------'Primaerausdruck
.-------------.
---.--->| Spaltenname |--->.--->
| '-------------' ^
| .-------------. |
'--->| Literal |----'
'-------------'
Ein Literal ist ein Numerale oder ein Zeichenfolgenliteral.
- Literal (Syntaxdiagramm)
Literal
.----------------------.
---.--->| Numerale |--->.--->
| '----------------------' ^
| .----------------------. |
'--->| Zeichenfolgenliteral |----'
'----------------------'
Ein Numerale ist ein ganzzahliges Numerale oder ein Punktnumerale.
- Literal (Syntaxdiagramm)
Numerale
.-----------------------.
---.--->| ganzzahliges Numerale |--->.--->
| '-----------------------' ^
| .-----------------------. |
'--->| Punktnumerale |----'
'-----------------------'
Ermittlung des genauen Typs eines Literals unter MySQL
Der genaue Typ eines Literals kann unter MySQL mit »DESCRIBE« ermittelt werden, nachdem eine Tabelle mit jenem Literal angelegt wurde, ohne daß für die Spalte der Tabelle ein bestimmter Typ ausdrücklich festgelegt wurde.
- Protokoll (MySQL )
WARNINGS; SET sql_mode = 'ANSI,TRADITIONAL';
DROP SCHEMA S; CREATE SCHEMA S; USE S;CREATE TABLE T AS SELECT 'ABC';
DESCRIBE T;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| ABC | varchar(3) | NO | | | |
+-------+------------+------+-----+---------+-------+
Der Typ des Zeichenfolgenliterals »'ABC'« ist also »VARCHAR ( 3 )«. Das heißt, es handelt sich um ein VARCHAR-Literal mit 3 Zeichen. (Als Typ einer Spalte bedeutet »VARCHAR ( 3 )«, daß jene Spalte VARCHAR-Werte mit bis zu 3 Zeichen pro Zeile aufnehmen kann.)
Übungsaufgaben
/ Verwendung eines Punktnumerales
Schreiben Sie eine Abfrage, welche die folgende Ausgabe erzeugt. Dabei soll die Abfrage möglichst kurz sein und keine FROM-Klausel enthalten (oder höchstens die FROM-Klausel »FROM ONE« für die mit dem eingangs gezeigten Skript erzeugte Tabelle »ONE«).
- Ausgabe (MySQL )
+------+
| 2.42 |
+------+
| 2.42 |
+------+
/ Synthetisieren einer Tabelle
Schreiben Sie eine Abfrage, welche die folgende Ausgabe erzeugt. Dabei soll die Abfrage möglichst kurz sein und keine FROM-Klausel enthalten (oder höchstens die FROM-Klausel »FROM ONE« für die mit dem eingangs gezeigten Skript erzeugte Tabelle »ONE«).
- Ausgabe (MySQL )
+------+---+-------+
| A | C | Beta |
+------+---+-------+
| 1.20 | 1 | Alpha |
+------+---+-------+
/ Erweiterung einer Tabelle durch Literale
Schreiben Sie eine Abfrage, welche mit » FROM POSTEN;« endet, und die folgende Ausgabe erzeugt. (Für diese Aufgabe wird angenommen, daß eine Tabelle »POSTEN« mit dem eingangs gezeigtem Skript angelegt wurde.)
- Ausgabe (MySQL )
+-------+---------+--------+-------+------+
| NAME | Stueck: | ANZAHL | Euro: | WERT |
+-------+---------+--------+-------+------+
| Stuhl | Stueck: | 6 | Euro: | 720 |
| Tisch | Stueck: | 1 | Euro: | 2800 |
+-------+---------+--------+-------+------+