Der WHERE-Ausdruck in SQL (MySQL )
- Skript
WARNINGS; SET SESSION sql_mode = 'ANSI,TRADITIONAL';
DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE ALPHABET ( ZEICHEN VARCHAR ( 255 ), VOKAL VARCHAR ( 255 ) );
INSERT INTO ALPHABET ( ZEICHEN, VOKAL ) VALUES ( 'A', 1 );
INSERT INTO ALPHABET ( ZEICHEN, VOKAL ) VALUES ( 'B', 0 );
INSERT INTO ALPHABET ( ZEICHEN, VOKAL ) VALUES ( 'C', 0 );
INSERT INTO ALPHABET ( ZEICHEN, VOKAL ) VALUES ( 'D', 0 );
INSERT INTO ALPHABET ( ZEICHEN, VOKAL ) VALUES ( 'E', 1 );SELECT * FROM ALPHABET;
- Konsole
SELECT * FROM ALPHABET;
+---------+-------+
| ZEICHEN | VOKAL |
+---------+-------+
| A | 1 |
| B | 0 |
| C | 0 |
| D | 0 |
| E | 1 |
+---------+-------+- Konsole
SELECT ZEICHEN, VOKAL FROM ALPHABET;
+---------+-------+
| ZEICHEN | VOKAL |
+---------+-------+
| A | 1 |
| B | 0 |
| C | 0 |
| D | 0 |
| E | 1 |
+---------+-------+
In früheren Lektionen wurde die WHERE-Klausel in einer festen Verbindung mit einer Gleichheitsaussage (mit dem Gleichheitszeichen »=«) zur Equiselektion und für das Equijoin eingeführt. Diese feste Verbindung des Schlüsselworts »WHERE« mit einer Gleichheitsaussage diente aber nur der Vereinfachung. Tatsächlich muß hinter »WHERE« nicht unbedingt immer eine Gleichheitsaussage stehen. In dieser Lektion werden nun allgemeinere Möglichkeiten der Formulierung von Aussagen vorgestellt.
WHERE-Selektion mit Numeralia (Konstanten)
Eine Zeile wird in das Ergebnis übernommen, wenn der Wert hinter »WHERE« (der hier WHERE-Ausdruck genannt wird) nicht der Zahl 0 gleich ist.
- Konsole
SELECT ZEICHEN, VOKAL FROM ALPHABET WHERE 0;
- (keine Ausgabe)
- Konsole
SELECT ZEICHEN, VOKAL FROM ALPHABET WHERE 1;
+---------+-------+
| ZEICHEN | VOKAL |
+---------+-------+
| A | 1 |
| B | 0 |
| C | 0 |
| D | 0 |
| E | 1 |
+---------+-------+- Konsole
SELECT ZEICHEN, VOKAL FROM ALPHABET WHERE 2;
+---------+-------+
| ZEICHEN | VOKAL |
+---------+-------+
| A | 1 |
| B | 0 |
| C | 0 |
| D | 0 |
| E | 1 |
+---------+-------+
Wir erkennen daran ein allgemeines Grundprinzip, das öfter in MySQL zu finden ist: Der Dichotomie zwischen der Zahl 0 und allen anderen Zahlen an Stellen, wo zwischen zwei Möglichkeiten unterschieden werden soll.
Zahlen mit Nachkommastellen hinter »WHERE« werden zuerst durch Rundung in ganze Zahlen gewandelt.
- Konsole
SELECT ZEICHEN, VOKAL FROM ALPHABET WHERE 0.2;
Empty set (0.00 sec)
- Konsole
SELECT ZEICHEN, VOKAL FROM ALPHABET WHERE 0.8;
+---------+-------+
| ZEICHEN | VOKAL |
+---------+-------+
| A | 1 |
| B | 0 |
| C | 0 |
| D | 0 |
| E | 1 |
+---------+-------+
Eine Zeichenfolge ist als WHERE-Ausdruck allerdings nicht geeignet.
- Konsole
SELECT ZEICHEN, VOKAL FROM ALPHABET WHERE 'abc';
Warning (Code 1292): Truncated incorrect INTEGER value: 'abc'
WHERE-Selektion mit Spaltennamen
Nach »WHERE« können auch Spaltennamen angegeben geschrieben werden.
Es gilt weiterhin, daß eine Zeile selektiert wird, wenn der Wert des WHERE-Ausdrucks nicht 0 ist, nur daß dieser dann nicht konstant ist, sondern von der Spalte abhängt.
- Konsole
SELECT ZEICHEN, VOKAL FROM ALPHABET WHERE VOKAL;
+---------+-------+
| ZEICHEN | VOKAL |
+---------+-------+
| A | 1 |
| E | 1 |
+---------+-------+
Übungsfragen
? Subtraktion
Es sei die folgende Tabelle gegeben.
- Konsole
select * from ALPHABET;
+---------+-------+
| ZEICHEN | VOKAL |
+---------+-------+
| A | 1 |
| B | 0 |
| C | 0 |
| D | 0 |
| E | 1 |
+---------+-------+
Welche Zeilen werden dann von der folgenden Anweisung ausgegeben?
- Konsole
select * from ALPHABET WHERE 1 - VOKAL;
Übungsaufgaben
/ Geschlechtsspezifische Vornamen
- Skript
WARNINGS; SET SESSION sql_mode = 'ANSI,TRADITIONAL';
DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE VORNAME ( WEIBLICH BOOL, VORNAME VARCHAR ( 255 ) );
INSERT INTO VORNAME ( WEIBLICH, VORNAME ) VALUES ( 1, 'Mia' );
INSERT INTO VORNAME ( WEIBLICH, VORNAME ) VALUES ( 0, 'Ben' );
INSERT INTO VORNAME ( WEIBLICH, VORNAME ) VALUES ( 1, 'Julia' );
INSERT INTO VORNAME ( WEIBLICH, VORNAME ) VALUES ( 1, 'Lisa' );
INSERT INTO VORNAME ( WEIBLICH, VORNAME ) VALUES ( 0, 'Lukas' );
SELECT * FROM VORNAME;
Die Tabelle »VORNAME« enthält einige Vornamen samt einer Information über ihr Geschlecht.
- Konsole
SELECT * FROM VORNAME;
+----------+---------+
| WEIBLICH | VORNAME |
+----------+---------+
| 1 | Mia |
| 0 | Ben |
| 1 | Julia |
| 1 | Lisa |
| 0 | Lukas |
+----------+---------+SELECT WEIBLICH, VORNAME FROM VORNAME;
+----------+---------+
| WEIBLICH | VORNAME |
+----------+---------+
| 1 | Mia |
| 0 | Ben |
| 1 | Julia |
| 1 | Lisa |
| 0 | Lukas |
+----------+---------+
Erstellen Sie daraus mit einer möglichst kurzen SELECT-Abfrage die folgende Ausgabe, in der alle weiblichen Vornamen dieser Tabelle vorkommen.
- Tabelle
+----------+---------+
| WEIBLICH | VORNAME |
+----------+---------+
| 1 | Mia |
| 1 | Julia |
| 1 | Lisa |
+----------+---------+