====== Einfache Select-Anweisungen ======
In den vorhergehenden Kapiteln haben wir Tabellen erstellt und mit Daten befüllt. Jetzt lernen wir, wie wir "Fragen" über eine Tabelle an die Datenbank stellen können. Dazu dient die **Select**-Anweisung.
Die **Select-Anweisung** ist folgendermaßen aufgebaut:
select spalte1, spalte2, ... from tabelle
where Bedingung
''Bedingung'' ist dabei eine Aussage, d.h. ein Term, dessen Wert ''true'' oder ''false'' ist.
Probiere die folgenden Anweisungen in der nachfolgenden **Terra-Datenbank** aus:
select name from fluss;
select name, laenge from fluss;
select name, laenge from fluss
where meer = 'Nordsee'
===== Aufgabe 1 =====
Erstelle je eine select-Anweisung, die mit Hilfe der Terra-Datenbank die folgenden Fragen beantwortet:
* a) Welche Flüsse (Name, Meer, Laenge) sind länger als 1000 km?
* b) Welche Länder haben weniger als 10 Millionen Einwohner? \\ //Tipp: Versuche erst einmal herauszufinden, welche Einheit die Werte in der Spalte ''Einwohner'' haben.//
* c) Welche Länder (Name, Einwohner) liegen in Europa?
====== Zeichenketten-Vergleiche mit Wildcards ======
Oft möchte man beispielsweise eine Ergebnistabelle mit allen Städten, deren Name mit dem Zeichen ''A'' beginnt. Dies kann man erreichen, indem man **nicht den Operator =**, sondern den Operator **like** zum Vergleich zweier Zeichenketten verwendet. Dann gibt es nämlich zwei **Wildcards** genannte Spezialzeichen:
* Das Zeichen ''%'' steht für **beliebig viele** (d.h. eventuell auch 0) **beliebige** Zeichen.
* Das Zeichen ''_'' steht für **genau ein beliebiges** Zeichen.
**Beispiel 1:** Alle Städte, deren Name mit dem Zeichen ''A'' beginnt:
select name from ort
where name like 'A%';
**Beispiel 2:** Alle Flüsse, deren zweiter Buchstabe ein ''o'' ist:
select name from fluss
where name like '_o%';
===== Aufgabe 2: =====
Erstelle select-Anweisungen, die die folgenden Fragen beantworten:
* a) Welche Städte (Name, Einwohnerzahl) haben Namen, die auf ''stadt'' enden?
* b) Welche Flüsse (Name, Laenge) haben Namen, deren vorletzter Buchstabe ein ''a'' ist?
====== Verknüpfung von Bedingungen ======
Mit den Operatoren **and** und **or** kann man Bedingungen verknüpfen, mit dem Operator **not** kann man eine Bedingung negieren:
* Bedingung1 **and** Bedingung2 \\ ... hat genau dann den Wert **true**, wenn **sowohl** Bedingung1 **als auch** Bedingung2 den Wert **true** hat.
* Bedingung1 **or** Bedingung2 \\ ... hat genau dann den Wert **true**, wenn **mindestens eine** der beiden Bedingungen den Wert **true** hat.
* **not** Bedingung1 \\ ... hat genau dann den Wert **true**, wenn Bedingung1 den Wert **false** hat.
**Beispiele:**
a) Alle Flüsse, die länger als 100 km sind und deren Name mit ''D'' beginnt:
select name from fluss
where laenge > 100 and name like 'D%';
b) Alle Flüsse, deren Name mit ''P'' der ''D'' beginnt:
select name from fluss
where name like 'P%' or name like 'D%';
c) Alle flüsse, deren Name **nicht** mit ''D'' beginnt:
select name from fluss
where not name like 'D%';
===== Aufgabe 3 =====
Erstelle ''select''-Anweisungen, die die folgenden Fragen beantworten:
* a) Welche Städte, deren Name mit ''I'' beginnt, haben mehr als 100000 Einwohner?
* b) Welche Flüsse haben einen Namen, der mit ''u'' oder ''r'' endet?
* c) Welche Kontinente haben einen Namen, der **nicht** auf ''a'' endet?