Zum Inhalt springen

SQL Aufgaben (Einstieg)


Monsieur Bate

Empfohlene Beiträge

Hi,seit zwei Tagen versuche ich mich an SQL. Könntet ihr mir zu den folgenden Aufgaben ein Lösungsansätze geben, leider fehlt mir der Umgang mit SQL noch schwer, da die Logik von Programmiersprachen stark abweicht. Logisch, ist ja auch keine Programmiersprache. Ich benutze MySQL-Workbench.

Aufgaben:
1. Selektiere den Kunden und seine Lieblingspizza, die er am häufigsten bestellt hat.
2. Welche Pizza hat die meisten Zutaten?
3. Welche Pizza ist teurer als 9€ in normaler Größe?
4. In welchen Städten gibt es Kunden (jede Stadt nur einmal listen).
5. Was kostet die Bestellung, des Kunden mit der Email Adresse „a@f“.
6. Was ist der Durschnittspreis aller Bestellungen.
7. Welche ist die teuerste Bestellung?
8. Zeige alle Kunden an, deren Bestellwert über 15€ liegt.
9. Liste alle Pizzen, nach normalem Preis aufsteigend sortiert, auf.

Bearbeitet von Monsieur Bate
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,
wie Rienne schon angemerkt hat, fehlt uns die Struktur der Datenbank.
Ohne die DB-Struktur zu kennen ist Nr.9 ein einfaches Select mit einem OrderBy am ende. 

Eine Genauere Lösung kann man mit den Momentanen Infos nicht nennen.

Da du seit zwei Tagen schon dran bist, wie sehen deine bisherigen Ansätze zu den Aufgaben aus? Vielleicht stimmen die schon fast und benötigen nur noch etwas Feinschliff.

Link zu diesem Kommentar
Auf anderen Seiten teilen

PIZZA
ID Int(16)
NAME Text (30)
TEXT TEXT(80)
PREIS_NORMAL DEZ(4,2)
PREIS_FAMILY DEZ(4,2)

 

KUNDE
ID INT(16)
EMAIL Text (50)
PW Text (16)
NN Text (30)
VN Text (30)
STR Text (30)
NR Text (10)
PLZ Text (5)
ORT Text (30)
TEL Text (30)

 

ZUTATEN
ID INT(16)
NAME TEXT(50)

 

ZUTATEN_LISTE
ID INT(16)
ZUTAT INT(16)
PIZZA INT(16)

 

BESTELLUNG
ID INT(16)
KUNDE INT(16)
PIZZA INT(16)
ANZ_NORMAL INT(11)
ANZ_FAMILY INT(11)

 

Was vorgegeben war:

INSERT INTO pizza VALUES (1,'Hawai','Pizza mit Salami,<br>K&auml;se und Ananas',4.00,7.50);
INSERT INTO pizza VALUES (2,'Vegetariana','vegetarische Pizza<br>mit Gr&uuml;nzeug',4.00,7.50);
INSERT INTO pizza VALUES (3,'Chicken','Pizza mit H&uuml;hnerfleisch',4.80,9.00);
INSERT INTO pizza VALUES (4,'American','Pizza mit Mais, K&auml;se,<br>Salami und Essigg&uuml;rkchen',5.50,10.50);
INSERT INTO pizza VALUES (5,'Funghi','Pizza mit Pilzen',3.50,6.00);
INSERT INTO pizza VALUES (6,'CGI','Pizza mit Perl-Zwiebeln<br>und Cookies',8.00,15.00);

INSERT INTO kunde VALUES (1,'a.fortenbacher@fhtw-berlin.de','184895e9508f3f41','Fortenbacher','Albrecht','An der Forst','12','15370','Petershagen','033439 77907');
INSERT INTO kunde VALUES (2,'Claudia@Volk.de','6036ac6925245ec8','Volk','Claudia','Sonnenallee','20','12345','Berlin','030 88775');
INSERT INTO kunde VALUES (3,'a@f','077baa8f491e1489','f','a','adf','12','15370','p','011');
INSERT INTO kunde VALUES (4,'cristina.dammer@web.de','398e7500242ab90c','Dammer','Cristina','An der Forst','12','15370','Petershagen','033439 77907');

