Lektion 1 | Die Grundlagen

Wofür steht SQL?

SQL ist die Abkürzung für "Structured Query Language". Mithilfe dieser strukturierten Sprache kann man Datenbanken erzeugen, auslesen und manipulieren.

Die Hauptbefehle

Jede SELECT-Abfrage enthält mindestens zwei Hauptbefehle: SELECT (engl.: wähle) & FROM (engl.: aus/von). Mit SELECT wählst Du die Spalten aus, auf die projiziert werden soll, dh. mit denen Du arbeiten möchtest, während Du mit FROM die Tabelle(n) bestimmst, die die vorher gewählten Spalten enthält.

Ein Beispiel:

Wir lassen uns alle Spalten der Tabelle "customer" ausgeben:

SELECT * FROM customer;

Ergebnis (Ausschnitt):

store_id

first_name

last_name

1

MARY

SMITH

1

PATRICIA

JOHNSON

1

LINDA

WILLIAMS

1

ELIZABETH

BROWN

1

MARIA

MILLER

1

DOROTHY

TAYLOR

1

NANCY

THOMAS

1

HELEN

HARRIS

1

DONNA

THOMPSON

Achtung:

Bei Namen von Datenbanken, Tabellen und Spalten musst Du unbedingt auf die Groß- & Kleinschreibung achten!

Wenn Du in einer Abfrage einen Wert verwendest, der nicht nur aus Zahlen besteht, so musst Du ihn in Anführungszeichen setzten.

SELECT * FROM customer
	WHERE first_name = "Mary";
SELECT * FROM customer
	WHERE store_id = 10;

Die Vergleichsoperatoren

Eine standartmäßige SELECT-Abfrage besteht aus drei Teilen: SELECT {Attribut} FROM {Tabelle} WHERE {Bedingung}. In der WHERE-Klausel kann man mit den Operatoren kleiner, kleiner gleich, gleich, ungleich, größer gleich und größer (<, <=, =, <>, >= und >) Vergleichsbedingungen formulieren.

Ein Beispiel:

Wir suchen nach den vollen Namen der Kunden, deren Kunden ID kleiner gleich 5 ist.

SELECT customer_id, first_name, last_name
	FROM customer
	WHERE customer_id <= 5;

Ergebnis (Ausschnitt):

customer_id

first_name

last_name

1

MARY

SMITH

2

PATRICIA

JOHNSON

3

LINDA

WILLIAMS

4

BARBARA

JONES

5

ELIZABETH

BROWN

Logische Operatoren

In der WHERE-Klausel kann man mit den Operatoren AND, OR und NOT logische Bedingungen formulieren.

Ein Beispiel:

Der volle Name der Kunden aus Laden 2 soll ausgegeben werden, deren Kunden ID kleiner 10 ist.

SELECT customer_id, store_id, first_name, last_name
	FROM customer
	WHERE store_id = 2
	AND customer_id < 10;

Ergebnis:

customer_id

store_id

first_name

last_name

4

2

BARBARA

JONES

6

2

JENNIFER

DAVIS

8

2

SUSAN

WILSON

9

2

MARGARET

MOORE

Der BETWEEN-Operator

Nun wollen wir herausfinden, wie die Personen heißen, deren KundenID zwischen 5 und 10 liegt. In der WHERE-Klausel "customer_id >= 5 AND <= 10" zu benutzen, um einen Bereichsvergleich durchzuführen, wird nicht funktionieren, da der Vergleichspartner fehlt. Daher verwendet man hierfür den BETWEEN-Operator.

Ein Beispiel:

Wir wollen den vollen Namen der Kunden, deren Kunden ID zwischen 55 und 60 liegt, wissen.

SELECT customer_id, first_name, last_name
	FROM customer
	WHERE customer_id BETWEEN 55 AND 60;

Ergebnis:

customer_id

first_name

last_name

55

DORIS

REED

56

GLORIA

COOK

57

EVELYN

MORGAN

58

JEAN

BELL

59

CHERYL

MURPHY

60

MILDRED

BAILEY

Der LIKE-Operator

Den LIKE-Operator benutzt Du als Muster für String-Vergleiche. Hierbei steht das Prozentzeichen (%) für eine beliebige Folge von Zeichen, während der Unterstrich (_) für ein einziges beliebiges Zeichen steht.

Den LIKE-Operator kann man ebenfalls mit NOT zusammen verwenden: WHERE "a" NOT LIKE "%b%".

Ein Beispiel:

Wir wollen den vollen Namen aller Kunden ausgeben, deren Nachname "Ray" enthält.

SELECT first_name, last_name
	FROM customer
	WHERE last_name LIKE "%Ray%";

Ergebnis:

first_name

last_name

JUDY

GRAY

THELMA

MURRAY

AUDREY

RAY

Der IN-Operator

Wenn man eine Reihe von Kriterien hat, die der gesuchte Datensatz erfüllen muss, so nutzt man den IN-Operator.

