SELECT * FROM dozent;

SELECT D_Nr       AS Nr, 
       D_Anrede   AS Anrede,
       D_Vorname  AS Vorname,
       D_Nachname AS Nachname
  FROM dozent;

SELECT D_Nr       AS Nr, 
       D_Anrede   AS Anrede,
       D_Vorname  AS Vorname,
       D_Nachname AS Nachname,
       D_Stadt    AS Stadt
  FROM dozent
  WHERE D_Stadt  = 'Bochum'
    AND D_Anrede <> 'Herr';

SELECT D_Nr       AS Nr, 
       D_Anrede   AS Anrede,
       D_Vorname  AS Vorname,
       D_Nachname AS Nachname,
       D_Stadt    AS Stadt
  FROM dozent
  WHERE D_Stadt  = 'Bochum'
    AND (D_Nr > 7 AND D_Anrede = 'Herr');

SELECT DISTINCT K_Bereich
  FROM kurs;

SELECT DISTINCT K_Dauer
  FROM kurs
 ORDER BY K_Dauer DESC; -- gleichzeitig auf- und absteigend sortieren

SELECT K_Titel, K_Untertitel, K_Bereich, K_Dauer
  FROM kurs
 WHERE K_Bereich = 'Programmierung'
   AND K_Dauer > 3
 ORDER BY K_Titel, K_Untertitel

SELECT K_Titel, K_Untertitel, K_Bereich, K_Dauer
  FROM kurs
 WHERE K_Bereich = 'Programmierung'
   AND K_Dauer > 3
 ORDER BY 1, 2

SELECT K_Titel, K_Untertitel, K_Bereich, K_Dauer
  FROM kurs
 WHERE K_Bereich = 'Programmierung'
   AND K_Dauer > 3
   AND NOT K_Titel = 'C++'
 ORDER BY 1, 2

SELECT K_Titel, K_Untertitel, K_Bereich, K_Dauer
  FROM kurs
 WHERE K_Nr NOT IN (SELECT K_Nr
                      FROM kurs
                     WHERE K_Dauer <=3)

SELECT TN_Nachname, TN_Stadt, TN_PLZ
  FROM teilnehmer
  WHERE TN_PLZ BETWEEN 10000 AND 20000
  ORDER BY TN_PLZ;

SELECT U_Name, U_Branche, U_Stadt
  FROM unternehmen
 WHERE U_Stadt IN ('Dsseldorf', 'Dortmund', 'Dinslaken');

SELECT U_Name, U_Stadt
  FROM unternehmen
 WHERE U_Stadt LIKE 'D%d'
    OR U_Stadt LIKE '%d'
    OR U_Stadt LIKE 'Dsseldor_';

SELECT TN_Vorname, TN_Nachname
  FROM teilnehmer
 WHERE tn_nachname LIKE 'Flo%e';

SELECT K_Titel, K_Untertitel, P_TN1 AS Euro, P_TN1*1.12 AS Dollar
  FROM kurs INNER JOIN preis
    ON preis.P_Nr = kurs.P_Nr
 WHERE P_TN1*1.12 > 1300;

SELECT tn_anrede, tn_nachname, tn_vorname
  FROM teilnehmer
 WHERE tn_anrede IS NULL;

SELECT *
  FROM termin
 WHERE T_Ort = 'Dortmund'
UNION
SELECT *
 FROM termin
WHERE T_Ort = 'Bochum'; 

SELECT *
  FROM termin
 WHERE K_Nr = 1010004
INTERSECT
SELECT *
 FROM termin
WHERE T_Beginn = '26.09.2002';

SELECT tn_nr, tn_nachname, tn_stadt
  FROM teilnehmer
 WHERE u_nr = 2
MINUS
SELECT tn_nr, tn_nachname, tn_stadt
  FROM teilnehmer
 WHERE tn_stadt = 'Bochum';

SELECT tn_nr AS Nr, tn_nachname AS Nachname, tn_stadt AS Stadt
  FROM teilnehmer
 WHERE u_nr = 2
MINUS
SELECT tn_nr, tn_nachname, tn_stadt
  FROM teilnehmer
 WHERE tn_stadt = 'Bochum';

SELECT dozent.D_Nr, D_Nachname, kurs.K_Nr, K_Titel
  FROM kurs INNER JOIN themenverteilung
    ON kurs.K_Nr = themenverteilung.K_Nr
            INNER JOIN dozent
    ON dozent.D_Nr = themenverteilung.D_Nr;

