U NIVERSITÄT B ERN I NFORMATIK VORLESUNG EI T YP H B LATT 4 (1/1) AUSGABE HS 08 Kurzbeschreibung des SELECT-Befehls von SQL Der SELECT-Befehl ist der wichtigste SQL-Befehl. Er dient zur Abfrage von Daten aus einer Datenbank. Die SELECT-Abfrage ist (vereinfacht) wie folgt definiert: SELECT * | <Attributliste> FROM <Tabellenliste> [ WHERE <Ausdrucksliste> ] In der <Attributliste> werden die Namen der gewünschten Kolonnen der in der <Tabellenliste> angegebenen Tabellen aufgeführt. Wird anstelle der <Attributliste> der Stern (*) angegeben, so werden alle Spalten der in der <Tabellenliste> verzeichneten Tabellen zurückgegeben (keine Auswahl von Spalten). In der <Tabellenliste> werden die Tabellennamen angegeben, auf die sich der SELECTBefehl bezieht. Mehr als ein Tabellenname erzeugt aus diesen Tabellen einen sogenannten Verbund (engl.: join). Der (optionalen) WHERE-Komponente folgt eine <Ausdrucksliste>, die die Suchbedingung des SELECT-Befehls darstellt. Die Auswertung der Suchbedingung ergibt entweder den Wert ’wahr’ oder ’falsch’. Dadurch wird entschieden, ob eine Zeile in das Ergebnis des SELECT-Befehls aufgenommen wird oder nicht. Eine Suchbedingung kann aus mehreren Teilbedingungen bestehen, die über logische Operatoren (AND / OR / NOT) miteinander verknüpft sind. Nebst der herkömmlichen Vergleichsoperatoren werden u. a. die folgenden Prädikate unterstützt. - BETWEEN - IN - EXISTS Wert innerhalb eines Intervalls. Test ob ein Ausdruck in einer angegebenen Ausdrucksliste vorhanden ist Test ob mindestens eine Ergebniszeile vorliegt Falls ein Spaltenname nicht eindeutig ist, wird der Tabellenname, durch ein Punkt getrennt, dem Spaltennamen vorangestellt: Beispiel: Kunde.KundenNr In der WHERE-Komponente eines SELECT-Befehls ist es möglich, einen weiteren SELECTBefehl anzugeben. Dieser geschachtelte SELECT-Befehl wird Unterabfrage (engl: subquery) genannt. Beispiel: Ausgabe der Kunden, die eine Rechnung über 100 Fr. erhalten haben. SELECT * FROM Kunde WHERE KundenNr IN (SELECT KundenNr FROM Rechnung WHERE Betrag > 100);