Diesen kann man auch in Verbindung mit NOT benutzen: WHERE "a" NOT IN "b".

Ein Beispiel:

Wir möchten uns die KundenID und den Vornamen von den Kunden "Coy", "Spear" und "Gamez" anschauen.

SELECT customer_id, first_name, last_name
	FROM customer
	WHERE last_name IN ("COY", "SPEAR", "GAMEZ");

Ergebnis (Ausschnitt):

customer_id

first_name

last_name

324

GARY

COY

328

JEFFREY

SPEAR

391

CLARENCE

GAMEZ

Der IS-Operator (NULL)

Sollte ein Wert einer Tabelle noch unbekannt sein, nutzt Du den NULL-Wert als Platzhalter.

Ein Zusammenspiel aus dem IS-Operator und dem NULL-Ausdruck ermöglicht es Dir NULL-Werte zu finden. Auch kannst Du diesen Operator in einer Kombination mit NOT verwenden: WHERE "a" IS NOT "b".

Ein Beispiel:

Wir wollen wissen, welche Inventare von welchen Kunden kein Rückgabedatum haben.

SELECT inventory_id, customer_id, return_date
	FROM rental
	WHERE return_date IS NULL;

Ergebnis (Ausschnitt):

inventory_id

customer_id

return_date

2145

80

NULL

387

60

NULL

1132

114

NULL

857

438

NULL

177

317

NULL

Der DISTINCT-Operator

Der DISTINCT-Operator sorgt dafür, dass Einträge der Ergebnistabelle nur einmal vorkommen, und schneidet somit alle mehrfach vorkommenden Werte weg.

Ein Beispiel:

Wir wollen wissen, welche Filmkategorien es gibt.

SELECT DISTINCT category_id
	FROM film_category;

Ergebnis (Ausschnitt):

Mit DISTINCT

category_id

6

11

8

9

5

15

Ohne DISTINCT

category_id

6

11

6

11

8

9

Einfache Berechnungen & der AS-Operator

Mit den Grundrechenarten (+, -, *, /) kannst Du in der SELECT-Klausel Berechnungen durchführen.

Der AS-Operator gibt Dir die Möglichkeit, Spalten einen individuellen Namen zu geben. Dies verändert den Namen der Spalte jedoch nicht in der Datenbank, sondern lässt MySQL Dir bei der Ergebnisausgabe die Spalte mit dem von Dir gewählten Namen anzeigen.

Ein Beispiel:

Wir möchten erfahren, wie hoch die Kosten sind, wenn man den Film "Desire Alien" dreimal ausleiht.

SELECT title, rental_rate, rental_rate * 3 AS Kosten
	FROM film
	WHERE title = "DESIRE ALIEN";

Ergebnis:

title

rental_rate

Kosten

DESIRE ALIEN

2.99

8.97

ORDER BY

Wenn Du die ausgegebenen Daten sortiert angezeigt haben möchtest, nutzte den Operator ORDER BY. Hierbei werden Zahlen der Größe nach und alle anderen Zeichen der alphabetischen Reihenfolge nach sortiert.

Zusätzlich kannst Du noch die Attribute ASC (engl. ascending = aufsteigend) und DESC (engl. descending = absteigend) in Deiner Abfrage verwenden.

Benutzt Du ORDER BY "a" DESC, so werden die Daten in absteigender Reihenfolge, mit ORDER BY "a" ASC in aufsteigender Reihenfolge sortiert. Das standardmäßige Attribut ist ASC, dh. beim Benutzen von ORDER BY "a" ohne Zusatz, werden die Daten aufsteigend sortiert.

Ein Beispiel:

Wir wollen alle Filme, ihren Ersatzkosten nach, absteigend sortiert ausgeben.

SELECT title, replacement_cost
	FROM film
	ORDER BY replacement_cost DESC;

Ergebnis (Ausschnitt):

title

replacement_cost

ARABIA DOGMA

29.99

...

...

AIRPLANE SIERRA

28.99

...

...

ALTER VICTORY

27.99

...

...

AFFAIR PREJUDICE

26.99

Tipp:

Auf unser Beispiel bezogen, lassen wir uns nun den Titel absteigend und die Ersatzkosten aufsteigend ausgeben:

SELECT title, replacement_cost
	FROM film
	ORDER BY 1 DESC, 2 ASC;

Der LIMIT-Operator

Mit dem LIMIT-Operator kannst Du die Zahl der ausgegebenen Datensätze beschränken. Vergiss aber nicht, dem Operator einen oder sogar zwei nummerische Parameter zu übergeben.

Ein Beispiel:

Wir wollen uns die letzten 3 Filme der Top 5 Filme mit den höchsten Ersatzkosten ausgeben lassen.

SELECT title, replacement_cost
	FROM film
	ORDER BY replacement_cost DESC
	LIMIT 2, 3;

Ergebnis:

title

replacement_cost

BLINDNESS GUN

29.99

BONNIE HOLOCAUST

29.99

CHARIOTS CONSPIRACY

29.99