SQL-10: Unterschied zwischen den Versionen

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


<code>
<code>
   SELECT <u>'''SUM(u.stunden)'''</u>
   SELECT <u>'''SUM(stunden)'''</u>
   FROM unterricht u
   FROM unterricht
   WHERE u.fach = 'Sport'
   WHERE fach = 'Sport'
</code>
</code>


Hier werden die Attributwerte <code>stunden</code> <u>summiert</u> (d.h. zusammenaddiert).
Hier werden die Attributwerte <code>stunden</code> <u>summiert</u> (d.h. zusammenaddiert).


==GROUP BY==
==GROUP BY==

Version vom 23. März 2014, 19:15 Uhr


SQL steht für Structured Query Language und ist die Standard-Programmiersprache für die Abfrage von Datenbanken.

Hier finden sich Erläuterungen zu allen SQL-Techniken, die in der 9. Klasse wichtig sind.

Zu diesen Techniken gibt es auch Aufgaben, die man zur Übung selber bearbeiten kann.


Übersicht über die SQL-Befehle in Klasse 09

  • SELECT, SELECT DISTINCT, FROM, WHERE, GROUP BY, ORDER BY, ASC, DESC, AS
  • Vergleichsoperatoren: =, !=, >, <, >=, <=, LIKE
  • Logische Operatoren: AND, OR
  • Aggregat-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

Aufbau von SQL-Abfragen

Für den Aufbau von SQL-Abfragen gilt folgende Reihenfolge:

SELECT ...
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ...

SELECT und FROM müssen auf jeden Fall dabei sein, die anderen Teile sind optional.


Einfache Abfrage mit SELECT, FROM, WHERE

Bei SELECT kann man die Attribute angeben, die ausgegeben werden sollen. Mehrere Attribute werden durch Komma getrennt.

Beispiel 1: Eine SQL-Abfrage, die die Raumnummer und Etage zu Räumen mit mindestens 30 Plätzen zurückgibt.

SELECT nummer, etage
FROM raum
WHERE plaetze >= 30

Man kann auch SELECT * angeben - dann werden alle Attribute ausgegeben.

Beispiel 2: Eine SQL-Abfrage, die alle Attribute zu Räumen mit mindestens 30 Plätzen zurückgibt.

SELECT *
FROM raum
WHERE plaetze >= 30

DISTINCT

Mit DISTINCT kann man dafür sorgen, dass in der Ausgabe jeder Wert nur einmal vorkommt.

Beispiel:

Eine SQL-Abfrage, die für die Tabelle raum die Etagen wiedergibt.

 SELECT DISTINCT etage
 FROM raum

Ohne DISTINCT würde jede Etage mehrfach aufgeführt - so oft, wie es Zeilen in der Tabelle gibt.

Aggregat-Funktionen (COUNT, MAX, MIN, SUM, AVG)

Mit den sog. Aggregat-Funktionen kann man Attributwerte aus mehreren Zeilen zusammenfassen.

Beispiel 1:

Mit der folgenden SQL-Abfrage kann man ermitteln, wie viele Schüler es gibt.


  SELECT COUNT(*)
  FROM schueler

Hier werden die Zeilen gezählt. Mit COUNT(*) wird nicht ein Attribut gezählt, sondern jede Zeile, die ein Attribut enthält.

Beispiel 2:

Mit der folgenden Abfrage kann man ermitteln, wie viele Stunden Sport unterrichtet werden.

  SELECT SUM(stunden)
  FROM unterricht
  WHERE fach = 'Sport'

Hier werden die Attributwerte stunden summiert (d.h. zusammenaddiert).

GROUP BY

Mit GROUP BY kann man Zeilen, die einen gemeinsamen Attributwert aufweisen, zusammenfassen.

Beispiel:

Mit der folgenden Abfrage erhält man eine Liste der Etagen, und für jede Etage wird notiert, wie viele Plätze in ihr insgesamt enthalten sind.

  SELECT etage, SUM(plaetze)
  FROM raum
  GROUP BY etage

Umbenennung

Die Spalten, die ausgegeben werden, können umbenannt werden.

Das ist vor allem bei Funktionen hilfreich, weil die Spaltenüberschrift dann manchmal nicht so selbsterklärend ist...

Beispiel:

Mit der folgenden Abfrage erhält man eine Liste der Etagen, und für jede Etage wird notiert, wie viele Plätze in ihr insgesamt enthalten sind.

Die Überschriften in der Tabelle sind "Etage" und "Plaetze_Insgesamt"

  SELECT etage AS Etage, SUM(plaetze) AS Plaetze_Insgesamt
  FROM raum
  GROUP BY etage

Mehrere Bedingungen: AND, OR

In SQL-Abfragen kann man mehrere Bedingungen kombinieren. Dafür gibt es die Schlüsselwörter AND, OR.

Beispiel:

Die Nummer und die Plätze von allen Räumen aus der unteren und der mittleren Etage.

  SELECT nummer, plaetze
  FROM raum
  WHERE etage = 'unten' OR etage = 'Mitte'

Abfrage über mehrere verknüpfte Tabellen

Interessant werden Datenbankabfragen erst dann, wenn man Informationen aus mehreren Tabellen miteinander verknüpft!

Beispiel:

Eine Abfrage, die angibt, in welchen Räumen die Klasse 8a unterrichtet wird.

SELECT raum.nummer
FROM klasse, unterricht, raum
WHERE raum.id=unterricht.raum_id
AND unterricht.klasse_id=klasse.id
AND klasse.name = '8a'

Erläuterungen:

  • Die Abfrage läuft über drei Tabellen: klasse, unterricht und raum.
  • Die Tabellen werden wie folgt miteinander verknüpft:
    • klasse und unterricht: Das Attribut <id> in der Tabelle klasse muss mit dem Attribut klasse_id in der Tabelle unterricht übereinstimmen!
    • unterricht und raum: Das Attribut <id> in der Tabelle raum muss mit dem Attribut raum_id in der Tabelle unterricht übereinstimmen!
    • Wichtig: Bei Abfragen über mehrere Tabellen braucht man einen Vergleich weniger als man Tabellen abfragt. D.h. bei drei Tabellen braucht man zwei Verknüpfungen.
    • Punkt-Notation:: Manche Attribute (z.B. id) kommen in mehreren Tabellen vor. Damit SQL weiß, um welche Tabelle es sich handelt, muss man die Tabelle angeben und mit einem Punkt danach das Attribut. Beispiel: raum.id