SELECT TN_Nachname, U_Name, T_Ort, K_Titel, D_Nachname
  FROM buchung INNER JOIN teilnehmer
    ON buchung.TN_Nr = teilnehmer.TN_Nr
               INNER JOIN unternehmen
    ON teilnehmer.U_Nr = unternehmen.U_Nr
               INNER JOIN termin
    ON buchung.T_Nr = termin.T_Nr
               INNER JOIN kurs
    ON termin.K_Nr = kurs.K_Nr
               INNER JOIN preis
    ON kurs.P_Nr = preis.P_Nr
               INNER JOIN themenverteilung
    ON kurs.K_Nr = themenverteilung.K_Nr
               INNER JOIN dozent
    ON themenverteilung.D_Nr = dozent.D_Nr
 WHERE B_Nr = 2;

SELECT kurs.K_Nr, K_Titel
  FROM kurs LEFT OUTER JOIN themenverteilung
    ON kurs.K_Nr = themenverteilung.K_Nr
    WHERE D_Nr IS NULL
    ORDER BY TH_Nr;

SELECT D_Nachname, kurs.K_Nr, K_Titel
  FROM kurs LEFT OUTER JOIN themenverteilung
    ON kurs.K_Nr = themenverteilung.K_Nr
            LEFT OUTER JOIN dozent
    ON themenverteilung.D_Nr = dozent.D_Nr
    ORDER BY TH_Nr;

SELECT TN_nachname, U_Name
  FROM teilnehmer  t  FULL OUTER JOIN unternehmen u
    ON t.U_Nr = u.U_Nr;

SELECT TN_Stadt, COUNT(DISTINCT TN_PLZ)
  FROM teilnehmer
 GROUP BY TN_Stadt
 HAVING COUNT(TN_PLZ) > 20
 ORDER BY COUNT(TN_PLZ) DESC;

SELECT TN_Stadt, TN_PLZ, COUNT(TN_Nr)
  FROM teilnehmer
 GROUP BY TN_Stadt, TN_PLZ
 HAVING COUNT(TN_Nr) > 20
 ORDER BY COUNT(TN_Nr) DESC;

SELECT unternehmen.U_Nr, COUNT(B_Nr)
  FROM buchung INNER JOIN teilnehmer
    ON buchung.TN_Nr = teilnehmer.TN_Nr
               RIGHT OUTER JOIN unternehmen
    ON teilnehmer.U_Nr = unternehmen.U_Nr
 GROUP BY U_Name, unternehmen.U_Nr
 ORDER BY COUNT(B_Nr) DESC;

SELECT unternehmen.U_Nr, COUNT(DISTINCT B_Nr)
  FROM buchung INNER JOIN teilnehmer
    ON buchung.TN_Nr = teilnehmer.TN_Nr
               RIGHT OUTER JOIN unternehmen
    ON teilnehmer.U_Nr = unternehmen.U_Nr
 GROUP BY unternehmen.U_Nr
 ORDER BY COUNT(B_Nr) DESC;

SELECT unternehmen.U_Nr, COUNT(B_Nr)
  FROM buchung INNER JOIN teilnehmer
    ON buchung.TN_Nr = teilnehmer.TN_Nr
               RIGHT OUTER JOIN unternehmen
    ON teilnehmer.U_Nr = unternehmen.U_Nr
 GROUP BY unternehmen.U_Nr
 HAVING COUNT(B_Nr) = 0
  ORDER BY COUNT(B_Nr) DESC;

SELECT U_Name, unternehmen.U_Nr, COUNT(DISTINCT B_Nr)
  FROM buchung INNER JOIN teilnehmer
    ON buchung.TN_Nr = teilnehmer.TN_Nr
               RIGHT OUTER JOIN unternehmen
    ON teilnehmer.U_Nr = unternehmen.U_Nr
 GROUP BY unternehmen.U_Nr, U_Name
MINUS
SELECT U_Name, unternehmen.U_Nr, COUNT(B_Nr)
  FROM unternehmen INNER JOIN teilnehmer
    ON teilnehmer.U_Nr = unternehmen.U_Nr
               LEFT OUTER JOIN buchung
    ON buchung.TN_Nr = teilnehmer.TN_Nr
 GROUP BY unternehmen.U_Nr, U_Name

