2022-05-11 14:19:05 +00:00
|
|
|
USE project;
|
|
|
|
|
|
|
|
/*
|
|
|
|
---------------------------------- 1 ----------------------------------
|
|
|
|
Geben Sie mit SQL alle Menüs mit den darin enthaltenen Produkten menschenlesbar
|
|
|
|
als eine Art Speisekarte aus.
|
|
|
|
-----------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
SELECT Menuname, GROUP_CONCAT(Produktname SEPARATOR ', ') AS 'Produkte'
|
|
|
|
FROM Menu
|
|
|
|
JOIN Menucontent M on Menu.MenuID = M.MenuID
|
2022-05-18 13:26:48 +00:00
|
|
|
JOIN Menge M2 on M.MengenID = M2.MengenID
|
|
|
|
JOIN Produkt P on M2.ProduktID = P.ProduktID
|
2022-05-11 14:19:05 +00:00
|
|
|
GROUP BY Menuname;
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
---------------------------------- 2 ----------------------------------
|
|
|
|
Erweitern Sie die Ausgabe aus der vorherigen Abfrage um hilfreiche Informationen
|
|
|
|
bezüglich der Gesamtnährwerte dieser Menüs.
|
|
|
|
-----------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
SELECT Menuname,
|
2022-05-18 13:26:48 +00:00
|
|
|
GROUP_CONCAT(Produktname SEPARATOR ', ') AS 'Produkte',
|
|
|
|
SUM(Fett * (SELECT Menge FROM Menge WHERE MengenID = M.MengenID) / 100) AS 'Fett',
|
|
|
|
SUM(Kohlenhydrate * (SELECT Menge FROM Menge WHERE MengenID = M.MengenID) / 100) AS 'Kohlenhydrate',
|
|
|
|
SUM(Eiweiss * (SELECT Menge FROM Menge WHERE MengenID = M.MengenID) / 100) AS 'Eiweiss',
|
|
|
|
SUM(Brennwert * (SELECT Menge FROM Menge WHERE MengenID = M.MengenID) / 100) AS 'Brennwert'
|
2022-05-11 14:19:05 +00:00
|
|
|
FROM Menu
|
|
|
|
JOIN Menucontent M on Menu.MenuID = M.MenuID
|
2022-05-18 13:26:48 +00:00
|
|
|
JOIN Menge M3 on M.MengenID = M3.MengenID
|
|
|
|
JOIN Produkt P on M3.ProduktID = P.ProduktID
|
2022-05-11 14:19:05 +00:00
|
|
|
JOIN Naehrwerte N on P.ProduktID = N.ProduktID
|
|
|
|
GROUP BY Menuname;
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
---------------------------------- 3 ----------------------------------
|
|
|
|
Geben sie mit SQL alle Produkte mit für Kundinnen und Kunden relevanten Informationen für
|
|
|
|
eine bestimmte Person aus (betreffend Allergenen, Unverträglichkeiten, vegetarisch, etc.).
|
|
|
|
-----------------------------------------------------------------------
|
|
|
|
*/
|
2022-05-18 17:11:17 +00:00
|
|
|
SET @vorname := 'Florian';
|
|
|
|
SET @nachname := 'Kaiser';
|
|
|
|
|
|
|
|
# UNION von Nur Zusatzstoffe und Nur Allergene
|
|
|
|
SELECT Produktname, GROUP_CONCAT(Zusatzstoff) AS Zusatzstoff, GROUP_CONCAT(Allergen) AS Allergen
|
|
|
|
FROM (SELECT Produktname,
|
|
|
|
GROUP_CONCAT(enthaeltZusatzstoff.E_Nummer) as Zusatzstoff,
|
|
|
|
NULL Allergen
|
|
|
|
FROM Person
|
|
|
|
# Zusatzstoffe
|
|
|
|
JOIN Zusatzstoffunvertraeglichkeit on Person.PersonID = Zusatzstoffunvertraeglichkeit.PersonID
|
|
|
|
JOIN enthaeltZusatzstoff on enthaeltZusatzstoff.E_Nummer = Zusatzstoffunvertraeglichkeit.E_Nummer
|
|
|
|
LEFT JOIN Produkt on Produkt.ProduktID = enthaeltZusatzstoff.ProduktID
|
|
|
|
WHERE Personenname = @nachname
|
|
|
|
AND Personenvorname = @vorname
|
|
|
|
GROUP BY Produktname
|
|
|
|
UNION ALL
|
|
|
|
SELECT P.Produktname,
|
|
|
|
NULL Zusatzstoff,
|
|
|
|
GROUP_CONCAT(DISTINCT Allergenbezeichnung SEPARATOR ', ') AS Allergen
|
|
|
|
FROM Person
|
|
|
|
# Allergien
|
|
|
|
JOIN Allergie on Person.PersonID = Allergie.PersonID
|
|
|
|
JOIN Allergen on Allergen.AllergenID = Allergie.AllergenID
|
|
|
|
JOIN enthaeltAllergen on Allergen.AllergenID = enthaeltAllergen.AllergenID
|
|
|
|
JOIN Produkt P on P.ProduktID = enthaeltAllergen.ProduktID
|
|
|
|
WHERE Personenname = @nachname
|
|
|
|
AND Personenvorname = @vorname
|
|
|
|
GROUP BY Produktname) AS x
|
|
|
|
GROUP BY Produktname;
|
2022-05-11 14:19:05 +00:00
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
---------------------------------- 4 ----------------------------------
|
|
|
|
Sortieren Sie alle enthaltenen Produkte absteigend nach Anzahl der enthaltenen Zusatzstoffe.
|
|
|
|
-----------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
SELECT Produktname,
|
|
|
|
LENGTH(GROUP_CONCAT(E_Nummer)) - LENGTH(REPLACE(GROUP_CONCAT(E_Nummer), ',', '')) + 1 AS 'Anzahl Zusatzstoffe'
|
|
|
|
FROM Produkt
|
|
|
|
JOIN enthaeltZusatzstoff eZ on Produkt.ProduktID = eZ.ProduktID
|
|
|
|
GROUP BY Produktname
|
|
|
|
ORDER BY LENGTH(GROUP_CONCAT(E_Nummer)) - LENGTH(REPLACE(GROUP_CONCAT(E_Nummer), ',', '')) + 1 DESC;
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
---------------------------------- 5 ----------------------------------
|
2022-05-17 16:22:47 +00:00
|
|
|
Sortieren Sie alle [in der Datenbank (anm. d. St.)] enthaltenen Produkte aufsteigend nach Kalorienanzahl in der Portion, die verkauft wird.
|
2022-05-17 16:37:20 +00:00
|
|
|
Hinweis: Produkte ohne Brennwert werden nicht angezeigt
|
2022-05-11 14:19:05 +00:00
|
|
|
-----------------------------------------------------------------------
|
|
|
|
*/
|
2022-05-17 16:22:47 +00:00
|
|
|
SELECT Produktname,
|
|
|
|
ROUND(Brennwert * (M.Menge / 100), 1) AS Brennwert,
|
|
|
|
M.Menge,
|
|
|
|
M.Einheit
|
|
|
|
FROM Produkt
|
|
|
|
JOIN Naehrwerte N on Produkt.ProduktID = N.ProduktID
|
|
|
|
JOIN Menge M on Produkt.ProduktID = M.ProduktID
|
|
|
|
ORDER BY Brennwert;
|
2022-05-11 14:19:05 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
---------------------------------- 6 ----------------------------------
|
|
|
|
Geben Sie eine SQL Anfrage an, die alle Produkte ausgibt, die eine bestimmte Anzahl von Emulgatoren enthalten.
|
|
|
|
a. Keine Emulgatoren
|
|
|
|
b. 1 Emulgator
|
|
|
|
c. 2 Emulgatoren
|
|
|
|
d. Mehr
|
|
|
|
-----------------------------------------------------------------------
|
|
|
|
*/
|
2022-05-18 09:04:26 +00:00
|
|
|
|
2022-05-18 09:43:08 +00:00
|
|
|
SELECT Produktname,
|
|
|
|
IFNULL( # wenn feld NULL, Keine Emulgatoren
|
|
|
|
REPLACE( # wenn feld zero, Keine Emulgatoren
|
|
|
|
REPLACE( # wenn feld zwei, Zwei Emulgatoren
|
|
|
|
REPLACE( # wenn feld eins, Ein Emulgator
|
|
|
|
IF( # wenn feld größer als zwei, Mehr Emulgatoren, ansonsten setze den gleichen wert wieder ins feld
|
|
|
|
LENGTH(GROUP_CONCAT(eZ.Anwendungsgrund)) - LENGTH(REPLACE(GROUP_CONCAT(eZ.Anwendungsgrund), 'E', ''))
|
|
|
|
> 2, 'Mehr Emulgatoren',
|
|
|
|
LENGTH(GROUP_CONCAT(eZ.Anwendungsgrund)) - LENGTH(REPLACE(GROUP_CONCAT(eZ.Anwendungsgrund), 'E', '')))
|
|
|
|
, 1, 'Ein Emulgator')
|
|
|
|
, 2, 'Zwei Emulgatoren')
|
|
|
|
, 0, 'Keine Emulgatoren')
|
|
|
|
, 'Keine Emulgatoren')
|
|
|
|
AS Emgulagtoren,
|
|
|
|
GROUP_CONCAT(eZ.Anwendungsgrund) AS 'Anwendungsgrund'
|
2022-05-18 09:04:26 +00:00
|
|
|
FROM Produkt
|
2022-05-18 09:43:08 +00:00
|
|
|
LEFT JOIN enthaeltZusatzstoff eZ on Produkt.ProduktID = eZ.ProduktID
|
|
|
|
GROUP BY Produktname
|
|
|
|
ORDER BY LENGTH(GROUP_CONCAT(eZ.Anwendungsgrund)) - LENGTH(REPLACE(GROUP_CONCAT(eZ.Anwendungsgrund), 'E', ''))
|