INSERT INTO zutaten VALUES (1, 'Käse');
INSERT INTO zutaten VALUES (2, 'Tomaten');
INSERT INTO zutaten VALUES (3, 'Salami');
INSERT INTO zutaten VALUES (4, 'Pilze');
INSERT INTO zutaten VALUES (5, 'Ananas');
INSERT INTO zutaten VALUES (6, 'Hühnerflleisch');
INSERT INTO zutaten VALUES (7, 'Mais');
INSERT INTO zutaten VALUES (8, 'Essiggurken');
INSERT INTO zutaten VALUES (9, 'Zwiebeln');
INSERT INTO zutaten VALUES (10, 'Cookies');

INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (1, 1, 1);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (2, 3, 1);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (3, 5, 1);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (4, 2, 2);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (5, 4, 2);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (6, 5, 2);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (7, 7, 2);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (16, 8, 2);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (17, 9, 2);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (8, 6, 3);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (9, 1, 4);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (10, 3, 4);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (11, 7, 4);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (12, 8, 4);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (13, 4, 5);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (14, 9, 6);
INSERT INTO zutaten_liste (id, zutat, pizza) VALUES (15, 10, 6);

INSERT INTO bestellung VALUES (1,3,1,2,1);
INSERT INTO bestellung VALUES (2,3,6,0,1);

 

ID = PK
bestellung_KUNDE_FK = FK
bestellung_PIZZA_FK = FK

zutaten_liste_ZUTAT_FK = FK
zutaten_liste_PIZZA_FK = FK

Bearbeitet von Monsieur Bate
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein paar der Anfragen sind auch schon etwas komplexer - da würde ich mir nach zwei Tagen noch keine Gedanken machen. Was ich immer hilfreich fand, ist, die Anfragen ggf. in mehreren Schritten zu behandeln. Am Beispiel von 1 könnte man z.B. so vorgehen:

1) Wie selektiert man Kunden?

2) Wie findest du heraus, welche Pizza wie oft bestellt wurde?

2.a) Wie findest du heraus, welche Pizza am häufigsten bestellt wurde?

3) Wie findest du heraus, welche Pizzen ein Kunde bestellt hat?

Wenn du diese Teilanfragen formulieren kannst (die einfacher sind als die eigentliche Fragenstellung), dann kannst du dir Gedanken darüber machen, wie du die zusammenbauen kannst.