SELECT unternehmen.U_Nr, COUNT(B_Nr)
  FROM unternehmen LEFT OUTER JOIN teilnehmer
    ON teilnehmer.U_Nr = unternehmen.U_Nr
                   LEFT OUTER JOIN buchung
    ON buchung.TN_Nr = teilnehmer.TN_Nr
 GROUP BY unternehmen.U_Nr, U_Name

SELECT a.U_Name, a.U_Stadt
  FROM unternehmen a INNER JOIN unternehmen b
    ON a.U_Name = b.U_Name
 WHERE a.U_Stadt <> b.U_Stadt

SELECT SUBSTR(U_Name, 1, 30) AS NAME, U_Stadt, COUNT(U_Stadt)
  FROM unternehmen
  GROUP BY U_Name, U_Stadt
  ORDER BY COUNT(U_Stadt) ASC;

SELECT K_Bereich, AVG(TH_Tagessatz) 
  FROM themenverteilung INNER JOIN kurs
    ON themenverteilung.K_Nr = kurs.K_Nr
 GROUP BY K_Bereich;

SELECT U_Nr, SUM(B_Preis)
  FROM teilnehmer INNER JOIN buchung
    ON buchung.TN_Nr = teilnehmer.TN_Nr
  WHERE U_Nr = 150
  GROUP BY U_Nr;

SELECT U_Nr, SUM(B_Preis)
  FROM teilnehmer INNER JOIN buchung
    ON buchung.TN_Nr = teilnehmer.TN_Nr
  GROUP BY U_Nr;

SELECT U_Nr,
       buchung.TN_Nr,
       SUM(B_Preis),
       (SELECT SUM(B_Preis)
          FROM teilnehmer INNER JOIN buchung
            ON buchung.TN_Nr = teilnehmer.TN_Nr
         WHERE U_Nr = 150
         GROUP BY U_Nr) AS Gesamt
  FROM teilnehmer INNER JOIN buchung
    ON buchung.TN_Nr = teilnehmer.TN_Nr
  WHERE U_Nr = 150
  GROUP BY U_Nr, buchung.TN_Nr;

SELECT DISTINCT T_Nr
  FROM termin
 WHERE T_Nr NOT IN (SELECT DISTINCT T_Nr
                       FROM buchung);

SELECT K_Titel, K_Untertitel, P_TN1
  FROM kurs INNER JOIN preis
    ON kurs.P_Nr = preis.P_Nr
 WHERE P_TN1 > (SELECT AVG(P_TN1)
                  FROM kurs INNER JOIN preis
                    ON kurs.P_Nr = preis.P_Nr); 

SELECT DISTINCT
       (SELECT COUNT(K_Nr)
          FROM kurs) AS Gesamt,
       (SELECT AVG(K_Dauer)
          FROM kurs) AS Dauer,
       (SELECT AVG(P_TN1)
          FROM kurs INNER JOIN preis
            ON kurs.P_Nr = preis.P_Nr) AS Preis
  FROM kurs;  

SELECT B_Nr, B_NrAnmelder, TN_Nr, teilnehmer.TN_Nachname
  FROM buchung NATURAL JOIN teilnehmer
 WHERE T_Nr = 400
   AND TN_Nr = 386;

SELECT *
  FROM (SELECT termin.*, buchung.*, teilnehmer.*
          FROM termin INNER JOIN buchung
            ON termin.T_Nr = buchung.T_Nr
                      INNER JOIN teilnehmer
            ON buchung.TN_Nr = teilnehmer.TN_Nr
         WHERE TO_CHAR(T_Beginn, 'YYYY') = '2003'
           AND TO_CHAR(T_Beginn, 'MM')   = '12')  a
 WHERE B_NrAnmelder = 917;



SELECT DISTINCT
       (SELECT COUNT(B_Nr)
          FROM buchung INNER JOIN teilnehmer
            ON buchung.TN_Nr = teilnehmer.TN_Nr
         WHERE U_Nr= 200) AS Gesamt,
       (SELECT SUM(B_Preis)
          FROM buchung INNER JOIN teilnehmer
            ON buchung.TN_Nr = teilnehmer.TN_Nr
         WHERE U_Nr = 200) AS Gesamtpreis,
       (SELECT COUNT(DISTINCT T_Nr)
          FROM buchung INNER JOIN teilnehmer
            ON buchung.TN_Nr = teilnehmer.TN_Nr
         WHERE U_Nr = 200) AS Termine
  FROM buchung;  

