SELECT (SQL): Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
 
K
 
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
Mit <code>SELECT</code> werden Abfragen auf eine Datenbank ausgeführt. Diese Abfragen haben immer eine Ergebnismenge, welche jedoch auch leer sein kann. Eine <code>SELECT</code> Abfrage besteht immer aus drei Teilen, bei dem der dritten Teil optional ist:
 
Mit <code>SELECT</code> werden Abfragen auf eine Datenbank ausgeführt. Diese Abfragen haben immer eine Ergebnismenge, welche jedoch auch leer sein kann. Eine <code>SELECT</code> Abfrage besteht immer aus drei Teilen, bei dem der dritten Teil optional ist:
<code=SQL>
+
<syntaxhighlight lang="sql">
 
SELECT ... FROM ... [WHERE ...][GROUP BY ... HAVING ...][ORDER BY ...];
 
SELECT ... FROM ... [WHERE ...][GROUP BY ... HAVING ...][ORDER BY ...];
</code=SQL>
+
</syntaxhighlight>
 
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.
 
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==
 
==SELECT Ausdruck==
 
Der SELECT Ausdruck ist wie folgt aufgebaut:
 
Der SELECT Ausdruck ist wie folgt aufgebaut:
<code=SQL>
+
<syntaxhighlight lang="sql">
 
SELECT [ALL | DISTINCT] element [AS spaltenname]
 
SELECT [ALL | DISTINCT] element [AS spaltenname]
</code=SQL>
+
</syntaxhighlight>
 
Das '''element''' können [[Funktionen (SQL)|Funktionen]], Spalten, der Stern-Operator '''*''' oder auch andere gültige [[Operation (SQL) | SQL Operationen]] (mathmatische Berechnungen oder ähnliches) sein, es lassen sich die Elemente durch Kommas getrennt in den Ausdruck schreiben.
 
Das '''element''' können [[Funktionen (SQL)|Funktionen]], Spalten, der Stern-Operator '''*''' oder auch andere gültige [[Operation (SQL) | SQL Operationen]] (mathmatische Berechnungen oder ähnliches) sein, es lassen sich die Elemente durch Kommas getrennt in den Ausdruck schreiben.
<code=SQL>
+
<syntaxhighlight lang="sql">
 
SELECT element1, element2, element3
 
SELECT element1, element2, element3
</code=SQL>
+
</syntaxhighlight>
  
  
 
===ALL/DISTINCT===
 
===ALL/DISTINCT===
 
Mit dem Schlüsselwort <code>ALL</code>, welches auch verwendet wird wenn keins von beidem angegeben wird, werden alle Ergebnisse ausgegeben. <code>DISTINCT</code> sorgt für eine Entfernung redundanter Daten. So werden doppelte Datensätze im Ergebnis vermieden.
 
Mit dem Schlüsselwort <code>ALL</code>, welches auch verwendet wird wenn keins von beidem angegeben wird, werden alle Ergebnisse ausgegeben. <code>DISTINCT</code> sorgt für eine Entfernung redundanter Daten. So werden doppelte Datensätze im Ergebnis vermieden.
<code=SQL>
+
<syntaxhighlight lang="sql">
 
-- Wenn eine Tabelle mit den Datensätzen vorhanden ist
 
-- Wenn eine Tabelle mit den Datensätzen vorhanden ist
 
-- -------------------
 
-- -------------------
Zeile 38: Zeile 38:
 
-- | c      |
 
-- | c      |
 
-- -----------
 
-- -----------
</code=SQL>
+
</syntaxhighlight>
 
Wenn <code>ALL</code> eingesetzt werden würde, würden alle Datensätze angezeigt werden. Es ist auch möglich <code>DISTINCT</code> auf verschiedene Spalten anzuwenden, solange es nicht zu einer nicht verbindbaren Ergebnismenge kommt.
 
Wenn <code>ALL</code> eingesetzt werden würde, würden alle Datensätze angezeigt werden. Es ist auch möglich <code>DISTINCT</code> auf verschiedene Spalten anzuwenden, solange es nicht zu einer nicht verbindbaren Ergebnismenge kommt.
  
Zeile 49: Zeile 49:
 
===Stern-Operator===
 
===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.
 
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>
+
<syntaxhighlight lang="sql">
 
SELECT * FROM tabelle;
 
SELECT * FROM tabelle;
 
SELECT tabelle.* FROM tabelle;
 
SELECT tabelle.* FROM tabelle;
 
SELECT tab1.*,tab2.* FROM tabelle1 tab,tabelle2 tab2;
 
SELECT tab1.*,tab2.* FROM tabelle1 tab,tabelle2 tab2;
</code=SQL>
+
</syntaxhighlight>
  
  
 