Zum Thema SQL und Programmiersprachen: Nur, weil das Ding Query-Language heißt, bedeutet das nicht, dass das was völlig anderes ist als eine Programmiersprache. Der Unterschied ist, dass SQL deklarativ und nicht imperativ ist - das benötigt ein gewisses Umdenken, wenn man von "normalen" Programmiersprachen kommt. Aber wenn man sich so in modernen Sprachen umguckt (bzw. Konstrukten darin), dann findet man diesen Ansatz durchaus auch (spontan wäre da LINQ in C# zu nennen, bspw.).

Das Datenbankschema, das du gerade gepostet hast, scheint mir nicht komplett zu sein. Es fehlt eine Tabelle "Bestellung" o.ä.

Bearbeitet von arlegermi
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 25 Minuten schrieb Mttkrb:

Da du seit zwei Tagen schon dran bist, wie sehen deine bisherigen Ansätze zu den Aufgaben aus? Vielleicht stimmen die schon fast und benötigen nur noch etwas Feinschliff.

1. ALTER TABLE zutaten_liste ADD CONSTRAINT zutaten_liste_PIZZA_FK FOREIGN KEY (PIZZA) REFERENCES pizza(ID);
ALTER TABLE zutaten_liste ADD CONSTRAINT zutaten_liste_ZUTAT_FK FOREIGN KEY (ZUTAT) REFERENCES pizza(ID);

ALTER TABLE bestellung ADD CONSTRAINT bestellung_KUNDE_FK FOREIGN KEY (KUNDE) REFERENCES bestellung(ID);
ALTER TABLE bestellung ADD CONSTRAINT bestellung_PIZZA_FK FOREIGN KEY (PIZZA) REFERENCES bestellung(ID);

2. SELECT * FROM pizza;
3. SELECT * FROM kunde;
4. SELECT * FROM zutaten;
5. SELECT * FROM zutaten_liste;
6. SELECT * FROM bestellung;

7. SELECT * FROM kunde WHERE ORT = 'Berlin';

8. DELETE FROM kunde WHERE pw;

9. SELECT COUNT(*) FROM kunde WHERE Ort = 'Petershagen';

10. SELECT MIN(PREIS_NORMAL) FROM pizza;

11. UPDATE kunde SET Ort = 'Petershagen' WHERE EMAIL = 'a@f';

12. SELECT * FROM pizza p, zutaten_liste zl, zutaten z
WHERE z.name = 'Käse' AND z.id = zl.zutat AND zl.pizza = p.id;

13. SELECT * FROM pizza p, zutaten_liste zl, zutaten z
WHERE z.name IN ('Käse', 'Salami') AND z.id = zl.zutat AND zl.pizza = p.id GROUP BY p.name;

14. SELECT CONCAT(k.vn, ' ', k.nn) AS person FROM kunde k, bestellung b
WHERE b.kunde = k.id GROUP BY person;

15. SELECT CONCAT(k.vn, ' ', k.nn) AS person, MAb.anz_normal + b.anz_family) AS total 
FROM kunde k, bestellung b
WHERE k.id = b.kunde
GROUP BY person
ORDER BY total DESC LIMIT 1;

1. Erzeuge Fremdschlüssel für die Tabellen:
- ZUTATEN_LISTE (PIZZA, ZUTAT)
- BESTELLUNG (KUNDE, PIZZA)
2. Wähle alle Einträge der Tabelle PIZZA aus.
3. Wähle alle Einträge der Tabelle KUNDE aus.
4. Wähle alle Einträge der Tabelle ZUTATEN aus.
5. Wähle alle Einträge der Tabelle ZUTATEN_LISTE aus.
6. Wähle alle Einträge der Tabelle BESTELLUNG aus.
7. Wer wohnt in Berlin?
8. Lösche die Spalte „pw“ von der Kunden Tabelle.
9. Wie viele Kunden wohnen in Petershagen?
10. Welche Pizza ist die günstigste?
11. Ändere den Wohnort des Kunden, mit der Email Adresse „a@f“, in Petershagen.
12. Selektiere alle Pizzen, die Käse als Zutat haben.
13. Selektiere alle Pizzen, die Käse und Salami als Zutat haben.
14. Selektiere die Kunden, die eine offene Bestellung haben.
15. Welcher Kunde hat die meisten Pizzen bestellt?

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Whiz-zarD, so wie @Monsieur Bate die Datenbank dargestellt hat, ist es, zumindest für mein Verständnis, schon möglich mehrere Pizzen zu bestellen, aber nur eine Sorte. Oder nicht? ^^'

Was fehlt ist eine Art Posten-Rechnung-Tabelle, die einer Bestellung die verschiedenen Posten (in diesem Fall Pizzen) zuordnet.

Bearbeitet von Rienne
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Monsieur Bate:

Möchte mir niemand mehr helfen? Ich erwarte keine Lösungen, wenn ihr das denkt, mir geht es nur um Ansätze für die Aufgaben.

Wobei brauchst du den jetzt noch konkret Hilfe?
Du hast im vorherigen Post bereits einige SQL Statements gepostet - was funktioniert noch nicht?

Link zu diesem Kommentar
Auf anderen Seiten teilen

1) Es geht darum, Dinge zu gruppieren und zu sortieren. Was du gruppieren und wie du es sortieren sollst, steht doch in der Aufgabe.

2) Hier soll ebenfalls was gruppiert werden

3) Es soll über eine WHERE-Bedingung rausgefunden werden, welche Pizza teuerer als 9 € ist

4) Ebenfalls eine Gruppierung

