Video-Tutorial

Wenn Sie das Video nur anschauen, werden Sie kaum etwas lernen. Arbeiten Sie für den besten Lerneffekt am Rechner direkt mit und vollziehen Sie die Beispiele nach.

Folien



(letzte Synchronisation der PDF-Präsentation: 19.03.2018)

Falls keine PDF-Präsentation zu sehen ist, klicken Sie zum Download hier: Direktdownload PDF-Präsentation

Download Filmdatenbank zum Video: filmeDatenbank.sql

Datenbankabfragen werden mit SELECT ausgeführt.

Alle Datensätze anzeigen

MySQL-Code
  SELECT * FROM tabellenname  

zeigt alle Datensätze der Tabelle tabellenname an.

Einzelne Felder aller Datensätze anzeigen

MySQL-Code
  SELECT kunde_name FROM tabellenname  

zeigt alle Felder kunde_name aller Datensätze der Tabelle tabellenname an.

MySQL-Code
  SELECT kunde_name, kunde_vorname FROM tabellenname  

zeigt alle Felder kunde_name und kunde_vorname aller Datensätze der Tabelle tabellenname an.

Einschränkungen mit WHERE

MySQL-Code
  SELECT kunde_name, kunde_vorname FROM tabellenname WHERE kunde_ort='Hamburg'  

Schränkt die Ausgabe auf alle Kunden aus Hamburg ein. Groß- und Kleinschreibung ist hier nicht relevant (Hamburg, hamburg).

Platzhalter mit LIKE %

MySQL-Code
  SELECT * FROM tabellenname WHERE kundeOrt LIKE '%freiburg%'  

findet die Orte “Ostfreiburg”, “Freiburg West” und “Freiburg-Süd”. Die Prozentzeichen sind Platzhalter für eine beliebige (oder keine) Zeichenfolge.

Verknüpfung von Abfragen mit OR und AND

MySQL-Code
  SELECT * FROM tabellenname WHERE kunde_ort=freiburg' AND kunde_name='müller'   SELECT * FROM tabellenname WHERE kunde_name='mayer' OR kunde_name='maier' OR kunde_name='meyer' OR kunde_name='meier'

Ausgabe sortieren mit ORDER BY

MySQL-Code
  SELECT * FROM tabellenname ORDER BY kunde_id  

sortiert nach Kunde-ID aufsteigend (bei Text: alphabetisch aufsteigend).

MySQL-Code
  SELECT * FROM tabellenname ORDER BY kunde_ort, kunde_name  

sortiert nach Ort und dann nach Name (d.h. innerhalb eines Ortes nach Name, alphabetisch aufsteigend).

Um nicht aufsteigend, sondern absteigend zu sortieren, hängt man ein DESC an:

MySQL-Code
  SELECT * FROM tabellenname ORDER BY kunde_name DESC  

Übungen

Alle Übungen finden Sie in der Materialsammlung (dort auch alle zusätzlichen Dateien wie Bilder, Klassendiagramme oder HTML-Vorlagen!).

Die aktuelle Übung können Sie hier als txt-File herunterladen.


***** Übungen: MySQL - SELECT *****

MySQL05_1: Einfache SELECT-Befehle zur Mondial-Datenbank (es wird nur eine Tabelle abgefragt)

