Navigation

Auswahlabfragen

Auswahlabfrage:


Eine Auswahlabfrage liefert ein Ergebnis einer Abfrage (eine Datenmenge) wieder,
das ist der grundlegendeste Unterschied zwischen einer Auswahlabfrage und einer Aktionsabfrage.


Alle Auswahlabfragen beginnen mit einem SELECT, wonach die Auflistung der Felder folgt.
Die Felder können einfach nur Tabellenfelder sein oder auch berechnete Felder.
Berechnete Felder benötigen einen Alias und existieren nur innerhalb der Abfrage.
Einzelne Felder sind mit einem Komma voneinander zu trennen.
Man kann hier auch mit dem Asterisk arbeiten um alle Felder einer Tabelle als Ergebnis zu bekommen.


Nach der Auflistung folgt die Herkunft, welche mit einem FROM begonnen wird.
Wenn man Daten aus mehreren Tabellen vereinen will, dann verbindet man die Tabellen mittels eines JOINs.
Auf die Arten der Verknüpfungen gehe ich hier noch nicht ein.
Für einfache Beispiel reicht ein ganz einfaches INNER JOIN.


Nach der Herkunft folgen eventuelle Kriterien, die mit einem WHERE/HAVING begonnen werden.
Diese Kriterien dienen zum Eingrenzen der zurückgegebenen Datenmenge


Nach dem WHERE/HAVING können noch ORDER BY-Klauseln (Sortierfunktionen) oder GROUP BY-Klauseln (Gruppierungsfunktion) folgen.


Ein paar Beispiele:

Suche alle Felder der Tabelle 'Test':

SELECT
	*
FROM
	Test

Suche Feld1, 2 und 3 der Tabelle 'Test':

SELECT
	Feld1,
	Feld2,
	Feld3
FROM
	Test

Suche alle Felder der Tabelle 'Test' bei denen ein Feld einem Wert entspricht:

SELECT
	*
FROM
	Test
WHERE
	Feld = Wert

Hierbei muss man nun unterscheiden, wonach man sucht (Zahl, Text, Datum).
Bei einer Zahl muss man nur darauf achten, dass das Dezimaltrennzeichen kein Komma, sondern ein Punkt ist:

WHERE Feld = 0.5

Bei Texten muss man die Kriterien in Hochkommatas setzen. Platzhalter gehören entweder in die Hochkommata oder müssen als Verkettung ersichtlich sein.
Desweiteren muss hier der Vergleichsoperator zu einem Like werden:

WHERE Feld = 'XYZ'
WHERE Feld Like '*xyz*'
WHERE Feld Like '*' & 'xyz' & '*'

Ein Datum muss in Rauten gesetzt werden und als mm/tt/jjjj formatiert sein:

WHERE Feld = #12/31/2004#

Suche alle Felder aus Tabelle1 und Tabelle2, deren Wert im Feld2, der Tabelle1 gleich 2 ist. Die beiden Tabellen werden über Feld1 verbunden:

SELECT
	Tabelle1.*,
	Tabelle2.*
FROM
	Tabelle1
	INNER JOIN
	    Tabelle2 ON
	        Tabelle1.Feld1 = Tabelle2.Feld1
WHERE
	Tabelle1.Feld2 = 2

Wie man hier sieht, muss nun die Tabellen explizit mit angeben, da es sonst bei gleichen Feldnamen zu Verwechslungen kommen kann.