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

Äquiselektion (Äquirestriktion) 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 PAAR ( LINKS VARCHAR ( 255 ), RECHTS VARCHAR ( 255 ));
INSERT INTO PAAR ( LINKS, RECHTS ) VALUES ( 'D', 'D' );
INSERT INTO PAAR ( LINKS, RECHTS ) VALUES ( 'D', 'E' );
INSERT INTO PAAR ( LINKS, RECHTS ) VALUES ( 'E', 'D' );
INSERT INTO PAAR ( LINKS, RECHTS ) VALUES ( 'E', 'E' );
SELECT * FROM PAAR;

Darstellung einer Beispieltabelle

Die folgende Tabelle enthält zwei Spalten mit insgesamt vier Kombinationen der Buchstaben »D« und »E«. Diese Tabelle soll hier keine spezielle Bedeutung haben, sondern ist ein künstlich vereinfachtes Beispiel.

Konsole (MySQL, E92, C99, C03)
SELECT * FROM PAAR;
+-------+--------+
| LINKS | RECHTS |
+-------+--------+
| D | D |
| D | E |
| E | D |
| E | E |
+-------+--------+

Die folgende SELECT-Anweisung gibt die gleiche Tabelle wie zuvor mit expliziter Angabe der Spaltennamen aus.

Konsole (MySQL, E92, C99, C03)
SELECT LINKS, RECHTS FROM PAAR;
+-------+--------+
| LINKS | RECHTS |
+-------+--------+
| D | D |
| D | E |
| E | D |
| E | E |
+-------+--------+

Selektion in SQL  (MySQL )

Unter eine Selektion (auch „Restriktion“ genannt) versteht man allgemein eine Auswahl von Zeilen  einer Tabelle.

Wenn man eine Tabelle als eine Menge  von Zeilen ansieht, so ist die Selektion die Bildung einer Teilmenge  (Auswahl).

Selektion
.--------------.
| |
| |
|##############|
| |
'--------------'

Zum Vergleich: Unter einer Projektion  versteht man ja, wie schon behandelt wurde, eine Auswahl von Spalten.

Projektion
.--------------.
| ### |
| ### |
| ### |
| ### |
| ### |
| ### |
| ### |
| ### |
'--------------'

Äquiselektion mit zwei Spaltennamen

Unter einer Äquiselektion  (Äquirestriktion ) verstehen wir hier die Auswahl von Zeilen durch Angabe einer Gleichheitsbedingung.

Diese Bezeichnung Äquiselektion  ist zwar nicht allgemein üblich, jedoch ist die Bezeichnung „Selektion“ allgemein üblich, und „Äqui-“ ist ein bekanntes Präfix.

(Das lateinische Adjektiv "aequus " /ˈaɪ.kʷus/ bedeutet „gleich“.)

Im folgenden Beispiel wird eine Äquirestriktion gezeigt, welche die Gleichheit der Werte zweier Spalten  verlangt.

Durch die Bedingung »WHERE LINKS = RECHTS« am Ende der folgenden Select-Abfrage wird verlangt, daß nur noch die Spalten im Ergebnis der Abfrage vorkommen, bei denen der Wert in der Spalte »LINKS« gleich dem Wert in der Spalte »RECHTS« ist.

Konsole (MySQL, E92, C99, C03)
SELECT LINKS, RECHTS FROM PAAR WHERE LINKS = RECHTS;
+-------+--------+
| LINKS | RECHTS |
+-------+--------+
| D | D |
| E | E |
+-------+--------+

Die Reihenfolge der Klauseln im Quelltext lautet: »SELECT«, »FROM«, »WHERE« (beispielsweise: »SELECT LINKS, RECHTS«, »FROM PAAR«, »WHERE LINKS = RECHTS;«).

Äquiselektion mit einem Spaltennamen und einem Zeichenfolgenliteral

Aussprachehinweis

flower ” /ˈflaʊɚ/

