php Logo

Paul Ferd. Siegert Datenbankgestützte Webseiten

 
Datenbankabfragen

Suchbefehle

Weil die Suche so zentral ist, soll ihnen ein eigener Abschnitt gewährt werden.

(1) SELECT id FROM tname
(2) SELECT id,nname,vname FROM tname
(3) SELECT * FROM tname


(1) Alle ids der Tabelle tname werden zurückgegben.
(2) Die Werte der Felder id,nname,vname der Tabelle tname werden zurückgegben.
(3) Alle Felder der Tabelle tname werden zurückgegben.

SELECT COUNT (feld) FROM tname

Anzahl der Datensätze der Tabelle tname

SELECT feld1, feld2,… FROM tname WHERE...

WHERE

Hinter dem Schlüsselwort WHERE können nun die Einschränkungen definiert werden.

WHERE...

autor>‘L‘

Alle Autoren nach L

id IN (2,7,31…)

id muss im set sein

LIMIT n
LIMIT offset,n


die ersten n Datensätze ab offset, beginnend bei 0

LIKE ’%er%’

% ist eine wildcard. Alle Autoren in denen ein „er“ vorkommt, egal ob „Meier“ oder „Siegert“ werden gefunden. Die Suche ist case-sensitive, achtet also auf Gross- und Kleinschreibung. Soll die Gross- und Kleinschreibung ignoriert werden kann mann die Suche folgendermassen durchführen:
SELECT 'A' LIKE UPPER(spalte) FROM tabelle;

ORDER BY

Zusätzlich können die Fundstellen noch sortiert werden

ORDER BY feld

Fundstellen werden aufsteigend sortiert, nach dem angegeben Feld.

DESC

... und mit diesem Zusatz absteigend.


GROUP BY / HAVING

Wenn aus einer Literaturdatenbank, in der viele Autoren mehrfach vorkommen, eine Autorenliste generiert werden soll, in der jeder Autor nur einmal auftaucht, dann wird GROUP BY verwendet.

SELECT autor FROM litDB GROUP BY autor

GROUP BY kann in Kombination mit WHERE verwendet werden. Mit der HAVING Klausel kann man sich dann auf die durch GROUP BY erzeugten Gruppen beziehen:

SELECT autor FROM litDB GROUP BY autor HAVING autor>’L’


Umgang mit mehreren Tabellen

Bei der Suche in mehreren Tabellen stellt sich z.B. die Frage welche id denn gemeint ist, die von Tabelle A oder die von Tabelle B. Also muß ma die Felder mit dem Tabellennamen und dem Feldnamen referenzieren. Als Trenner wird ein Punkt gesetzt:

tname.feldname

Eine andere Möglichkeit ist, den Feldern neue Namen für die Ergebnisausgabe zuzuweisen. Eine Technik, die besonders bei den Aggregatfunktionen (s.u.) sinnvoll ist.

Mit AS läßt sich in der Ergebnistabelle ein Feld anlegen:

SELECT artikel.nummer,
       artikel.preis AS netto,
       artikel.preis * artikel.mwst AS brutto
FROM artikel
Ergebnis:
nummer     netto    brutto
111234      10       11.60
735471      20       23,20
…


Ausgangstabellen für die fogenden Beispiele:

band ba_kreuz album label
ID name labelid ID bandid albumid ID titel id firma
1 Blondie 1 1 1 2 1 Apostrophe 1 Polydor
2 Zappa 2 2 2 1 2 Parallel Lines 2 Vergin
3 Heaven 17 1 3 3 4 3 Paint and Paint
4 Haircut 100 2 4 4 3 4 The Luxury Gap

Aggregatfunktionen

MySQL kennt eine Reihe von sogenannten Aggregatfunktionen, die aus den Spaltenwerten einer Tabelle bereits bei der Abfrage einen Wert ermitteln.

Folgende Aggregatfunktionen kennt MySQL:

Funktion Beschreibung
count(Spalte) Anzahl der Felder dieser Spalte, die nicht null sind
count(*) Anzahl aller Felder der Spalte
AVG(Spalte) Gibt den Mittelwert der Felder einer Spalte zurück
MIN(Spalte) Gibt den kleinsten Wert der Felder der Spalte zurück
MAX(Spalte) Gibt den größten Wert der Felder der Spalte zurück
SUM(Spalte) Gibt die Summe der Werte der Felder der Spalte zurück
STD(Spalte) Gibt die Standardabweichung zurück

Beispiel:

(-> Ausgangstabellen)


Joins

Cross Join

SELECT name, titel FROM band,album

gleichbedeutend mit

SELECT name, titel FROM band CROSS JOIN album

Kreuzverband (=FULL JOIN, vollständiger Verbund): Jeder Datensatz der Tabelle band wird mit der Tabelle album verbunden.
Die Anzahl der Datensätze des Ergebnises ist also das Produkt der Datensätze von band und album (4*4 = 16).

(-> Ausgangstabellen)

Die Verknüpfung wird in der angegebenen Reihenfolge vorgenommen.
Mit der ON Klausel können die Ergebnisse eingeschränkt werden.

(-> Ausgangstabellen)

Left Join

LEFT JOIN (= LEFT OUTER JOIN, qualifizierter äußerer Verbund):
Alle Datensätze der linken Tabelle werden übernommen und kombiniert

(-> Ausgangstabellen)

Right Join

RIGHT JOIN (= RIGHT OUTER JOIN, qualifizierter äußerer Verbund):
Alle Datensätze der rechten Tabelle werden übernommen und kombiniert

(-> Ausgangstabellen)


Unterabfragen

Unterabfragen stehen in Klammern und sich Bestandteil eines übergeordneten SELECT (ab MySQL Version 4.1.0).

SELECT firma FROM label WHERE id=(SELECT MAX(id) FROM band)