SELECT (SQL): Unterschied zwischen den Versionen
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.
Inhaltsverzeichnis
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