Achtung: lake = "See", sea = "Meer"
a
1 Geben Sie alle Flüsse aus, geordnet alphabetisch absteigend.
2 Lassen Sie sich alle Flüsse ausgeben, die kürzer als 100km sind.
3 Welche Flüsse sind länger als 4000km? Geben Sie die längsten zuerst aus.
4 Wie viele Salzwasserseen, die mit einem L anfangen, gibt es?
5 Wie viele Süßwasserseen gibt es? (Achtung: Wenn Sie auf NULL einschränken, müssen Sie mit IS arbeiten: ... WHERE Type IS NULL)
6 Welcher See ist am tiefsten?
7 Wie groß ist der Dead Sea?
8 Sortieren sie die Berge nach ihrer Höhe, die höchsten zuerst.
9 Lassen Sie sich die Daten der Länder Dänemark und Deutschland ausgeben.
10 Wie heißt die Hauptstadt von El Salvador?
11 Lassen sie sich alle Länder anzeigen, die mit dem Buchstaben A oder Z beginnen, größer als 200000km² sind und mehr als 5000.000 Einwohner haben.
[Tipp: Arbeiten Sie mit Klammern - Sie brauchen ein Land, das (mit Buchstaben A oder Z beginnt) und ... usw.




MySQL05_2: Übungen zu SELECT ("Filme")

Benutzen Sie für diese Übung die MySQL-Daten unter den Aufgabenstellungen.

1. Lassen Sie sich mit SELECT alle Datensätze Ihrer DVD-Sammlung ausgeben.
2. Erstellen Sie eine Anweisung, die alle Filmtitel und die jeweils zugehörige Nummer ausgibt.
3. Erstellen Sie eine Anweisung, die alle Filmtitel und den jeweils zugehörigen Regisseur ausgibt.
4. Erstellen Sie eine Liste mit allen Filmen von Quentin Tarantino.
5. Erstellen Sie eine Liste mit allen Filmen von Steven Spielberg.
6. Erstellen Sie eine Liste aller Filme, in denen der Regisseur den Vornamen "Steven" hat.
7. Erstellen Sie eine Liste mit allen Filmen, die länger als 2 Stunden sind.
8. Erstellen Sie eine Liste mit allen Filmen, die von Tarantino oder von Spielberg gedreht wurden.
9. Suchen Sie alle Filme heraus, die von Tarantino gedreht wurden und kürzer als 90 Minuten sind.
10. Sie erinnern sich an einen Film, in dessen Titel "Sibirien" vorkam. Suchen Sie ihn.
11. Lassen Sie sich alle Teile von "Das große Rennen" ausgeben.
12. Lassen Sie sich eine Liste aller Filme ausgeben, sortiert nach Regisseur.
13. Lassen Sie sich eine Liste aller Filme ausgeben, sortiert nach Regisseur, dann nach Filmtitel.
14. Lassen Sie sich eine Liste aller Filme von Tarantino ausgeben, die längsten zuerst.


Es folgt der Code für die Tabelle; den Dump können Sie hier herunterladen: 07mysql/_dumps/filmeDatenbank.sql

MySQL-Code
-- ab hier kopieren: -- -- Tabellenstruktur für Tabelle dvd_sammlung -- DROP SCHEMA IF EXISTS filmeDatenbank; CREATE SCHEMA filmeDatenbank; USE filmeDatenbank; CREATE TABLE dvd_sammlung ( id int(11) NOT NULL auto_increment, film varchar(255) NOT NULL, nummer int(11) NOT NULL, laenge_minuten int(11) NOT NULL, regisseur varchar(255) NOT NULL, PRIMARY KEY (id), UNIQUE KEY nummer (nummer) );   -- -- Daten für Tabelle dvd_sammlung --   INSERT INTO dvd_sammlung VALUES(1, 'Meine Großmutter lacht nie', 1, 119, 'Quentin Tarantino'); INSERT INTO dvd_sammlung VALUES(2, 'Angst', 2, 92, 'Steven Spielberg'); INSERT INTO dvd_sammlung VALUES(3, 'Wenn ich nur könnte', 3, 89, 'Quentin Tarantino'); INSERT INTO dvd_sammlung VALUES(4, 'Men and Mice', 4, 88, 'Cohen'); INSERT INTO dvd_sammlung VALUES(6, 'Grün ist die Farbe der Liebe', 5, 201, 'Quentin Tarantino'); INSERT INTO dvd_sammlung VALUES(7, 'Frühstück in Sibirien', 6, 72, 'Steven Spielberg'); INSERT INTO dvd_sammlung VALUES(8, 'Das große Rennen', 8, 83, 'Cohen'); INSERT INTO dvd_sammlung VALUES(9, 'Das große Rennen, Teil 2', 9, 85, 'Cohen'); INSERT INTO dvd_sammlung VALUES(10, 'Adlatus', 7, 131, 'Quentin Tarantino'); INSERT INTO dvd_sammlung VALUES(11, 'Angriff auf Rom', 10, 138, 'Steven Burghofer');   -- bis hier kopieren    




MySQL05_3: Übungen zu SELECT, UPDATE, INSERT ("Lagerverwaltung")

Benutzen Sie für diese Übung die MySQL-Daten unter den Aufgabenstellungen.



*** INSERT ***
(Sie müssen in der Lage sein, sowohl die Langform als auch die Kurzform zu verwenden!)
A) Fügen Sie einen Datensatz mit folgenden Daten ein: Sonnenbrille, Regal 3, Einkaufspreis 3.14, Verkaufspreis 6.49, Anzahl 100, Lieferant 23.
B) Fügen Sie einen Datensatz mit folgenden Daten ein: Gletscherbrille, Regal 8, Einkaufspreis 12.16, Verkaufspreis 16.99, Anzahl 20, Lieferant 23.
C) Fügen Sie einen Datensatz mit folgenden Daten ein: Lesebrille, Regal 8, Einkaufspreis 21.46, Verkaufspreis 32.99, Anzahl 25, Lieferant 22.
D) Fügen Sie einen Datensatz mit folgenden Daten ein (Langform verwenden!): Fußmatte, Anzahl 18.
E) Fügen Sie einen Datensatz mit folgenden Daten ein (Langform verwenden!): Rutschschutz für Badewanne, Anzahl 20.
F) Fügen Sie einen Datensatz mit folgenden Daten ein (Langform verwenden!): Seifenhalter, Anzahl 30.
G) Fügen Sie einen neuen Datensatz in die Tabelle "lagerbestand" ein mit folgendem Inhalt: Perücke, Einkaufspreis = 16.45, Verkaufspreis = 25.99, Anzahl = 100, Lieferant Nr. 19
H) Fügen Sie einen neuen Datensatz ein mit folgendem Inhalt: Mütze, lieferant_id 12