Skript (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE ENGLISCHDEUTSCH ( ENGLISCH VARCHAR ( 255 ), DEUTSCH VARCHAR ( 255 ));
INSERT INTO ENGLISCHDEUTSCH ( ENGLISCH, DEUTSCH ) VALUES ( 'train', 'Zug' );
INSERT INTO ENGLISCHDEUTSCH ( ENGLISCH, DEUTSCH ) VALUES ( 'rain', 'Regen' );
INSERT INTO ENGLISCHDEUTSCH ( ENGLISCH, DEUTSCH ) VALUES ( 'star', 'Stern' );
INSERT INTO ENGLISCHDEUTSCH ( ENGLISCH, DEUTSCH ) VALUES ( 'flower', 'Blume' );
INSERT INTO ENGLISCHDEUTSCH ( ENGLISCH, DEUTSCH ) VALUES ( 'table', 'Tisch' );
INSERT INTO ENGLISCHDEUTSCH ( ENGLISCH, DEUTSCH ) VALUES ( 'table', 'Tabelle' );
INSERT INTO ENGLISCHDEUTSCH ( ENGLISCH, DEUTSCH ) VALUES ( 'schedule', 'Tabelle' );
INSERT INTO ENGLISCHDEUTSCH ( ENGLISCH, DEUTSCH ) VALUES ( 'light', 'Licht' );
INSERT INTO ENGLISCHDEUTSCH ( ENGLISCH, DEUTSCH ) VALUES ( 'dog', 'Hund' );

Das obige Skript sollte zur Vorbereitung dieses Abschnittes in die Datenbankkonsole kopiert werden.

In diesem Skript findet man die Textwerte der einzelnen Spalten, wie beispielsweise »'train'« zwischen Apostrophe geschrieben. Solch eine Angabe eines Texten mit Apostrophen nennt man ein Zeichenfolgenliteral.

Ein Text in Apostrophen wird nicht als Name einer Spalte interpretiert, sondern steht für diesen wörtlichen Text (ohne die Apostrophe). Solch eine Angabe kann auch auf einer Seite des Gleichheitszeichens verwendet werden. So kann in einer Tabelle gezielt eine Zeile mit einem bestimmten Wert in einer bestimmten Spalte herausgegriffen werden.

Spaltennamen und Zeichenfolgenliteral sind beides sogenannte Ausdrücke. Man kann also sagen, daß sich auf einer Seite des Gleichheitszeichen stets ein Ausdruck  befinden muß.

Wir stellen zunächst die Basistabelle dar, welche Übersetzungen von Wörtern enthält. Zu einem englischen Worte in der Spalte »ENGLISCH« findet man ein unter Umständen als deutsche Übersetzung jenes englischen Wortes mögliches deutsches Wort in derselben Zeile in der Spalte »DEUTSCH«. Umgekehrt findet man auch zu einem deutschen Worte in der Spalte »DEUTSCH« ein unter Umständen als englische Übersetzung jenes deutschen Wortes mögliches englisches Wort in derselben Zeile in der Spalte »ENGLISCH«. Beispielsweise ist eine mögliche deutsche Übersetzung des englischen Wortes »train« das deutsche Wort »Zug«, und eine mögliche englische Übersetzung des deutschen Wortes »Zug« ist das englische Wort »train«.

Konsole

SELECT * FROM ENGLISCHDEUTSCH;

+----------+---------+
| ENGLISCH | DEUTSCH |
+----------+---------+
| train | Zug |
| rain | Regen |
| star | Stern |
| flower | Blume |
| table | Tisch |
| table | Tabelle |
| schedule | Tabelle |
| light | Licht |
| dog | Hund |
+----------+---------+

Die Äquiselektion mit Zeichenfolgenliteralen erlaubt das Nachschlagen eines Wortes in einer Tabelle mit Übersetzungen. Das folgende Beispiel zeigt die Abfrage der deutschen Übersetzung des englischen Wortes »star«. Man beachte, daß hier die Selektion mit der Spalte »ENGLISCH« erfolgt, aber dann auf die Spalte »DEUTSCH« projiziert wird.

Konsole

SELECT * FROM ENGLISCHDEUTSCH WHERE ENGLISCH = 'star';

+----------+---------+
| ENGLISCH | DEUTSCH |
+----------+---------+
| star | Stern |
+----------+---------+

Konsole

SELECT DEUTSCH FROM ENGLISCHDEUTSCH WHERE ENGLISCH = 'star';

+---------+
| DEUTSCH |
+---------+
| Stern |
+---------+

Eine Relation kann immer in „beide Richtungen“ verwendet werden. Daher ist es auch möglich zu einem deutschen Wort das entsprechende englische Wort zu finden. Hier erfolgt die Selektion mit der Spalte »DEUTSCH«, aber es wird dann auf die Spalte »ENGLISCH« projiziert.

Konsole

SELECT * FROM ENGLISCHDEUTSCH WHERE DEUTSCH = 'Blume';

+----------+---------+
| ENGLISCH | DEUTSCH |
+----------+---------+
| flower | Blume |
+----------+---------+

Konsole

SELECT ENGLISCH FROM ENGLISCHDEUTSCH WHERE DEUTSCH = 'Blume';

+----------+
| ENGLISCH |
+----------+
| flower |
+----------+

Die beiden voranstehenden Beispiele zeigen auch, daß die in der WHERE-Bedingung verwendete Spalten nicht in der SELECT-Liste vorkommen muß.

Dabei kann ein Wort auch mehrere Übersetzungen haben.

Konsole

SELECT * FROM ENGLISCHDEUTSCH WHERE ENGLISCH = 'table';

+----------+---------+
| ENGLISCH | DEUTSCH |
+----------+---------+
| table | Tisch |
| table | Tabelle |
+----------+---------+

Die Ergebnistabelle ist nun keine skalare Tabelle mehr:

Konsole

SELECT DEUTSCH FROM ENGLISCHDEUTSCH WHERE ENGLISCH = 'table';

+---------+
| DEUTSCH |
+---------+
| Tisch |
| Tabelle |
+---------+

Konsole

SELECT * FROM ENGLISCHDEUTSCH WHERE DEUTSCH = 'Tabelle';

+----------+---------+
| ENGLISCH | DEUTSCH |
+----------+---------+
| table | Tabelle |
| schedule | Tabelle |
+----------+---------+

Konsole

SELECT ENGLISCH FROM ENGLISCHDEUTSCH WHERE DEUTSCH = 'Tabelle';

+----------+
| ENGLISCH |
+----------+
| table |
| schedule |
+----------+

Eine solche Beziehung zwischen zwei Mengen, die auch solche Mehrdeutigkeiten zuläßt, wird in der Mathematik „Relation“ genannt. Aus der Theorie dieser Relationen entstand die Idee für relationale Datenbanken, in denen eine Tabelle jeweils eine Relation darstellt.

Eine relationale Datenbank erlaubt es, Daten in „jede Richtung“ (wie „Deutsch-Englisch“ oder „Englisch-Deutsch“) zu durchsuchen und Mehrdeutigkeiten darzustellen. Diese Fähigkeiten basieren auf dem zugrundegelegten Modell mathematischer Relationen und zeichnen relationale Datenbanken vor einigen anderen Arten von Datenbanken aus.

Verarbeitung von Benutzereingaben eines Web -Wörterbuchs

Das Diagramm stellt folgendes dar: Der Benutzer kann auf einer HTML-Seite ein Wort eingeben, dieses Wort (z.B. »rain«) wird von PHP  in einen Abfagerahmen eingesetzt und an die Datenbank weitergeleitet, welche eine Antwort (z.B. »Regen«) findet, die dann von PHP  wieder ein eine HTML-Seite eingesetzt wird.

Eingabeverarbeitung
                                                    Benutzer               -------------------.
| |
| Einlesen |
| durch HTML- -----------. |
HTTP/HTTPS | Formular | |
V | |
Wort "rain" | |
| | |
| Einsetzen -----. | |
| durch PHP | | |
| | | |
V | | |
SELECT DEUTSCH FROM ENGLISCHDEUTSCH WHERE ENGLISCH = 'rain'; | | |
| | | |
| Verarbeitung | | |
| durch die | | |
| Datenbank | | |
V SQL PHP HTML Benutzer
+---------+ | | |
| DEUTSCH | | | |
+---------+ | | |
| Regen | | | |
+---------+ | | |
| | | |
| Einsetzen in | | |
| HTML-Seite -----' | |
| durch PHP | |
V | |
Web-Seite mit Antwort "Regen" -----------' |
| |
| |
| |
HTTP/HTTPS | |
V |
Benutzer --------------------'
Ein Web-Formular zur Eingabe eines englischen Wortes
<form action="program.php" method="post">
<input type="text" name="input">
</form>
Eine Abfrageschablone mit Lücke »«
SELECT DEUTSCH FROM ENGLISCHDEUTSCH WHERE ENGLISCH = '';
Eine HTML-Antwort-Schablone mit Lücke »«
<!DOCTYPE html><html><head><title>Deutsche Übersetzung</title></head>
 <body><p>Die deutsche Übersetzung lautet: .</p></body></html>
Ein Stapel von Sprachen/Techniken
Benutzer
HTML         vorderes Ende
HTTP/HTTPS ------------------------------------------------------------
PHP          
SQL          hinteres Ende
Datenbank
berufliche Rollen
Front-End-Developer Techniken, die nahe am Benutzer sind: HTML, CSS, JavaScript, Design
Back-End-Developer Techniken, die weiter entfernt vom Benutzer sind: SQL und eine Sprache wie PHP  oder Java  (oder Python, Ruby, C#,  JavaScript ), Gehalt 2018: in Startup 51.250, in großem Unternehmen 78.000 Euro
Full-Stack-Developer Front-End und Back-End Developer in einer Person (jener Begriff wurde um 2011 durch die Entwicklungsabteilung von Facebook populär gemacht), Gehalt 2018: in großem Unternehmen 91.000 Euro. Full-Stack-Developer sind (neben Dev-Op-Spezialisten) die am besten verdienenden IT-Arbeiter (Stand: 2018).

Projektion und Selektion ⃗²

Erstaunlicherweise werden in SQL  Angaben für eine Projektion  hinter »SELECT« geschrieben, während Angaben für eine Selektion  hinter »WHERE« geschrieben werden.

Befehlsaufbau
SELECT Spalten für Projektion 〉   FROM Datenquelle 〉   WHERE Bedingungen für Selektion 

Übungsfragen

/   Einfügen von Zeichenfolgen

Die Eingabe eines Benutzers wird von einem Programm an Stelle der Ellipse »« in die folgende Schablone eingesetzt. Das erhaltene Skript wird dann an die Datenbank geschickt.

Was muß der Benutzer eingeben, um die Tabelle »ENGLISCHDEUTSCH« zu löschen?

Schablone
SELECT DEUTSCH FROM ENGLISCHDEUTSCH WHERE ENGLISCH = '';

/   Gefahr von Softwarefehlern

Welcher Fehler steht in der “OWASP Top 10 Vulnerabilities List ” auf Platz 1, und worum handelt es sich dabei?

(resources.whitesourcesoftware.com/blog-whitesource/owasp-top-10-vulnerabilities)

Übungsaufgaben

/   Hauptsstädte

Skript (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE LAND ( LAND VARCHAR ( 255 ), HAUPTSTADT VARCHAR ( 255 ));
INSERT INTO LAND ( LAND, HAUPTSTADT ) VALUES ( 'Frankreich', 'Paris' );
INSERT INTO LAND ( LAND, HAUPTSTADT ) VALUES ( 'Griechenland', 'Athen' );
INSERT INTO LAND ( LAND, HAUPTSTADT ) VALUES ( 'San Marino', 'San Marino' );
INSERT INTO LAND ( LAND, HAUPTSTADT ) VALUES ( 'Vatikanstadt', 'Vatikanstadt' );
INSERT INTO LAND ( LAND, HAUPTSTADT ) VALUES ( 'Italien', 'Rom' );
INSERT INTO LAND ( LAND, HAUPTSTADT ) VALUES ( 'Luxemburg', 'Luxemburg' );
INSERT INTO LAND ( LAND, HAUPTSTADT ) VALUES ( 'Schweden', 'Stockholm' );
INSERT INTO LAND ( LAND, HAUPTSTADT ) VALUES ( 'Monaco', 'Monaco' );

Die Tabelle »LAND« enthält einige Länder samt ihren Hauptstädten.

Konsole
SELECT * FROM LAND;
+--------------+---------------+
| LAND | HAUPTSTADT |
+--------------+---------------+
| Frankreich | Paris |
| Griechenland | Athen |
| San Marino | San Marino |
| Vatikanstadt | Vatikanstadt |
| Italien | Rom |
| Luxemburg | Luxemburg |
| Schweden | Stockholm |
| Monaco | Monaco |
+--------------+---------------+
Konsole
SELECT LAND, HAUPTSTADT FROM LAND;
+--------------+---------------+
| LAND | HAUPTSTADT |
+--------------+---------------+
| Frankreich | Paris |
| Griechenland | Athen |
| San Marino | San Marino |
| Vatikanstadt | Vatikanstadt |
| Italien | Rom |
| Luxemburg | Luxemburg |
| Schweden | Stockholm |
| Monaco | Monaco |
+--------------+---------------+

Fragen Sie den Namen der Hauptstadt von Italien mit einer Äquiselektion mit Zeichenfolgenliteralen ab.

/   Land finden

Fragen Sie unter Verwendung der Tabelle der vorigen Aufgabe ab, von welchem Land Paris Hauptstadt ist.

/   Gleichnamige Hauptsstädte

Erstellen Sie aus der Basistabelle »LAND« (der vorvorigen Aufgabe) die folgende Ausgabe, in der alle Länder der Tabelle mit gleichnamiger Hauptstadt vorkommen.

Konsole
+--------------+--------------+
| LAND | HAUPTSTADT |
+--------------+--------------+
| San Marino | San Marino |
| Vatikanstadt | Vatikanstadt |
| Luxemburg | Luxemburg |
| Monaco | Monaco |
+--------------+--------------+

/   View »GLEICHNAMIGE«

Erstellen Sie ein View »GLEICHNAMIGE« mit der Abfrage aus der vorigen Übungsaufgabe.

Reserveaufgaben

/   Interlinguale Homonyme

Skript (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE WOERTER ( DEUTSCH VARCHAR ( 255 ), ENGLISCH VARCHAR ( 255 ));
INSERT INTO WOERTER ( DEUTSCH, ENGLISCH ) VALUES ( 'Apfel', 'apple' );
INSERT INTO WOERTER ( DEUTSCH, ENGLISCH ) VALUES ( 'dissonant', 'dissonant' );
INSERT INTO WOERTER ( DEUTSCH, ENGLISCH ) VALUES ( 'ernennen', 'appoint' );
INSERT INTO WOERTER ( DEUTSCH, ENGLISCH ) VALUES ( 'horizontal', 'horizontal' );
INSERT INTO WOERTER ( DEUTSCH, ENGLISCH ) VALUES ( 'Haus', 'house' );
INSERT INTO WOERTER ( DEUTSCH, ENGLISCH ) VALUES ( 'Kategorie', 'category' );

Die Tabelle »WOERTER« enthält einige Paare von Wörtern mit gleicher Bedeutung.

Konsole
SELECT * FROM WOERTER;
+------------+------------+
| DEUTSCH | ENGLISCH |
+------------+------------+
| Apfel | apple |
| dissonant | dissonant |
| ernennen | appoint |
| horizontal | horizontal |
| Haus | house |
| Kategorie | category |
+------------+------------+
Konsole
SELECT DEUTSCH, ENGLISCH FROM WOERTER;
+------------+------------+
| DEUTSCH | ENGLISCH |
+------------+------------+
| Apfel | apple |
| dissonant | dissonant |
| ernennen | appoint |
| horizontal | horizontal |
| Haus | house |
| Kategorie | category |
+------------+------------+

1.) a) Fragen Sie das englische Wort für „Kategorie“ mit einer Äquiselektion mit Zeichenfolgenliteralen ab. b) Fragen Sie das deutsche Wort für “appoint ” ab.

2.) Erstellen Sie aus der Basistabelle »WOERTER« die folgende Ausgabe, in der alle Wörter der Tabelle mit gleicher Bedeutung und gleicher Schreibweise aufgeführt werden.