5) Die Tabellen Bestellung und Kunde müssen gejoined werden und dann den Kunden mit der E-Mail-Adresse a@f raussuchen

6) Schau dir mal die AVG()-Funktion (= Average) an.

7) Eine Sortierung auf den Bestellungen

8) Eine Sortierung mit Filterung auf den Bestellungen

9) Genauer, wie die Aufgabe kann man es nicht mehr beschreiben, ohne die Lösung zu präsentieren

Link zu diesem Kommentar
Auf anderen Seiten teilen

> 8. Lösche die Spalte „pw“ von der Kunden Tabelle.
DELETE ist für Zeilen, für Spalten mal ALTER TABLE ansehen.
> 12. Selektiere alle Pizzen, die Käse als Zutat haben.
> 13. Selektiere alle Pizzen, die Käse und Salami als Zutat haben.
> 14. Selektiere die Kunden, die eine offene Bestellung haben.
> 15. Welcher Kunde hat die meisten Pizzen bestellt?
Du solltest Dir mal die JOIN Syntax ansehen - es fehlen ON Clauses um die gewünschten Schnittmengen zu erhalten - Du erhältst sonst das Kreuzprodukt mit viel zu vielen Zeilen..

 

Wie @Goulasz schon schrieb: Schau Dir SQL-Island an und mach die Übungen dort..

Bearbeitet von RipperFox
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich möchte die Kunden und ihre Lieblingsmarke anzeigen. Da Kunde "1" lieber Hohes C trinkt, möchte ich erreichen, dass diese Marke als die Lieblingsmarke des Kunden "1" angezeigt wird und die andere Marke rausfällt. Wie kann ich das machen? Kann ich einen Vergleich zwischen den Mengen machen? Ich möchte aber, dass der Kunde "2" auch angezeigt wird, da er ja nur eine Lieblingsmarke hat.

BESTELLUNG
Kunde Marke O-Saft 1l
1 Hohes C 3
1 Grannini 1
2 Rauch 4

 

 

Bearbeitet von Monsieur Bate
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Monsieur Bate!

Hast du das Spiel schon gespielt? 

vor 1 Stunde schrieb Monsieur Bate:

[...]Da Kunde "1" lieber Hohes C trinkt, möchte ich erreichen, dass diese Marke als die Lieblingsmarke des Kunden "1" angezeigt wird und die andere Marke rausfällt. Wie kann ich das machen?[...]

Mit den richtigen SQL-Abfragen. 

vor 1 Stunde schrieb Monsieur Bate:

[...]Kann ich einen Vergleich zwischen den Mengen machen?[...]

Ja. COUNT, AVG, SUM-Funktionen bieten dir gute Möglichkeiten, z.B. Summen zu ermitteln.

vor 1 Stunde schrieb Monsieur Bate:

[...]Ich möchte aber, dass der Kunde "2" auch angezeigt wird, da er ja nur eine Lieblingsmarke hat.[...]

Ja, geht auch. Guck dir einfach mal die Grundlagen an und recherchier ordentlich nach den Funktionen.

Gruß, Goulasz :goulasz: 

P.S.: SEHE ICH DA EIN LEERZEICHEN IM SPALTENNAMEN? 

giphy.gif

 

Bearbeitet von Goulasz
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 50 Minuten schrieb Goulasz:

P.S.: SEHE ICH DA EIN LEERZEICHEN IM SPALTENNAMEN? 

giphy.gif

 

Alles gut, nicht aufregen. :D

Aber ernsthaft, ich habe extrem viel im Internet nachgeschaut. Ich weiß wirklich nicht, wie man zwei Datensätze miteinander vergleicht, um dann das mit der größeren Menge anzeigen zu lassen.

BTW. Ich habe alles Aufgaben gelöst, mir fehlt tatsächlich nur noch die Aufgabe. Keiner Ahnung, was an ihr so schwer ist, aber ich hänge schon seit vorgestern an der Kack Aufgabe. Alle anderen habe ich hinbekommen, nur die nicht.

 

Bearbeitet von Monsieur Bate
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...