SELECT DISTINCT
       (SELECT COUNT(B_Nr)
          FROM buchung INNER JOIN teilnehmer
            ON buchung.TN_Nr = teilnehmer.TN_Nr) AS Gesamt,
       (SELECT SUM(B_Preis)
          FROM buchung INNER JOIN teilnehmer
            ON buchung.TN_Nr = teilnehmer.TN_Nr) AS Gesamtpreis,
       (SELECT COUNT(DISTINCT T_Nr)
          FROM buchung INNER JOIN teilnehmer
            ON buchung.TN_Nr = teilnehmer.TN_Nr) AS Termine
  FROM buchung INNER JOIN teilnehmer
    ON buchung.TN_Nr = teilnehmer.TN_Nr; 

SELECT c.D_Nachname, a.K_Nr, a.TH_Tagessatz
  FROM themenverteilung a INNER JOIN kurs  b
    ON a.K_Nr = b.K_Nr
                          INNER JOIN dozent c
    ON a.D_Nr = c.D_Nr                        
  WHERE TH_Tagessatz = (SELECT MIN(d.TH_Tagessatz)
                          FROM themenverteilung d
                         WHERE d.K_Nr = a.K_Nr); 

SELECT T_Nr, T_Ort, D_Stadt,  D_Nachname, TO_CHAR(T_Beginn, 'MM')
  FROM termin a INNER JOIN kurs b
    ON a.K_Nr = b.K_Nr
                INNER JOIN themenverteilung c
    ON c.K_Nr = b.K_Nr
                INNER JOIN dozent d
    ON d.D_Nr = c.D_Nr
 WHERE TO_CHAR(T_Beginn, 'MM') = '08'
   AND T_Ort = (SELECT D_Stadt
                  FROM dozent e
                 WHERE e.D_Stadt = a.T_Ort
                   AND e.D_Nr    = c.D_Nr);
SELECT DISTINCT K_Bereich,
        ROUND((SELECT COUNT(termin.T_Nr)
           FROM termin INNER JOIN kurs b
            ON termin.K_Nr = b.K_Nr
         WHERE b.K_Bereich = a.K_Bereich) /
       (SELECT COUNT(buchung.T_Nr)
          FROM buchung INNER JOIN termin
            ON buchung.T_Nr = termin.T_Nr
                       INNER JOIN kurs b
            ON termin.K_Nr = b.K_Nr
          WHERE b.K_Bereich = a.K_Bereich),3)*100 AS P,
       (SELECT COUNT(buchung.T_Nr)
          FROM buchung INNER JOIN termin
            ON buchung.T_Nr = termin.T_Nr
                       INNER JOIN kurs b
            ON termin.K_Nr = b.K_Nr
          WHERE b.K_Bereich = a.K_Bereich) AS Nachfrage,
        (SELECT COUNT(termin.T_Nr)
           FROM termin INNER JOIN kurs b
            ON termin.K_Nr = b.K_Nr
         WHERE b.K_Bereich = a.K_Bereich) AS Angebot                  
 FROM kurs a;  

SELECT DECODE(TN_Anrede, 'Herr', 'Monsieur', 
                         'Frau', 'Madame', 
                         'INCONNU') AS Anrede,
              TN_Nachname
  FROM teilnehmer
 WHERE TN_Nr BETWEEN 1 AND 20;

SELECT CASE D_Anrede
       WHEN 'Herr' THEN 'Monsieur'
       WHEN 'Frau' THEN 'Madame'
       END CASE,
       D_Vorname,
       D_Nachname
  FROM dozent;      

SELECT K_Titel,
       K_Untertitel,
       CASE
       WHEN P_TN1 > 500 THEN 'Teuer'
       WHEN P_TN1 < 500 THEN 'Billig'
       ELSE '500' END CASE,
       P_TN1
  FROM kurs NATURAL JOIN preis;  

SELECT K_Titel,
       K_Untertitel,
       CASE
       WHEN P_TN1 > 900 THEN 'Teuer'
       WHEN P_TN1 < 900 THEN 'Billig'
       END CASE,
       P_TN1
  FROM kurs NATURAL JOIN preis;  

