Home - SQL Befehle - Datenmanipulation www.sqldocu.com
zurück vor



Daten abfragen


Beschreibung
top
Informationen werden mit den Befehl SELECT gewonnen. Will man den Inhalt einer Tabelle abfragen gelingt dies mit:
SELECT * FROM Tabellenname

* ... Zeige mir alle Spalten der Tabelle (vergleichbar mit white card
aus Shell: dir *.*). Möchte man den Inhalt einer bestimmt Spalte erhalten, so ist statt * der SpaltenName anzugeben (z.B: SELECT Spalte1 FROM TabellenName)
TabellenName ... Namen der Tabelle die angezeigt werden soll

Mit SELECT können gleichzeitig mehrere Tabellen angesprochen werden. Solche Abfragen werden als JOINS bezeichnet (siehe Kapitel Abfragen über mehrere Tabellen). Damit Zugriff auf einzelne Reihen einer Tabelle besteht existiert es das Schlüllelwort WHERE. Nehmen wir an in der Tabelle Crew sind in der Spalte Namen alle Namen der Crew des Raumschiffes Enterprice gespeichert. In der Spalte Alter steht das entsprechende Lebensalter. Um alle Crewmitglieder aufzulisten die Älter als 40 Jahre sind verwendet man:
SELECT Name FROM Crew WHERE Alter > 40
Syntax:
SELECT
DISTINCT | ALL   optional  
* | SpaltenName1 [,SpaltenName2] [,..] | Ausdruck
FROM TabellenName
WHERE Bedingung   optional  
GROUP BY SpalteName1 [,SpaltenName2] [,..] [ HAVING SUCHBEDINGUNG ]   optional  
ORDER BY SpaltenName | ReferenzNummer [ ASC | DESC ]   optional  
| ... trennt Syntaxmöglichkeiten (entweder oder)
[] ... Syntax innerhalb dieser Klammern ist optional
optional ... Syntax in dieser Zeile ist optional
Beispiele:
SELECT * FROM TabellenName
SELECT Spalte1 FROM TabellenName
SELECT DISTINCT Spalte1,Spalte3 FROM TabellenName
SELECT Spalte4,Spalte1 FROM TabellenName WHERE Spalte7=24

Beispiel Tabelle:
top
Sie wird in mehreren Beispielen verwendet um SQL besser darstellen zu können.
TabelleName: emailAdressen
Die Tabelle emailAdressen besteht aus 4 Spalten und 5 Reihen
Spalte1 hat den Namen vorname.
Spalte2 hat den Namen nachname
Spalte3 hat den Namen email
Spalte4 hat den Namen gewicht

Spaltenname vorname nachname email gewicht
Reihe 1 Michaela König michi@yahoo.de 71
Reihe 2 Kati Müller kati@hotmail.com 48
Reihe 3 Conny Schmid conny3@hotmail.com 63
Reihe 4 Linda Becker linda@hotmail.de 56
Reihe 5 Kati Auer kati@gmx.de 52




Ganze Tabelle anzeigen
top
SELECT * FROM emailAdressen

Mit diesem SQL Befehl werden alle Spalten der Tabelle mit dem Namen emailAdressen in der Ergebnistabelle augelistet.

Ergebnistabelle:
Michaela König michi@yahoo.de 71
Kati Müller kati@hotmail.com 48
Conny Schmid conny3@hotmail.com 63
Linda Becker linda@hotmail.de 56
Kati Auer kati@gmx.de 52

Tabelle emailAdressen anzeigen
PHP Syntax     PERL Syntax


Eine (bzw. mehrere) Spalte(n) einer Tabelle anzeigen
top
SELECT vorname FROM emailAdressen

Mit diesem SQL Befehl wird die Spalte vorname der Tabelle emailAdressen in der Ergebnistabelle augelistet.

Ergebnistabelle:
Michaela
Kati
Conny
Linda
Kati

Hinweis: In der Ergebnistabelle wird Kati zweimal aufgelistet, was nicht überascht da Kati in der Tabelle emailAdressen zweimal vorkommt. Um doppelt bzw. mehrfach vorkommende Reihen in der Ergebnistabelle zu verhindern siehe DISTINCT

Tabelle emailAdressen anzeigen

SELECT vorname, email FROM emailAdressen

Mit diesem SQL Befehl werden die Spalten vorname und email der Tabelle emailAdressen in der Ergebnistabelle augelistet.

Ergnistabelle:
Michaela michi@yahoo.de
Kati kati@hotmail.com
Conny conny3@hotmail.com
Linda linda@hotmail.de
Kati kati@gmx.de

Tabelle emailAdressen anzeigen
PHP Syntax     PERL Syntax


Doppelte (mehrfache) Auflistungen verhindern
top
SELECT DISTINCT vorname FROM emailAdressen

Mit DISTINCT wird ein eindeutiges Ergebnis erzwungen. Die Ergebnistabelle enthält keine Reihen die doppelt bzw. mehrfach vorkommen

Ergebnistabelle:
Michaela
Kati
Conny
Linda

Zum Vergleich Resultat mit: SELECT vorname FROM emailAdressen.

Ergebnistabelle:
Michaela
Kati
Conny
Linda
Kati

Wird DISTINCT nicht verwendet verwendet das RDBMS default die Option ALL. ALL erlaubt doppelte bzw. mehrfache Datensätze in der Ergebnistabelle.

Tabelle emailAdressen anzeigen
PHP Syntax     PERL Syntax


Abfrage mit einer Bedingung (Reihen selektieren)
top
SELECT vorname, gewicht FROM emailAdressen WHERE gewicht >60

