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:
| | |
... |
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
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 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:
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'
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 |