SELECT (SQL): Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
 
K (1 Versionen)
(kein Unterschied)

Version vom 13. Juni 2007, 16:55 Uhr

Mit SELECT werden Abfragen auf eine Datenbank ausgeführt. Diese Abfragen haben immer eine Ergebnismenge, welche jedoch auch leer sein kann. Eine SELECT Abfrage besteht immer aus drei Teilen, bei dem der dritten Teil optional ist: <code=SQL> SELECT ... FROM ... [WHERE ...][GROUP BY ... HAVING ...][ORDER BY ...]; </code=SQL> Der erste Teil beschreib den Aufbau der Ergebnismenge, der zweite beschreibt die Quellen, aus denen die Ergebnismenge aufgebaut werden soll und der dritte Teil gibt an was genommen oder nicht genommen werden soll.

SELECT Ausdruck

Der SELECT Ausdruck ist wie folgt aufgebaut: <code=SQL> SELECT [ALL | DISTINCT] element [AS spaltenname] </code=SQL> Das element können Funktionen, Spalten, der Stern-Operator * oder auch andere gültige SQL Operationen (mathmatische Berechnungen oder ähnliches) sein, es lassen sich die Elemente durch Kommas getrennt in den Ausdruck schreiben. <code=SQL> SELECT element1, element2, element3 </code=SQL>


ALL/DISTINCT

Mit dem Schlüsselwort ALL, welches auch verwendet wird wenn keins von beidem angegeben wird, werden alle Ergebnisse ausgegeben. DISTINCT sorgt für eine Entfernung redundanter Daten. So werden doppelte Datensätze im Ergebnis vermieden. <code=SQL> -- Wenn eine Tabelle mit den Datensätzen vorhanden ist -- ------------------- -- |spalte1 | spalte2| -- ------------------- -- | 1 | a | -- | 2 | a | -- | 3 | b | -- | 4 | b | -- | 5 | c | -- ------------------- SELECT DISTINCT spalte2 FROM tabelle; -- Das Ergebnis wäre dann -- ----------- -- | spalte2 | -- ----------- -- | a | -- | b | -- | c | -- ----------- </code=SQL> Wenn ALL eingesetzt werden würde, würden alle Datensätze angezeigt werden. Es ist auch möglich DISTINCT auf verschiedene Spalten anzuwenden, solange es nicht zu einer nicht verbindbaren Ergebnismenge kommt.

Spalten

Spalten können in dem Ausdruck normal mit ihrem Namen angegeben werden, werden jedoch mehrere Tabellen verwendet und der Name einer Spalte ist nicht mehr eindeutig muss er direkt einer Tabelle zugeordnet werden. Dies geschied mit dem Tabellennamen oder dem Alias für die Tabelle. SELECT spalte1, spalte2 FROM tabelle; SELECT tabelle.spalte1, spalte2 FROM tabelle; SELECT tab1.spalte1,tab2.spalte2 FROM tabelle1 tab,tabelle2 tab2;

Stern-Operator

Der Stern-Operator wird verwendet wenn alle Spalten einer Ergebnismenge erhalten werden wollen. Werden mehrere Tabellen verwendet können wie bei Spalten auch der Tabellenname oder Alias mit einem Punkt davorgesetzt werden um nur alle Spalten dieser Tabelle zu erhalten. <code=SQL> SELECT * FROM tabelle; SELECT tabelle.* FROM tabelle; SELECT tab1.*,tab2.* FROM tabelle1 tab,tabelle2 tab2; </code=SQL>


Es ist jedoch nicht erlaubt Elemente zu verwenden die unterschiedliche Anzahl von Ergebnismengen haben, z.B. <code=SQL> -- ----------- -- | spalte1 | -- ----------- -- | 1 | -- | 2 | -- | 3 | -- | 4 | -- ----------- SELECT COUNT(*),spale1 FROM tabelle; </code=SQL> Hier ist die Zuordnung nicht möglich, da COUNT(*) ein Ergebnis hat (die Zeilenanzahl) und spalte1 4 Ergebnisse hat.

AS Anweisung

Mit der AS Anweisung ist es möglich Spalten der Ergebnismenge neue Namen zu geben. So so ist es möglich das Ergebnis von Funktionen oder Spaltennamen in ein besserverständliches Format bringen. Die Angabe erfolgt immer direkt nach dem Ausdruck mit dem Schlüsselwort AS gefolgt von dem Namen. Der Name darf/kann nach ASNI Standard keine Leerzeichen enthalten. <code=SQL> SELECT COUNT(*) AS Anzahl FROM tabelle; SELECT spalte2 AS Spalte_3, spalte1 AS Spalte_10 FROM tabelle; </code=SQL>

FROM Anweisung

Der zweite Teil beginnt mit FROM, gefolgt von den Tabellen, welche man abfragen will. Die Tabellen werden wie die Spalten durch Kommas getrennt. Nach den Tabellennamen lassen sich auch Aliasnamen festlegen, dies wird durch das optionale Schlüsselwort AS gemacht. <code=SQL> -- tab2 kann hier auch alternativ für tabelle2 verwendet werden SELECT * FROM tabelle1 AS tab1, tabelle2 tab2, tabelle3; </code=SQL> Gibt man hier mehrere Tabellen an sollte man zusätzlich Join Konstruktur verwendet um keine unerwünschten Ergebnisse zu erhalten.

WHERE Anweisung

Mit den Bedingungen, die auf die WHERE Anweisung folgen, ist es möglich die Ergebnismenge einzugrenzen. Jede Bedinung muss einen boolschen Ausdruck als Ergebnis haben. Als Bedingung kann jede gültige SQL Operation verwendet werden.

GROUP BY/HAVING Anweisung

Mit der GROUP BY Anweisung lassen sich einzelne doppelte Werte von einzelnen Spalten zusammenfassen. Dabei ist aber zu beachten, dass Spalten, die nicht gruppiert werden, nur in Aggregatfunktionen verwerdet werden können. Desweiteren darf nach ANSI SQL die Anweisung nur auf die auszugebenden Spalten angewand werden.

Mit dem optionalen HAVING Teil lassen sich die gruppierten Spalten noch einmal aussortieren. Die Anweisung erhält optionale Ausdrücke, welche wiederum einen boolschen Wert zurückliefern müssen