SQL: Unterschied zwischen den Versionen

Aus SibiWiki
Zur Navigation springen Zur Suche springen
Zeile 63: Zeile 63:


<code>
<code>
SELECT *
SELECT *
FROM klasse k, schueler s :D
 
 
FROM klasse k, schueler s  
</code>
</code>



Version vom 24. Februar 2012, 10:15 Uhr

Grundlegende SQL-Befehle

  • Informationen des Zentralabiturs (PDF): Datei:Datenbanken-Abi-2012.pdf
  • SQL-Sprachelemente im Zentralabitur:
    • SELECT, SELECT DISTINCT, FROM, WHERE, GROUP BY, ORDER BY, ASC, DESC, JOIN, LEFT JOIN, RIGHT JOIN, ON, UNION, AS
    • Vergleichsoperatoren: =, !=, >, <, >=, <=, LIKE, BETWEEN, IN, NOT IN, IS NULL
    • Logische Operatoren: AND, OR, NOT
    • Funktionen: COUNT, SUM, MAX, MIN

Beispieldatenbank Schule

  • An der Beispieldatenbank Schule können alle möglichen Datenbankabfragen durchprobiert werden.
  • Die Beispieldatenbank ist mit Absicht sehr schmal gehalten, damit man die Ergebnisse von SQL-Abfragen noch überprüfen kann.
  • Testen kann man SQL-Abfragen auf der Datenbank Schule hier. Die Zugangsdaten gibt's bei Herrn Kaibel

Datenbank-Schule.PNG

Relationenalgebra gemäß Zentralabitur

Selektion

Formuliere eine Selektionsabfrage, die alle Informationen zu Räumen mit mindestens 30 Plätzen zurückgibt.

SELECT * FROM raum r WHERE r.plaetze >= 30

Projektion

Unter Projektion versteht man die Reduktion der Informationen in dem Ergebnis auf ein oder mehrere Attribute. Formuliere für die Tabelle raum eine Projektionsabfrage, die die Etagen MIT Projektion wiedergibt. Welche Bedeutung hat dabei das Schlüsselwort DISTINCT? (Teste dies, indem du DISTINCT mal weglässt.)

TODO


Vereinigung

Formuliere eine Abfrage, die Name und Vorname von allen Lehrern UND Schülern wiedergibt.

SELECT l.name, l.vorname
FROM lehrer l
UNION
SELECT s.name, s.vorname
FROM schueler s

Differenz

Formuliere eine Abfrage, die alle Klassen ausgibt, die KEIN Mathematik haben.

SELECT k.name
FROM klasse k
WHERE k.id NOT IN(SELECT u.klasse_id 
                  FROM unterricht u 
                  WHERE u.fach='Mathe')

Kartesisches Produkt

In der Mathematik bezeichnet man als kartesisches Produkt (nach René Descartes) zweier Mengen A und B die Menge aller geordneten Paare (a,b), wobei a aus A und b aus B ist. (Kombination: „Jedes mit jedem“.) Geschrieben wird es als A x B gelesen als A kreuz B. Formuliere eine Abfrage für das kartesische Produkt von den Tabellen klasse und schueler. Inwiefern ist das Ergebnis “Jedes mit jedem”? Ist das Ergebnis inhaltlich sinnvoll? Warum? Warum nicht?

SELECT *


FROM klasse k, schueler s 

Umbenennung

Formuliere eine Abfrage über die Attribute klasse_id, lehrer_id, raum_id, fach und stunden der Tabelle unterricht. Dabei soll klasse_id in klassen-nr, lehrer_id in lehrer_nr und raum_id in raum-nr umbenannt werden.


SELECT u.klassen_id AS klassen-nr,u.lehrer_id AS Lehrer-nr,u.raum_id AS Raum-nr,u.fach,u.stunden
FROM unterricht u

Join

Formuliere eine Abfrage, die einen Join zwischen den Tabellen klasse und schueler durchführt. Bewerte das Ergebnis inhaltlich: In welchen Zusammenhängen braucht man Join?

SELECT *

FROM schueler s JOIN klasse k

Left-Join

Formuliere eine Abfrage, die einen Left-Join zwischen den Tabellen klasse und schueler durchführt. Bewerte das Ergebnis inhaltlich: In welchen Zusammenhängen braucht man Left-Join?

TODO

Right-Join

Formuliere eine Abfrage, die einen Right-Join zwischen den Tabellen klasse und schueler durchführt. Beschreibe den Unterschied zwischen Left-Join, Right-Join und Join.

TODO

SQL-Abfrage über mehrere verknüpfte Tabellen

Formuliere eine Abfrage, die angibt, in welchen Räumen die Klasse 8a unterrichtet wird. Die Abfrage läuft über die Tabellen klasse, unterricht und raum. Was unterscheidet diese Abfrage formal vom kartesischen Produkt? Was ist inhaltlich sinnvoller?

TODO