Hallo zusammen,
ich habe noch etwas Probleme mit der SQL Syntax und habe deshalb Fragen zur Aufgabe 6.3)
In Aufgabe a) wird SELECT P.* benutzt, ist dieser Ausdruck äquivalent zu SELECT Produkt* ?
Bei Aufgabenteil b): Ist das DISTINCT notwendig? Warum wird hier kein * benutzt, wenn wir doch wieder alle Elemente der Spalte auf die Bedingungen prüfen?
Grüße
Orvil
Übungsblatt 6 SQL
Re: Übungsblatt 6 SQL
Hi Orvil,
wie immer ohne Garantie auf Korrektheit, und ich hoffe, ich habe deine Fragen richtig verstanden
, wobei man das AS auch weglassen kann. In der Query ist dann P und Produkt äquivalent, dementsprechend wäre auch Produkt.* korrekt. (Aber mit dem Punkt!)
DISTINCT entfernt Duplikate aus den Tupeln. Bei den Queries darf man nicht nach Sinn oder Unsinn fragen. Die Query gibt alle Schuhgrößen aller Produkte, die weniger als 12 Exemplare haben, aus. Würdest Du DISTINCT weglassen, könnte folgendes passieren:
Tabelle:
Schuh|Größe|Lager
FlipFlop|12|10
FlipFlop|10|9
Sandale|11|14
Sandale|10|10
Ohne DISTINCT erhälst Du die folgenden Tupel, da diese drei (1,2 und 4) auf die Bedingung matchen. Mit DISTINCT würde die 10 nur einmalig ausgegeben werden.
Größe
12
10
10
Teil 2, warum wird kein * benutzt
* hat nichts mit den Elementen der Spalte zu tun, sondern es ist die Projektion auf die angegebenen Spalten. Einfach gesagt, man gibt an, welche Spalten zurückgegeben werden sollen. Nehmen wir nochmal obige Tabelle und nennen sie mal "Schuhe".
Schuh|Größe|Lager
FlipFlop|12|10
FlipFlop|10|9
Sandale|11|14
Sandale|10|10
Gerade das letzte Beispiel soll zeigen, dass die Attribute, die am Ende in Bedingungen verwendet werden, nicht mal selektiert sein müssen.
wie immer ohne Garantie auf Korrektheit, und ich hoffe, ich habe deine Fragen richtig verstanden

P ist ein Alias für Produkt, dies wird in dem FROM Abschnitt definiert:Orvil hat geschrieben:In Aufgabe a) wird SELECT P.* benutzt, ist dieser Ausdruck äquivalent zu SELECT Produkt*
Code: Alles auswählen
FROM Produkt (AS) P
Teil 1, warum DISTINCT:Orvil hat geschrieben:Bei Aufgabenteil b): Ist das DISTINCT notwendig? Warum wird hier kein * benutzt, wenn wir doch wieder alle Elemente der Spalte auf die Bedingungen prüfen?
DISTINCT entfernt Duplikate aus den Tupeln. Bei den Queries darf man nicht nach Sinn oder Unsinn fragen. Die Query gibt alle Schuhgrößen aller Produkte, die weniger als 12 Exemplare haben, aus. Würdest Du DISTINCT weglassen, könnte folgendes passieren:
Tabelle:
Schuh|Größe|Lager
FlipFlop|12|10
FlipFlop|10|9
Sandale|11|14
Sandale|10|10
Ohne DISTINCT erhälst Du die folgenden Tupel, da diese drei (1,2 und 4) auf die Bedingung matchen. Mit DISTINCT würde die 10 nur einmalig ausgegeben werden.
Größe
12
10
10
Teil 2, warum wird kein * benutzt
* hat nichts mit den Elementen der Spalte zu tun, sondern es ist die Projektion auf die angegebenen Spalten. Einfach gesagt, man gibt an, welche Spalten zurückgegeben werden sollen. Nehmen wir nochmal obige Tabelle und nennen sie mal "Schuhe".
Schuh|Größe|Lager
FlipFlop|12|10
FlipFlop|10|9
Sandale|11|14
Sandale|10|10
Code: Alles auswählen
SELECT * FROM Schuhe;
Schuh|Größe|Lager
FlipFlop|12|10
FlipFlop|10|9
Sandale|11|14
Sandale|10|10
Code: Alles auswählen
SELECT Schuh FROM Schuhe;
Schuh
FlipFlop
FlipFlop
Sandale
Sandale
Code: Alles auswählen
SELECT Schuh, Größe FROM Schuhe;
Schuh|Größe
FlipFlop|12
FlipFlop|10
Sandale|11
Sandale|10
Code: Alles auswählen
SELECT DISTINCT Größe FROM Schuhe WHERE Lager < 12;
Größe
12
10
Re: Übungsblatt 6 SQL
Ahhh ok, vielen Dank für die ausführliche Erklärung!
Grüße
Orvil
Grüße
Orvil
Re: Übungsblatt 6 SQL
In der gleichen Übung ist mir noch aufgefallen, bei Aufgabe 6.2 L)
Die Musterlösung (Folie 25) sagt SELECT COUNT(*), wobei der Bestand der Bibliotheken gezählt werden soll. Allerdings kann Bibliothek hier auch NULL sein da es kein PK ist, von daher würde ich eher sagen SELECT COUNT(Bibliothek) oder? Das sollte dann die Anzahl der Zeilen ausgeben, in denen Bibliothek nicht NULL ist.
Die Musterlösung (Folie 25) sagt SELECT COUNT(*), wobei der Bestand der Bibliotheken gezählt werden soll. Allerdings kann Bibliothek hier auch NULL sein da es kein PK ist, von daher würde ich eher sagen SELECT COUNT(Bibliothek) oder? Das sollte dann die Anzahl der Zeilen ausgeben, in denen Bibliothek nicht NULL ist.