Der WHERE-Ausdruck in SQL (Der WHERE-Ausdruck in SQL), Lektion, Seite 723291
https://www.purl.org/stefan_ram/pub/where_sql (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

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 |
+----------+---------+

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 stefanram723291 stefan_ram:723291 Der WHERE-Ausdruck in SQL Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723291, slrprddef723291, 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/where_sql