Konsole
+------------+------------+
| DEUTSCH | ENGLISCH |
+------------+------------+
| dissonant | dissonant |
| horizontal | horizontal |
+------------+------------+

3.) Erstellen Sie dann ein View »Homonyme« mit dieser Abfrage.

/   Zuordnungen *

Skript (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE SPRACHE ( LAND VARCHAR ( 255 ), BEZEICHNUNG VARCHAR ( 255 ), SPRACHLAND VARCHAR ( 255 ), SPRACHE VARCHAR ( 255 ));
INSERT INTO SPRACHE ( LAND, BEZEICHNUNG, SPRACHLAND, SPRACHE ) VALUES ( '1', 'Italien', '1', 'Italienisch' );
INSERT INTO SPRACHE ( LAND, BEZEICHNUNG, SPRACHLAND, SPRACHE ) VALUES ( '1', 'Italien', '3', 'Norwegisch' );
INSERT INTO SPRACHE ( LAND, BEZEICHNUNG, SPRACHLAND, SPRACHE ) VALUES ( '1', 'Italien', '2', 'Spanisch' );
INSERT INTO SPRACHE ( LAND, BEZEICHNUNG, SPRACHLAND, SPRACHE ) VALUES ( '2', 'Spanien', '1', 'Italienisch' );
INSERT INTO SPRACHE ( LAND, BEZEICHNUNG, SPRACHLAND, SPRACHE ) VALUES ( '2', 'Spanien', '3', 'Norwegisch' );
INSERT INTO SPRACHE ( LAND, BEZEICHNUNG, SPRACHLAND, SPRACHE ) VALUES ( '2', 'Spanien', '2', 'Spanisch' );
INSERT INTO SPRACHE ( LAND, BEZEICHNUNG, SPRACHLAND, SPRACHE ) VALUES ( '3', 'Norwegen', '1', 'Italienisch' );
INSERT INTO SPRACHE ( LAND, BEZEICHNUNG, SPRACHLAND, SPRACHE ) VALUES ( '3', 'Norwegen', '3', 'Norwegisch' );
INSERT INTO SPRACHE ( LAND, BEZEICHNUNG, SPRACHLAND, SPRACHE ) VALUES ( '3', 'Norwegen', '2', 'Spanisch' );

Die Tabelle »Sprache« enthält links Länder mit ihrer Kennzahl (»LAND«) und rechts zu jeder Länderkennzahl (»SPRACHLAND«) die Landessprache.

Um bestimmten Formen der Abfrage zu ermöglichen, wurde dabei zu jeder Kombination aus einem Land und einer Sprache eine Zeile angelegt, auch wenn die Sprache einer Zeile nicht die hauptsächlich in dem Land gesprochene Sprache ist. Die Spalte »SPRACHLAND« gibt aber zu jeder Sprache in der Spalte »SPRACHE« die Kennzahl des Landes an, in dem diese Sprache hauptsächlich gesprochen wird.

Tabellendokumentation
Schema »S«
Tabelle »Sprache«
Felder
»LAND« Kennzahl des Landes in der Spalte »BEZEICHNUNG«.
»BEZEICHNUNG« Name eines Landes.
»SPRACHLAND« Kennzahl des Landes, welches zu der Sprache aus der Spalte »SPRACHE« gehört.
»SPRACHE« Name einer Sprache.
Konsole

SELECT * FROM SPRACHE;

+------+-------------+------------+-------------+
| LAND | BEZEICHNUNG | SPRACHLAND | SPRACHE |
+------+-------------+------------+-------------+
| 1 | Italien | 1 | Italienisch |
| 1 | Italien | 3 | Norwegisch |
| 1 | Italien | 2 | Spanisch |
| 2 | Spanien | 1 | Italienisch |
| 2 | Spanien | 3 | Norwegisch |
| 2 | Spanien | 2 | Spanisch |
| 3 | Norwegen | 1 | Italienisch |
| 3 | Norwegen | 3 | Norwegisch |
| 3 | Norwegen | 2 | Spanisch |
+------+-------------+------------+-------------+

Konsole

SELECT LAND, BEZEICHNUNG, SPRACHLAND, SPRACHE FROM SPRACHE;

+------+-------------+------------+-------------+
| LAND | BEZEICHNUNG | SPRACHLAND | SPRACHE |
+------+-------------+------------+-------------+
| 1 | Italien | 1 | Italienisch |
| 1 | Italien | 3 | Norwegisch |
| 1 | Italien | 2 | Spanisch |
| 2 | Spanien | 1 | Italienisch |
| 2 | Spanien | 3 | Norwegisch |
| 2 | Spanien | 2 | Spanisch |
| 3 | Norwegen | 1 | Italienisch |
| 3 | Norwegen | 3 | Norwegisch |
| 3 | Norwegen | 2 | Spanisch |
+------+-------------+------------+-------------+

1.) Erstellen Sie daraus die folgende Ausgabe, in der zu jeder Sprache jeweils das passende Land angezeigt wird, indem Sie eine Äquiselektion unter Verwendung der Spalte »SPRACHLAND« schreiben.

