SQL Skript

Seite 7

Hier bleibt alle sql skript



					
				-- DDL

			DROP DATABASE IF EXISTS `videothek`;

			CREATE DATABASE IF NOT EXISTS `videothek` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

			USE videothek;

			CREATE TABLE `filmen` (
			  `id` int(11) NOT NULL AUTO_INCREMENT,
			  `titel` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
			  `jahr` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
			  
			  `laenge` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
			  `genres` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
			  `regisseure` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,

			  `schauspieler` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
			  `plot` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
			  `sprache` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
			  `laender` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
			  
			  `plakat_url|` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
			 
			  `imdbID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
			  
			  PRIMARY KEY (id)
			  
			) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


			-- arme INT


			-- Tabelle fuer regiessuer

			CREATE TABLE `regisseur` (
			  id int(11) NOT NULL AUTO_INCREMENT,
			  name varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
			  PRIMARY KEY (id)
			) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

			-- Tabelle fuer regisseur_filme beziehung. Das heißt, ein regiessuer kann viele filme realisieren

			CREATE TABLE `regisseur_filme` (
			  `id` int(11) NOT NULL AUTO_INCREMENT,
			  `director_id` int(11) NOT NULL,
			  `movie_id` int(11) NOT NULL,
			  PRIMARY KEY (id)
			) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

			-- Tabelle fuer genres

			CREATE TABLE `genres` (
				id INT(11) NOT NULL AUTO_INCREMENT,
				genre varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, -- mann muss das wechseln 
				PRIMARY KEY (id)
			) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


			-- Tabelle fuer filme_genre beziehung. Das heißt, ein genre kann an viele filmen angeschaltet sein

			CREATE TABLE `filme_genre` (
				id INT(11) NOT NULL AUTO_INCREMENT,
				filme_id INT(11) NOT NULL,
				genre_id INT(11) NOT NULL,
				PRIMARY KEY (id)
			) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

			-- Tabelle fuer schauspieler

			CREATE TABLE `schauspieler` (
				id INT(11) NOT NULL,
				`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
				PRIMARY KEY (id)
			) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


			-- Tabelle fuer filme_schauspieler beziehung. Das heißt, ein schauspieler kann an viele filmen schauspielern. Normalweise, ein filme hat viele schauspieler.

			CREATE TABLE `filme_schauspieler` (
				id INT(11) NOT NULL AUTO_INCREMENT,
				filme_id INT(11) NOT NULL,
				schauspieler_id INT(11) NOT NULL,
				PRIMARY KEY (id)
			) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


			-- Tabelle fuer scheibe. Das heißt, ein scheibe hat nur ein filme. Aber, ein filme kann zwei oder mehr scheibe haben.

			CREATE TABLE `scheibe` (
				id INT(11) NOT NULL AUTO_INCREMENT,
				disc_type VARCHAR(10) COLLATE utf8_unicode_ci DEFAULT NULL,
				disc_size VARCHAR(10) COLLATE utf8_unicode_ci DEFAULT NULL,
				permanence VARCHAR(10) COLLATE utf8_unicode_ci DEFAULT NULL,
				rent_status VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL, -- mann muss das wechseln
				days_rented INT(2),	
				filme_id INT(11) NOT NULL,
				PRIMARY KEY (id)
			) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



			-- Tabelle fuer kunde

			CREATE TABLE `kunde` (
				id INT(11) NOT NULL AUTO_INCREMENT,
				first_name VARCHAR(30) COLLATE utf8_unicode_ci DEFAULT NULL,
				last_name VARCHAR(60) COLLATE utf8_unicode_ci DEFAULT NULL, -- mann muss das wechseln
				age INT(2),
				street  VARCHAR(30) COLLATE utf8_unicode_ci DEFAULT NULL, 
				hause_number  VARCHAR(5) COLLATE utf8_unicode_ci DEFAULT NULL,
				postal_code INT(5),
				city  VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL,
				phone  VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL,
				mobile  VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL,
				email  VARCHAR(30) COLLATE utf8_unicode_ci DEFAULT NULL,
				PRIMARY KEY (id)
			) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


			-- Tabelle fuer scheibe_kunde beziehung. Das heißt, ein kunde kann nur ein scheibe mieten.

			CREATE TABLE `scheibe_kunde` (
				id INT(11) NOT NULL AUTO_INCREMENT,
				scheibe_id INT(11) NOT NULL,
				kunde_id INT(11) NOT NULL,
				PRIMARY KEY (id)
			) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

			-- Tabelle fuer mahnung. Das heißt, wenn die scheibe seit miete fast vertig ist, erhaelt die kunde eine Mahnung.

			CREATE TABLE `mahnung` (
				id INT(11) NOT NULL AUTO_INCREMENT,
				scheibe_id INT(11) NOT NULL,
				kunde_id INT(11) NOT NULL,
				description TEXT COLLATE utf8_unicode_ci DEFAULT NULL,
				PRIMARY KEY (id)
			) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

			-- Tabelle fuer rechnung. Das heißt, wenn ein kunde ein scheibe jenseits vom Termin gemietet hat, erhaelt er eine rechnung. 

			CREATE TABLE `rechnung` (
				id INT(11) NOT NULL AUTO_INCREMENT,
				scheibe_id INT(11) NOT NULL,
				kunde_id INT(11) NOT NULL,
				duration INT(2) NOT NULL,
				bill DECIMAL(6,2) NOT NULL,
				PRIMARY KEY (id)
			) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
			
			
			----  DML -------------
			
			-- Diese INSERT ist fuer die kunde Tabelle
			
			INSERT INTO `kunde` (`first_name`,`last_name`,`age`,`street`,`hause_number`,`postal_code`,`city`,`phone`,`mobile`,`email`) VALUES ('Mark','Philips','24','Juliusstrasse','30','12051','Berlin','030-0000000','015690293847','mark.philips@gmx.de'),
			('Joana','Castro','30','Friedrischstrasse','27','10151','Berlin','030-7898133','015683829102','joana.castro@gmx.de'),
			('John','Layfield','47','Warschauerstrasse','13','10251','Berlin','030-0000000','015739333092','thejayman@gmail.com'),
			('Akira','Takeshi','33','Warschauerstrasse','24','10251','Berlin','030-77783902','0158912135674','super.special@gmx.de'),
			('Leonel','Rico','18','Alexanderstrasse','18','13151','Berlin','030-0000000','015490112283','thebestone23@gmx.de');
			
			
			
			
			-- Diese INSERT ist fuer die filme_schauspieler Tabelle. Wenn ein film mit der Richtig schauspieler(in) findet, dann kopiert beide Schluessel (von filmen und schauspieler Tabellen)

			INSERT INTO `filme_schauspieler` (filme_id, schauspieler_id) SELECT schauspieler.id, filmen.id FROM `schauspieler` JOIN filmen WHERE filmen.schauspieler LIKE CONCAT('%', schauspieler.name ,'%');
			
			
			
			-- Daten von filme datei hochgeladen und in die filmen Tabelle gespeichert.
			
			LOAD DATA INFILE "C:\\xampp\\htdocs\\dsql\\videothek\\data\\filme.csv" INTO TABLE filmen FIELDS TERMINATED BY "|" LINES TERMINATED BY "\r\n" IGNORE 1 LINES;
			
			
			
			-- Daten von genre datei hochgeladen und in die genre Tabelle gespeichert.
			
			LOAD DATA INFILE "C:\\xampp\\htdocs\\dsql\\videothek\\data\\genre.csv" INTO TABLE genres FIELDS TERMINATED BY ";" LINES TERMINATED BY "\r\n" IGNORE 1 LINES;
			
			
			
			-- Daten von regisseure datei hochgeladen und in die regisseure Tabelle gespeichert.
			
			LOAD DATA INFILE "C:\\xampp\\htdocs\\dsql\\videothek\\data\\regisseure.csv" INTO TABLE regisseur FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n" IGNORE 1 LINES;
			
			
			
			
			--------------------------------------	AUFGABEN	-----------------------------------------------
			
			
			-- Alle regisseure

			SELECT name FROM regisseur;

			-- Informationen von alle filmen

			SELECT titel,jahr, regisseure, laenge FROM filmen;


			--------------------- Genres ---------------------


			-- Alle filmen mit "Comedy" genre

			SELECT * FROM filmen WHERE genres LIKE '%Comedy%';

			-- Alle filmen mit "Drama" genre

			SELECT * FROM filmen WHERE genres LIKE '%Drama%';

			-- Alle filmen mit "Action" genre

			SELECT * FROM filmen WHERE genres LIKE '%Action%';

			-- Alle filmen mit "Adventure" genre

			SELECT * FROM filmen WHERE genres LIKE '%Adventure%';

			-- Alle filmen mit "War" genre

			SELECT * FROM filmen WHERE genres LIKE '%War%';

			-- Alle filmen mit "Crime" genre

			SELECT * FROM filmen WHERE genres LIKE '%Crime%';


			--------------------- Genres und Schauspieler ---------------------


			-- Alle 90er Jahre filmen mit "Crime" genre und Morgan Freeman schauspieler

			SELECT * FROM filmen WHERE genres LIKE '%Crime%' AND schauspieler LIKE '%Morgan Freeman%' 
			AND jahr > 1990 AND jahr < 2000;


			-- Alle 90er Jahre filmen mit "Crime" genre und `Kevin Spacey` schauspieler

			SELECT * FROM filmen WHERE genres LIKE '%Crime%' AND schauspieler LIKE '%Kevin Spacey%' 
			AND jahr > 1990 AND jahr < 2000;

			-- Alle 90er Jahre filmen mit "Drama" genre und `Kevin Spacey` schauspieler

			SELECT * FROM filmen WHERE genres LIKE '%Drama%' AND schauspieler LIKE '%Kevin Spacey%' 
			AND jahr > 1990 AND jahr < 2000;

			-- Alle 90er Jahre filmen mit "Action" genre und `Arnold Schwarzenegger` schauspieler

			SELECT * FROM filmen WHERE genres LIKE '%Action%' AND schauspieler LIKE '%Arnold Schwarzenegger%' 
			AND jahr > 1990 AND jahr < 2000;


			--------------------- Schauspieler ---------------------

			-- Alle filmen `Arnold Schwarzenegger` schauspieler

			SELECT * FROM filmen WHERE schauspieler LIKE '%Arnold Schwarzenegger%';

			-- Alle filmen `Bruce Willis` schauspieler

			SELECT * FROM filmen WHERE schauspieler LIKE '%Bruce Willis%';

			-- Alle filmen `Al Pacino` schauspieler

			SELECT * FROM filmen WHERE schauspieler LIKE '%Al Pacino%';


			-- Alle filmen `Christian Balle` schauspieler

			SELECT * FROM filmen WHERE schauspieler LIKE '%Christian Bale%';


			--------------------- Mahnung und Rechnung ---------------------

			-- Alle Kunden, die eine Mahnung mit Rechnung erhalten sollten

			SELECT * FROM kunde JOIN mahnung JOIN rechnung WHERE kunde.id = mahnung.kunde_id AND kunde.id = rechnung.id;


			--------------------- Filmen ---------------------

			-- Allen filmen frei in der Videothek

			SELECT titel,jahr, regisseure, laenge FROM filmen JOIN platten WHERE filmen.id = platten.filme_id AND platten.miete_status = 'available';

			-- Liste der am meisten geliehene Filme (top Ten)

			-- SELECT titel,jahr, regisseure, laenge FROM filmen JOIN 
			-- (SELECT platte_id FROM platte_kunde ORDER BY platte_id DESC LIMIT 10) 

			SELECT titel,jahr, regisseure, laenge, schauspieler FROM filmen JOIN platten JOIN platte_kunde
			WHERE filmen.id = platten.filme_id AND platten.id = platte_kunde.platte_id
			ORDER BY platte_kunde.platte_id DESC LIMIT 10; 

			-- Liste der Filme (Flop Ten), die nie geliehen worden.

			SELECT titel,jahr, regisseure, laenge, schauspieler FROM filmen JOIN platten JOIN platte_kunde
			WHERE filmen.id = platten.filme_id AND platten.id = platte_kunde.platte_id
			ORDER BY platte_kunde.platte_id ASC LIMIT 10; 


			-- Allen filmen von `Francis Ford Coppola`

			SELECT * FROM filmen WHERE regisseure LIKE '%Francis Ford Coppola%';

			-- Allen filmen von `Quentin Tarantino`

			SELECT * FROM filmen WHERE regisseure LIKE '%Quentin Tarantino%';

			-- Allen filmen von `Peter Jackson`

			SELECT * FROM filmen WHERE regisseure LIKE '%Peter Jackson%';

			-- Allen filmen von `James Cameron`

			SELECT * FROM filmen WHERE regisseure LIKE '%James Cameron%';