SELECT K_Titel,
       K_Untertitel,
       CASE
       WHEN P_TN1 > 900 THEN (SELECT P_TN2
                                FROM preis a INNER JOIN kurs b
                                  ON a.P_Nr = b.P_Nr
                               WHERE b.K_Nr = c. K_Nr) 
       WHEN P_TN1 < 900 THEN (SELECT P_TN2
                                FROM preis a INNER JOIN kurs b
                                  ON a.P_Nr = b.P_Nr
                               WHERE b.K_Nr = c. K_Nr)
       END CASE,
       P_TN1
  FROM kurs c INNER JOIN preis d
    ON c.P_Nr = d.P_Nr;  

SELECT CASE  TN_Anrede
       WHEN  'Herr' THEN 'Monsieur' 
       WHEN  'Frau' THEN 'Madame' 
       ELSE  'INCONNU' END,
       TN_Nachname
  FROM teilnehmer
 WHERE TN_Nr BETWEEN 1 AND 20;

SELECT SUBSTR(K_Titel || ' - ' || K_Untertitel, 1, 30) AS Titel,
       a.K_Nr,
       COUNT(D_Nr) AS Zahl,
       CASE
       WHEN COUNT(D_Nr) < 2 THEN 'Wenig'
       WHEN COUNT(D_Nr) = 2 AND COUNT(D_Nr) <=4 THEN 'Genug'
       ELSE 'Viel' END
  FROM themenverteilung a INNER JOIN kurs b
    ON a.K_Nr = b.K_Nr
 GROUP BY a.K_Nr, K_Titel, K_Untertitel;

SELECT SUBSTR(K_Titel || ' - ' || K_Untertitel, 1, 30) AS Titel,
       a.K_Nr,
       COUNT(D_Nr) AS Zahl,
       SUBSTR(CASE
       WHEN COUNT(D_Nr) = 1
        THEN (SELECT c.TH_Tagessatz
                FROM themenverteilung c
               WHERE c.K_Nr = a.K_Nr)
       WHEN COUNT(D_Nr) <=4
        THEN (SELECT MIN(c.TH_Tagessatz)
                FROM themenverteilung c
               WHERE c.K_Nr = a.K_Nr) 
       ELSE NULL END, 1, 5) AS Preis
  FROM themenverteilung a INNER JOIN kurs b
    ON a.K_Nr = b.K_Nr
 GROUP BY a.K_Nr, K_Titel, K_Untertitel;

SELECT kurs.K_Nr,
       NVL(TO_CHAR(D_Nr),'Niemand gefunden') AS D_Nr
  FROM kurs LEFT OUTER JOIN themenverteilung
    ON kurs.K_Nr = themenverteilung.K_Nr;

SELECT kurs.K_Nr,
       NVL(D_Nr,0) AS D_Nr
  FROM kurs LEFT OUTER JOIN themenverteilung
    ON kurs.K_Nr = themenverteilung.K_Nr;


SELECT kurs.K_Nr AS Kursnummer,
       COALESCE(themenverteilung.D_Nr, 0) AS Absolut
  FROM themenverteilung RIGHT OUTER JOIN kurs
    ON themenverteilung.K_Nr = kurs.K_Nr



SELECT ADD_MONTHS('28.02.2003', -1), '28.02.2003'
  FROM DUAL;

SELECT CEIL(5.02),
       ROUND(5.05),
       ROUND(5.05863, 2),
       FLOOR(5.085)
  FROM DUAL;

SELECT RTRIM('Zeichenkette    ')   || ' Ende',
       LTRIM('    Zeichenkette')   || ' Ende',
       TRIM('   Zeichenkette    ') || ' Ende'
  FROM DUAL;

SELECT K_Titel,
       K_Untertitel,
       TO_CHAR(P_TN1, 'C9999.99')      AS Euro,
       TO_CHAR(P_TN1*1.12, '$9999.99') AS Dollar
  FROM kurs INNER JOIN preis
    ON preis.P_Nr = kurs.P_Nr
 WHERE P_TN1*1.12 > 1300;

SELECT TO_DATE('24.12.2003'),
       TO_DATE('24-12-2003'),
       TO_DATE('24.12.03')
  FROM DUAL;

SELECT TO_DATE('January 15, 1989, 11:00 A.M.',
               'Month dd, YYYY, HH:MI A.M.',
               'NLS_DATE_LANGUAGE = American')
FROM DUAL;

SELECT TO_CHAR(SYSDATE,
               'Month Day dd DDD, YYYY, HH24:MI:SS A.M.',
               'NLS_DATE_LANGUAGE = American'),
               SYSDATE
FROM DUAL;