Konsole
+-------------+-------------+
| SPRACHE | BEZEICHNUNG |
+-------------+-------------+
| Italienisch | Italien |
| Norwegisch | Norwegen |
| Spanisch | Spanien |
+-------------+-------------+

2.) Erstellen Sie einen View »SPRACHLAND« mit der von Ihnen geschrieben Abfrage.

3.) Erstellen Sie eine auf den View »SPRACHLAND« aufbauende Abfrage (mit »FROM SPRACHLAND«), die eine skalare Tabelle ergibt, in der die Sprache steht, die man in Italien spricht (also Italienisch). (Dabei soll in der Abfrage das Wort »Italien« vorkommen, aber nicht »Italienisch« – das soll sich die Abfrage an Hand des Landes selbst aus der Tabelle »SPRACHLAND« heraussuchen.)

Kombination mehrerer  Bedingungen *

Durch Verwendung eines Views können wir auch mehrere  Bedingungen miteinander kombinieren :

Skript (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE MISCHUNG ( FARBE1 VARCHAR ( 255 ), FARBE2 VARCHAR ( 255 ), ERGEBNIS VARCHAR ( 255 ));
INSERT INTO MISCHUNG ( FARBE1, FARBE2, ERGEBNIS ) VALUES ( 'Rot', 'Gelb', 'Orange' );
INSERT INTO MISCHUNG ( FARBE1, FARBE2, ERGEBNIS ) VALUES ( 'Rot', 'Blau', 'Violett' );
INSERT INTO MISCHUNG ( FARBE1, FARBE2, ERGEBNIS ) VALUES ( 'Blau', 'Gelb', 'Gruen' );
Konsole
SELECT * FROM MISCHUNG;
+--------+--------+----------+
| FARBE1 | FARBE2 | ERGEBNIS |
+--------+--------+----------+
| Rot | Gelb | Orange |
| Rot | Blau | Violett |
| Blau | Gelb | Gruen |
+--------+--------+----------+

Zuerst legen wir ein View mit allen Datensätzen an, bei denen die Farbe 1 Rot  ist.

Konsole

CREATE VIEW ROTMISCHUNG AS SELECT * FROM MISCHUNG WHERE FARBE1 = 'Rot';

SELECT * FROM ROTMISCHUNG;

+--------+--------+----------+
| FARBE1 | FARBE2 | ERGEBNIS |
+--------+--------+----------+
| Rot | Gelb | Orange |
| Rot | Blau | Violett |
+--------+--------+----------+

Aus dem im vorigen Schritt aufgebauten View können wir dann alle Datensätze auswählen, bei denen die Farbe 2 Blau  ist.

So erhalten wir aus der Tabelle Violett als Mischfarbe von Rot und Blau.

Konsole
SELECT * FROM ROTMISCHUNG WHERE FARBE2 = 'Blau';
+--------+--------+----------+
| FARBE1 | FARBE2 | ERGEBNIS |
+--------+--------+----------+
| Rot | Blau | Violett |
+--------+--------+----------+
Konsole
SELECT ERGEBNIS FROM ROTMISCHUNG WHERE FARBE2 = 'Blau';
+----------+
| ERGEBNIS |
+----------+
| Violett |
+----------+

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 stefanram722408 stefan_ram:722408 Selektion in SQL (MySQL) Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722408, slrprddef722408, 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/selektion_sql_de