Tutorium 6 - Aufgabe 2 (SQL)

okna
Neuling
Neuling
Beiträge: 8
Registriert: 29. Aug 2014 13:22

Tutorium 6 - Aufgabe 2 (SQL)

Beitrag von okna »

Hallo nochmal,

eine weitere Frage die (sicherlich) schon in den Tutorien und Übungen explizit geklärt wurde und die ich hier nur zu Dokumentationszwecken stellen möchte:

Bei Aufgabe 2 (aus Tutorium 6) werden die Attribute die jeweils Primary Key der Relation sind trotzdem mit der Eigenschaft NOT NULL angelegt. Ein PRIMARY KEY ist aber laut SQL-Spezifikation immer NOT NULL (und UNIQUE).
Kurze Frage für den unmöglichen Fall, dass es am Fachgebiet böswillige Korrektoren gäbe: Würde es dafür theoretisch Punktabzug geben, weil man die Folgerung "Primary Key -> Unique + Not null" wissen sollte und die Angabe im CREATE TABLE (oder ALTER TABLE) redundant ist?

P.S.: Schuhgröße als INT zu speichern ist etwas Realitätsfern. Wie sollen die mir Laufschuhe mit Größe 47,5 verkaufen? Ich würde DECIMAL(3,1) vorschlagen. ;)

derDaniel
Mausschubser
Mausschubser
Beiträge: 76
Registriert: 2. Mai 2012 15:25

Re: Tutorium 6 - Aufgabe 2 (SQL)

Beitrag von derDaniel »

Halte ich für völlig unwahrscheinlich.

TobiasF
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 203
Registriert: 18. Apr 2011 11:57

Re: Tutorium 6 - Aufgabe 2 (SQL)

Beitrag von TobiasF »

Böswillige Korrektoren gibt es bei uns nicht.
Solltet ihr Schemata erstellen sollen, so wird alles als richtig erkannt, was im Endeffekt zum gleichen Ergebnis führt.

Sprich: ob ihr beim PRIMARY KEY noch NOT NULL dazu schreibt hat keinen Effekt auf das Ergebnis und ist somit egal. Gleiches gilt für die PRIMARY KEY Direktive, die ja direkt nach dem Attribut oder am Ende, als extra Constraint stehen kann.

Ähnliches gilt für Abfragen: Beispiel JOIN: Wenn ein INNER JOIN benötigt wird, kan man den ja über SELECT * FROM table1, table2 ... erreichen oder über SELECT * FROM table1 INNER JOIN table2 ...
Auch hier wäre beides richtig (bei outer joins etc. funktioniert das natürlich nicht mehr).

jingy
Neuling
Neuling
Beiträge: 10
Registriert: 7. Apr 2013 20:13

Re: Tutorium 6 - Aufgabe 3 (SQL)

Beitrag von jingy »

Hallo,

da ich keinen neuen thread öffnen wollte, gleich mal meine Frage zum dritten Aufgabenteil dieses Tutoriums...

Hier wird bei c) für das Finden der Namen aller Produkte, von denen mehr als zwei Größen im Lager sind folgende Lösung vorgeschlagen

SELECT ProduktName
FROM Lager
GROUP BY ProduktName
HAVING COUNT (DISTINCT Größe) > 2;

Jetzt verstehe ich die letzte HAVING Zeile nicht.., wieso werden doppelte Einträge der Größe ignoriert und nicht HAVING COUNT (ProduktName) >2?
Kann mir das jemand kurz erklären was das letzte Statement hier genau macht?

LG

TobiasF
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 203
Registriert: 18. Apr 2011 11:57

Re: Tutorium 6 - Aufgabe 2 (SQL)

Beitrag von TobiasF »

Die doppelten Einträge werden durch DISTINCT ignoriert:

Code: Alles auswählen

Größe:
1
2
3
3
4
4
5
6
COUNT (Größe) = 8
COUNT (DISTINCT Größe) = 6
COUNT (ProduktName) bei GROUP BY ProduktName wird immer 1 liefern, da ja für jeden neuen Produktnamen eine eigene Aggregationsgruppe gebildet wird (in diesem Fall mit immer genau einem Element).

jingy
Neuling
Neuling
Beiträge: 10
Registriert: 7. Apr 2013 20:13

Re: Tutorium 6 - Aufgabe 2 (SQL)

Beitrag von jingy »

Vielen Dank, das hat mir sehr geholfen!

LG

Antworten

Zurück zu „Archiv“