*** UPDATE ***
A) Vom Hut "English Lord" wurden 3 Stück verkauft. Die neue Anzahl beträgt 21.
B) Vom Regenschirm "Elephant" wurden 2 Stück verkauft. Die neue Anzahl beträgt 11.
C) Vom Snowboard "Highspeed" wurden 2 Stück verkauft. Die neue Anzahl beträgt 7.
D) Alle Artikel aus Regal Nummer 17 werden ab sofort in Regal 16 aufbewahrt.
E) Alle Artikel, deren Verkaufspreis mehr als 80 Euro beträgt, kommen ins Regal Nummer 17.
F) Alle Artikel, deren Verkaufspreis weniger als 20 Euro beträgt, kommen ins Regal Nummer 14.
G) Setzen Sie die Anzahl der Jacken auf 100.
H) Setzen Sie die Anzahl der Perücken auf 8.
I) Die Regenschirme liegen in Regal Nummer 16.
J) Ein Hut wurde verkauft; ändern Sie die Anzahl entsprechend. (Achtung: Wenn Sie den Befehl ein weiteres Mal ausführen, muss die Anzahl weiter reduziert werden. Versuchen Sie etwas wie anzahl = anzahl-1).


*** SELECT ***
A) Zeigen Sie alle Artikel an, die in Regal Nummer 2 liegen.
B) Schnäppchenalarm! Zeigen Sie alle Artikel an, deren Verkaufspreis unter 80 Euro liegt.
C) Zeigen Sie alle Artikel an, die in Regal 2 liegen (nach Name aufsteigend sortiert).
D) Zeigen Sie den Namen aller Artikel an, deren Einkaufspreis mehr als 50 Euro beträgt (nach Einkaufspreis absteigend sortieren).
E) Erzeugen Sie eine Liste aller Armbanduhren (nur Artikelname und Verkaufspreis anzeigen).
F) Erzeugen Sie eine Liste aller Armbanduhren, sortiert nach Preis (absteigend) (nur Artikelname und Verkaufspreis anzeigen).
G) Erzeugen Sie eine Liste aller Armbanduhren, deren Verkaufspreis mehr als 130 Euro beträgt (nur Artikelname und Verkaufspreis anzeigen).
H) Erzeugen Sie eine Liste aller Armbanduhren, deren Preis weniger als 250 Euro beträgt und die vom Lieferanten mit der Nummer 5 geliefert werden (nur Artikelname und Verkaufspreis anzeigen).

Es folgt der Code für die Tabelle; den Dump können Sie auch hier herunterladen: 07mysql/_dumps/warenlager.sql