Mit diesem SQL Befehl werden alle Reihen der Spalten vorname und gewicht angezeigt für die gilt: gewicht > 60.


Ergebnistabelle:
Michaela 71
Conny 63

Tabelle emailAdressen anzeigen
PHP Syntax     PERL Syntax


Abfrage mit GROUP BY
top
SELECT vorname FROM emailAdressen GROUP BY vorname

Mit GROUP BY kann das Ergebnis in Gruppen aufgeteilt werden. Dies ist ein sehr einfaches Beispiel und das gleiche Resultat hätten wir mit der Option DISTINCT erhalten. Wir erhalten 4 Gruppen (Michaela,Kati,Conny,Linda). Die Gruppe Kati besteht aus 2 Mitgliedern alle anderen bestehen aus einem Mitglied.

Ergebnistabelle:
Michaela 71
Conny 63

Im nächsten Beispiel wird der Sinn von GROUP BY klarer.

TabelleName: crew
Die Tabelle crew besteht aus 2 Spalten und 5 Reihen
Spalte1 hat den Namen abteilung.
Spalte2 hat den Namen name

Spaltenname abteilung name
Reihe 1 Bruecke Captain Kirk
Reihe 2 Krankenstation Dr. Mc Coy
Reihe 3 Krankenstation Schwester Chapel
Reihe 4 Bruecke Mr. Spock
Reihe 5 Bruecke Uhura

Wir wollen uns alle Abteilungen ausgeben lassen. Gleichzeitig möchten wir wissen wieviele Crew Mitglieder in der Abteilung arbeiten:

SELECT abteilung, count (*) FROM crew GROUP BY abteilung

Ergebnistabelle:
Bruecke 3
Krankenstation 2

Erklärung: Die Aggregat Funktion count(*) zählt die zur Gruppe gehörenden Reihen (siehe Aggregat Funktionen).
SELECT DISTINCT abteilung, count (*) FROM crew führt zu einer Fehlermeldung des SQL Compilers!!!! GROUP BY erlaubt zusätzlich die Option HAVING Suchbedingung.
Mehr dazu in Beschreibung GROUP BY

PHP Syntax     PERL Syntax


Abfrageergebnis ordnen
top
SELECT * FROM emailAdressen ORDER BY nachname

Die Ergebnistabelle wird aufsteigend nach der Spalte nachnamen ausgegebe

Ergebnistabelle:
Kati Auer kati@gmx.de 52
Linda Becker linda@hotmail.de 56
Michaela König michi@yahoo.de 71
Kati Müller kati@hotmail.com 48
Conny Schmid conny3@hotmail.com 63

Tabelle emailAdressen anzeigen

SELECT * FROM emailAdressen ORDER BY nachname DESC

Die Option DESC sortiert das Ergebnis absteigend.
ASC   ... aufsteigend Sortieren, standartmässig eingestellt und kann daher entfallen.
DESC ... absteigend sortieren.
Ergebnistabelle:
Conny Schmid conny3@hotmail.com 63
Kati Müller kati@hotmail.com 48
Michaela König michi@yahoo.de 71
Linda Becker linda@hotmail.de 56
Kati Auer kati@gmx.de 52

Tabelle emailAdressen anzeigen

SELECT * FROM emailAdressen ORDER BY vorname DESC, nachname DESC

Die Spalte vorname enthält "Kati" zweimal. Die Reihenfolge ist somit nicht eindeutig definiert. Es existiert die Möglichkeit eine zweite Spalte beim Ordnen miteinbeziehen.

Ergebnistabelle:
Michaela König michi@yahoo.de 71
Kati Müller kati@hotmail.com 48
Kati Auer kati@gmx.de 52
Linda Becker linda@hotmail.de 56
Conny Schmid conny3@hotmail.com 63

Hinweis: Natürlich können weitere Spalten zum Ordnen miteingebunden werden. Das Einbeziehen von mehr als einer Spalte beim Sortieren ist im ANSI Standart nicht definiert. Dennoch unterstützen es nahezu alle RDBMS. (z.B: Oracle, MySQL, Informix)

Tabelle emailAdressen anzeigen
PHP Syntax     PERL Syntax


Zählen von Reihen (Datensätzen)
top
SELECT COUNT(*) FROM emailAdressen

COUNT(*) liefert die Anzahl der Reihen in der Tabelle emailAdressen. Für emailAdressen liefert die obere Anweisung 5.

Weitere Möglichkeiten und Syntax von COUNT() siehe Aggregatfunktionen.

Hinweis: Manche RDBMS erwarten COUNT(*), andere COUNT (*).

SELECT COUNT(*) FROM emailAdressen
WHERE Vorname LIKE '%a'

COUNT(*) zählt alle emailAdressen der Tabelle, die einen Vornamen enthalten, der mit "a" endet. (Linda und Michaela enden auf mit dem Buchstaben a und die Abfrage liefert somit 2). Auf den Operator like wird im Kapitel Operatoren eingegangen.

Tabelle emailAdressen anzeigen
PHP Syntax     PERL Syntax


Weitere Funktionen (Mittelwert, Summenbildung, Max-/Minimum etc.)
top
SELECT Ausdruck FROM emailAdressen

Ausdruck steht für eine beliebige Aggregatfunktion. Diese werden im Kapitel Aggregatfunktion beschrieben.
Hier eine Liste mit Kurzbeschreibung:

AGV ... Berechnet Mittelwert (Durchschnitt)
COUNT ... Zählt die übergebenen Datensätze (z.B: Anzahl der Reihen in Tabelle)
MAX ... Berechnet Maxiumum einer Spalte
MIN ... Berechnet Minimum einer Spalte
SUM ... Berechnet Summe einer Spalte


top