Es ist jedoch nicht erlaubt Elemente zu verwenden die unterschiedliche Anzahl von Ergebnismengen haben, z.B.  
 
Es ist jedoch nicht erlaubt Elemente zu verwenden die unterschiedliche Anzahl von Ergebnismengen haben, z.B.  
<code=SQL>
+
<syntaxhighlight lang="sql">
 
-- -----------
 
-- -----------
 
-- | spalte1 |
 
-- | spalte1 |
Zeile 67: Zeile 67:
 
-- -----------
 
-- -----------
 
SELECT COUNT(*),spale1 FROM tabelle;
 
SELECT COUNT(*),spale1 FROM tabelle;
</code=SQL>
+
</syntaxhighlight>
 
Hier ist die Zuordnung nicht möglich, da <code>COUNT(*)</code> ein Ergebnis hat (die Zeilenanzahl) und <code>spalte1</code> 4 Ergebnisse hat.
 
Hier ist die Zuordnung nicht möglich, da <code>COUNT(*)</code> ein Ergebnis hat (die Zeilenanzahl) und <code>spalte1</code> 4 Ergebnisse hat.
  
 
===AS Anweisung===
 
===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 (SQL) | Schlüsselwort]] <code>AS</code> gefolgt von dem Namen. Der Name darf/kann nach ASNI Standard keine Leerzeichen enthalten.
 
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 (SQL) | Schlüsselwort]] <code>AS</code> gefolgt von dem Namen. Der Name darf/kann nach ASNI Standard keine Leerzeichen enthalten.
<code=SQL>
+
<syntaxhighlight lang="sql">
 
SELECT COUNT(*) AS Anzahl FROM tabelle;
 
SELECT COUNT(*) AS Anzahl FROM tabelle;
 
SELECT spalte2 AS Spalte_3, spalte1 AS Spalte_10 FROM tabelle;
 
SELECT spalte2 AS Spalte_3, spalte1 AS Spalte_10 FROM tabelle;
</code=SQL>
+
</syntaxhighlight>
  
 
== FROM Anweisung ==
 
== FROM Anweisung ==
 
Der zweite Teil beginnt mit <code>FROM</code>, 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 <code>AS</code> gemacht.
 
Der zweite Teil beginnt mit <code>FROM</code>, 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 <code>AS</code> gemacht.
<code=SQL>
+
<syntaxhighlight lang="sql">
 
-- tab2 kann hier auch alternativ für tabelle2 verwendet werden
 
-- tab2 kann hier auch alternativ für tabelle2 verwendet werden
 
SELECT * FROM tabelle1 AS tab1, tabelle2 tab2, tabelle3;
 
SELECT * FROM tabelle1 AS tab1, tabelle2 tab2, tabelle3;
</code=SQL>
+
</syntaxhighlight>
 
Gibt man hier mehrere Tabellen an sollte man zusätzlich [[Join]] Konstruktur verwendet um keine unerwünschten Ergebnisse zu erhalten.
 
Gibt man hier mehrere Tabellen an sollte man zusätzlich [[Join]] Konstruktur verwendet um keine unerwünschten Ergebnisse zu erhalten.
  
Zeile 93: Zeile 93:
 
Mit dem optionalen <code>HAVING</code> 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
 
Mit dem optionalen <code>HAVING</code> 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
  
[[Kategorie:Datenbanken]]
+
[[Kategorie:SQL]]

Aktuelle Version vom 2. April 2018, 14:53 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:

SELECT ... FROM ... [WHERE ...][GROUP BY ... HAVING ...][ORDER BY ...];

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:

SELECT [ALL | DISTINCT] element [AS spaltenname]

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.

SELECT element1, element2, element3


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.

-- 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       |
-- -----------

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.

SELECT * FROM tabelle;
SELECT tabelle.* FROM tabelle;
SELECT tab1.*,tab2.* FROM tabelle1 tab,tabelle2 tab2;


Es ist jedoch nicht erlaubt Elemente zu verwenden die unterschiedliche Anzahl von Ergebnismengen haben, z.B.

-- -----------
-- | spalte1 |
-- -----------
-- | 1       |
-- | 2       |
-- | 3       |
-- | 4       |
-- -----------
SELECT COUNT(*),spale1 FROM tabelle;

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.

SELECT COUNT(*) AS Anzahl FROM tabelle;
SELECT spalte2 AS Spalte_3, spalte1 AS Spalte_10 FROM tabelle;

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.

-- tab2 kann hier auch alternativ für tabelle2 verwendet werden
SELECT * FROM tabelle1 AS tab1, tabelle2 tab2, tabelle3;

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