MySQL-Code
  -- ab hier kopieren: drop schema if exists warenlager; create schema warenlager; use warenlager;   -- MySQL dump 10.13 Distrib 5.6.24, for osx10.8 (x86_64) -- -- Host: 127.0.0.1 Database: warenlager -- ------------------------------------------------------ -- Server version 5.5.38   /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;   -- -- Table structure for table `lagerbestand` --   DROP TABLE IF EXISTS `lagerbestand`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `lagerbestand` ( `id` int(11) NOT NULL AUTO_INCREMENT, `artikelname` varchar(255) NOT NULL, `regal_nr` int(11) DEFAULT NULL, `einkaufspreis` float DEFAULT NULL, `verkaufspreis` float DEFAULT NULL, `anzahl` int(11) NOT NULL, `lieferant_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */;   -- -- Dumping data for table `lagerbestand` --   LOCK TABLES `lagerbestand` WRITE; /*!40000 ALTER TABLE `lagerbestand` DISABLE KEYS */; INSERT INTO `lagerbestand` VALUES (1,'Hut \"English Lord\"',13,26.41,39.99,24,8),(2,'Regenschirm \"Elephant\"',2,29.12,45.99,13,12),(3,'Regenschirm \"Alonso\"',2,14.58,19.99,17,12),(4,'Jacke \"Outdoor\"',5,58.17,84.95,4,2),(5,'Zelt',19,142.25,199.99,2,7),(6,'Wanderschuhe',5,32.56,69.99,4,9),(7,'Trekkingschuhe',5,31.22,45.99,1,9),(8,'Regenschirm \"Kid\"',2,8.21,12.99,15,3),(9,'Handschuhe \"Leather Master\"',6,19.23,28.99,26,3),(10,'Snowboard \"Highspeed\"',16,48.67,65.99,9,2),(11,'Snowboard \"Lowrider\"',17,35.24,49.99,1,2),(12,'Armbanduhr \"Pilot\"',15,84.51,129.99,5,5),(13,'Armbanduhr \"Pilot II\"',15,99.02,149.99,2,5),(14,'Armbanduhr \"Safari\"',16,140,219.95,4,4),(15,'Armbanduhr \"Boticelli\"',16,202.24,299.95,1,3); /*!40000 ALTER TABLE `lagerbestand` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;   /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;   -- Dump completed on 2015-11-28 18:01:22 -- bis hier kopieren    




MySQL05_4: Übung zu allen Befehlen - Dönerladen

Benutzen Sie für diese Übung die MySQL-Daten unter den Aufgabenstellungen.

*** SELECT-Befehle ***

1. Lassen Sie sich alle Produkte ausgeben.
2. Lassen Sie sich alle Produkte ausgeben, sortiert nach Preis.
3. Lassen Sie sich alle Produkte ausgeben, die mehr als 3 Euro kosten, sortiert absteigend (!) nach Preis.
4. Lassen Sie sich von allen Produkten den Namen und den Preis ausgeben, nicht aber die Beschreibung.
5. Lassen Sie sich alle Produkte ausgeben, die in der Beschreibung das Wort "gesund" enthalten.
6. Lassen Sie sich alle Produkte ausgeben, die in der Beschreibung das Wort "Pizza" enthalten.
7. Lassen Sie sich alle Produkte ausgeben, die in der Beschreibung oder im Namen das Wort "Pizza" enthalten.
8. Wir müssen die Extreme ausmerzen. Lassen Sie sich alle Produkte anzeigen, die weniger als 20 Cent oder mehr als 6 Euro kosten.
9. Lassen Sie sich alle Gerichte anzeigen, die zum Mitnehmen sind.
10. Lassen Sie sich alle Gerichte und Saucen ausgeben, die zum Mitnehmen sind, sortiert aufsteigend nach typ.
11. Lassen Sie sich alle Salate ausgeben, die zum Mitnehmen sind, sortiert nach Preis aufsteigend.
12. Lassen Sie sich alle Mineralwasser ausgeben.
13. Lassen Sie sich alle Getränke ausgeben, die in der Beschreibung die Zeichenkette "wasser" enthalten.

*** UPDATE-Befehle ***
1. Die Zeiten sind hart, wir müssen die Preise erhöhen. Erhöhen Sie alle Preise, die einen Euro oder weniger betragen, auf 1.50 Euro.
2. Fleisch wird immer billiger. Das Döner kostet nur noch 10 Cent.
3. Wir haben ein Problem mit den Lieferanten! Man untersagt uns gerichtlich, in unseren Beschreibungen über den Gesundheitsgrad unserer Artikel Aussagen zu treffen. Ändern Sie alle Beschreibungen, in denen etwas über den Gesundheitsgrad steht, in "Keine Beschreibung verfügbar."

*** INSERT-Befehle ***
1. Wir haben ein neues Gericht im Angebot. Fügen Sie den Milchreis ein (Verkaufspreis 1.20 Euro, keine Beschreibung).
2. Endlich haben wir auch eine Cola-Lizenz. Fügen Sie einen Datensatz für "Cola" ein, 1.30 Euro, Beschreibung: "Ein zuckersüßes, ungesundes Getränk. Achtung: Enthält Coffein!"

Es folgt der Code für die Tabelle; den Dump können Sie auch hier herunterladen: 07mysql/_dumps/doenerimbiss.sql


MySQL-Code
-- ab hier kopieren: drop database if exists doenerimbiss; CREATE DATABASE `doenerimbiss` /*!40100 DEFAULT CHARACTER SET latin1 */; USE `doenerimbiss`; -- MySQL dump 10.13 Distrib 5.6.24, for osx10.8 (x86_64) -- -- Host: 127.0.0.1 Database: doenerimbiss -- ------------------------------------------------------ -- Server version 5.5.38   /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;   -- -- Table structure for table `produkte` --   DROP TABLE IF EXISTS `produkte`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `produkte` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(200) NOT NULL, `preis` float NOT NULL, `beschreibung` varchar(900) NOT NULL, `zumMitnehmen` varchar(45) DEFAULT 'ja', `typ` varchar(45) NOT NULL DEFAULT 'Gericht', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */;   -- -- Dumping data for table `produkte` --   LOCK TABLES `produkte` WRITE; /*!40000 ALTER TABLE `produkte` DISABLE KEYS */; INSERT INTO `produkte` VALUES (1,'Lahmacun',3.5,'Ein gesundes Gericht, das wie eine Pizza ist.','ja','Gericht'),(2,'Döner Kebap',5,'Ein gesundes Gericht mit Fleisch und Tomaten.','ja','Gericht'),(3,'Orangensaft',1,'Orangensaft ist ziemlich ungesunde, schmeckt aber lecker.','ja','Getränk'),(4,'Pide',1.45,'Manche finden, dass Pide wie Pizza schmeckt. Stimmt aber nicht.','ja','Gericht'),(5,'Pizza',8,'Eines unserer beliebten Gerichte. Gesund und bekömmlich.','ja','Gericht'),(6,'Mineralwasser',0.5,'Mineralwasser passt prima zu Pizza!','ja','Getränk'),(7,'Frühlingssalat',2.5,'Ein grüner, knackiger und gesunder Salat.','ja','Gericht'),(8,'Grüner Salat',2,'Frischer Kopfsalat vom Biobauern.','nein','Gericht'),(9,'Pommes Frites (klein)',1.5,'Aus garantiert gentechnikfreien Kartoffeln. Kleine Schale.','ja','Gericht'),(10,'Pommes Frites (groß)',2.25,'Aus garantiert gentechnikfreien Kartoffeln. Große Schale','ja','Gericht'),(11,'Portion Ketchup',0.1,'','nein','Sauce'),(12,'Portion Mayo',0.1,'','nein','Sauce'),(13,'Salatbeilage',1,'Nur bei Bestellung eines Hauptgerichts','ja','Gericht'),(14,'Chefsalat',2.9,'Üppiger Salat mit Radieschen, Zwiebelringen und Käse','ja','Gericht'),(15,'Mineralwasser (still)',0.5,'Schwarzwaldwasser ohne Kohlensäure','ja','Getränk'); /*!40000 ALTER TABLE `produkte` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;   /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;   -- Dump completed on 2016-03-17 22:49:16 -- bis hier kopieren