Übungsblatt 6 SQL

Orvil
Neuling
Neuling
Beiträge: 3
Registriert: 3. Sep 2015 17:17

Übungsblatt 6 SQL

Beitrag von Orvil »

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

waza-ari
Windoof-User
Windoof-User
Beiträge: 32
Registriert: 3. Nov 2010 20:26

Re: Übungsblatt 6 SQL

Beitrag von waza-ari »

Hi Orvil,

wie immer ohne Garantie auf Korrektheit, und ich hoffe, ich habe deine Fragen richtig verstanden :)
Orvil hat geschrieben:In Aufgabe a) wird SELECT P.* benutzt, ist dieser Ausdruck äquivalent zu SELECT Produkt*
P ist ein Alias für Produkt, dies wird in dem FROM Abschnitt definiert:

Code: Alles auswählen

FROM Produkt (AS) P
, 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!)
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?
Teil 1, warum DISTINCT:
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
Gerade das letzte Beispiel soll zeigen, dass die Attribute, die am Ende in Bedingungen verwendet werden, nicht mal selektiert sein müssen.

Orvil
Neuling
Neuling
Beiträge: 3
Registriert: 3. Sep 2015 17:17

Re: Übungsblatt 6 SQL

Beitrag von Orvil »

Ahhh ok, vielen Dank für die ausführliche Erklärung!

Grüße
Orvil

Benutzeravatar
ob1
Windoof-User
Windoof-User
Beiträge: 37
Registriert: 10. Dez 2012 14:30

Re: Übungsblatt 6 SQL

Beitrag von ob1 »

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.

Antworten

Zurück zu „Archiv“