-- Selektiere alle Attribute (*) von allen Händlern.
SELECT * FROM KOWA.Haendler.haendler;

-- Selektiere die Namen aller Händler: Maier wird zweimal ausgegeben!
SELECT name FROM KOWA.Haendler.haendler;

-- Selektiere die Namen aller Händler und entferne Duplikate: 
-- Maier wird einmal ausgegeben!

SELECT DISTINCT name FROM KOWA.Haendler.haendler;

-- Selektiere den Namen und die eindeutige Händlernummer aller Händler.
SELECT name, hnr FROM KOWA.Haendler.haendler;

-- Nun bewirkt DISTINCT keine Änderung!
SELECT DISTINCT name, hnr FROM KOWA.Haendler.haendler;

-- Bennenne die Ausgabe-Attribute um.
SELECT name AS name, hnr AS haendlernummer FROM KOWA.Haendler.haendler;

-- SQL-Befehle sind nicht case-sensiv. Die Großbuchstaben
-- der umbenannten Attribute werden nicht beachtet.i

SELECT name AS Name, hnr AS Haendlernummer FROM KOWA.Haendler.haendler;

-- Wenn man Attributenamen oder Tabellennamen in doppelte Anführungszeichen schließt,
-- sind alle Sonderzeichen erlaubt.

SELECT name AS "Name", hnr AS "Händlernummer" FROM KOWA.Haendler.haendler;

-- Man kann Attribute und Tabellen(!) auch in der
-- FROM-Klausel umbenennen.
-- Funktioniert in Virtuoso nicht.

-- SELECT * FROM KOWA.Haendler.haendler AS h(id, name, haendleradresse);

-- Selektiere alle Attribute aller Waren.
SELECT * FROM KOWA.Haendler.ware;

-- Selektiere alle CPUs aus der Tabelle KOWA.Haendler.ware.
SELECT * FROM KOWA.Haendler.ware
WHERE typ = 'CPU';

-- Was berechnet die folgende Anfrage? 
-- Antwort: Das kartesische Produkt der Tupel aller Tabellen,
-- d.h. das Ergebnis enthält jede mögliche Tupel-Kombination.

SELECT *
FROM   KOWA.Haendler.haendler h, KOWA.Haendler.liefert l, KOWA.Haendler.ware w;

-- Diese Anfrage ist sinnvoller:
-- Welche Waren werden von welchen Händlern geKOWA.Haendler.liefert?

SELECT *
FROM   KOWA.Haendler.haendler h, KOWA.Haendler.liefert l, KOWA.Haendler.ware w
WHERE  h.hnr = l.hnr AND l.wnr = w.wnr;

-- Welche Waren werden von welchen Händlern geKOWA.Haendler.liefert (ohne Preis und Lieferzeit)?
SELECT h.*, w.*
FROM   KOWA.Haendler.haendler h, KOWA.Haendler.liefert l, KOWA.Haendler.ware w
WHERE  h.hnr = l.hnr AND l.wnr = w.wnr;

-- In Prgrammen sollte man auf die *-Noation besser verzichten,
-- da Attribute, die später in eine Tabelle eingefügt werden,
-- die Ergenisse von Anfragen mit *-Notation unbeabsichtigt
-- veändern können.

SELECT h.hnr, h.name, h.adresse, w.wnr, w.typ, w.bezeichnung
FROM   KOWA.Haendler.haendler h, KOWA.Haendler.liefert l, KOWA.Haendler.ware w
WHERE  h.hnr = l.hnr AND l.wnr = w.wnr;

-- Da die Attribute preis und lieferzeit nicht ausgegeben werden,
-- können Duplikate entstehen. So KOWA.Haendler.liefert Huber einen Athlon XP 3000+
-- z.B. für 180 Euro in fünf Tagen und für 199.99 Euro in einem Tag.
-- Diese Information wird jedoch gar nicht angezeigt, wenn man die
-- Attribute preis und lieferzeit nicht ausgibt.
-- 
-- Die entstehenden Duplikate sollte man mit DISTINCT entfernen.

SELECT DISTINCT
       h.hnr, h.name, h.adresse, w.wnr, w.typ, w.bezeichnung
FROM   KOWA.Haendler.haendler h, KOWA.Haendler.liefert l, KOWA.Haendler.ware w
WHERE  h.hnr = l.hnr AND l.wnr = w.wnr;

-- Und die Ausgabe sollte ii. Allg. auch noch sortiert erfolgen.
SELECT DISTINCT
         h.hnr, h.name, h.adresse, w.wnr, w.typ, w.bezeichnung
FROM     KOWA.Haendler.haendler h, KOWA.Haendler.liefert l, KOWA.Haendler.ware w
WHERE    h.hnr = l.hnr AND l.wnr = w.wnr
ORDER BY h.name, h.adresse, w.typ, w.bezeichnung;

-- Nonsense-Anfrage (Warum?) 
-- Antwort: Die Anfrage KOWA.Haendler.liefert zwar ein Ergebnis, dieses macht jedoch 
-- überhaupt keinen Sinn, da in der KOWA.Haendler.liefert-Tabelle die Warennummer mit
-- der Händlernummer verglichen wird und umgekehrt. Warennummer und
-- Händlernummer haben jedoch nichts miteinander zu tun.   

SELECT *
FROM   KOWA.Haendler.haendler h, KOWA.Haendler.liefert l, KOWA.Haendler.ware w
WHERE  h.hnr = l.wnr AND l.hnr = w.wnr;
