πŸ“–DQL - Select-Anweisungen

⚑️ Ausprobieren

Γ–ffne diese Beispiel-Datenbank in einem neuen Fenster: https://www.w3schools.com/sql/trysqlserver.asp?filename=trysql_func_sqlserver_concat

Hier kannst du direkt im Browser SQL Statements ausprobieren. Probiere die Beispiele hier mit einem ⚑️-Symbol aus.

SELECT-Anweisung

DQL Anweisungen werden zur Auswahl und Anzeige von Daten aus der Datenbank verwendet. Abfragen erstellen eine temporΓ€re, speicherresidente (nicht persistente) Tabelle mit 0 oder mehreren Datenzeilen. Sie beginnen immer mit SELECT, gefolgt von der FROM-Klausel.

Mit SELECT wird ausgewΓ€hlt, welche Spalten der Tabelle in welcher Reihenfolge zurΓΌckgegeben werden sollen. Mit * werden alle Spalten ausgewΓ€hlt, entspricht der Spaltenreihenfolge der in der zugrundeliegenden Tabelle.

Nach FROM gibt man den Namen der Tabelle an, welche abgefragt werden soll.

⚑️ Ausprobieren

  1. Lass dir alle Kunden ausgeben.

  2. Zeigt nur den Namen und die Adresse der Kunden an

Spalten-Aliasnamen

Bei einer Abfrage kΓΆnnen mit dem optionalen SchlΓΌsselwort AS den Spalten (oder berechneten Spalten) neue Namen gegeben werden.

Wenn du Spaltennamen mit LeerschlΓ€gen geben willst, musst du eckige Klammern darum machen, z.B.: [ZustΓ€ndiger Ansprechpartner]

⚑️ Ausprobieren

  1. VerΓ€ndere das Statement so, dass die Spalte ContactName neu Zustaendiger Ansprechpartner heisst.

2. Probiere auch das aus:

Doppelte Zeilen unterdrΓΌcken

Mit dem SchlΓΌsselwort DISTINCT nach SELECT, werden doppelte EintrΓ€ge weggelassen. Als doppelter Eintrag gelten nur, wenn die Werte in alle angezeigten Spalten gleich sind.

⚑️ Ausprobieren

  1. VerΓ€ndere das Statement so, dass die Ausgabe keine doppelten EintrΓ€ge mehr enthΓ€lt

AusdrΓΌcke und Verkettung

BerechnungsausdrΓΌcke werden wie Tabellenspalten angegeben.

Auch Texte kΓΆnnen verkettet werden:

⚑️ Ausprobieren

  1. Schreibe ein SQL-Statement, welches vom Kunden den Namen und eine berechnete Kundennummer anzeigt. Die Kundennummer ist einfach CustomerID plus 10'000.

  2. Erweitere das Statement um die Spalte "Anschrift", welche eine Verkettung aus Namen, Adresse, PLZ, Ort und Land ist.

Bedingungen in AusdrΓΌcken

Mit CASE kann in AusdrΓΌcken nach bestimmten Bedingungen unterschieden werden, wie ein if-else in der Programmierung.

⚑️ Ausprobieren

  1. Erweitere dieses SQL-Statement mit einer neuen Spalte "QuantityText". Ist die QuantitΓ€t grΓΆsser als 10, soll darin stehen "Die Anzahl ist grΓΆsser als 10". Ist die QuantitΓ€t gleich 10, soll darin stehen "Die Anzahl ist 10". Ist die QuantitΓ€t kleiner als 10, soll stehen "Dia Anzahl ist kleiner als 10".

WHERE-Klausel

SchrΓ€nkt die ΓΌber SELECT zurΓΌckgegebenen Zeilen ein. WHERE folgt nach der FROM Klausel und besteht jeweils aus einem linken Vergleichsterm, einem Vergleichsoperator (=, >, <, >=, <=, <>, !=) und einem rechten Vergleichsterm.

Vergleichskriterien

Zahlenfelder

  • Auswertung nach mathematischen Gesichtspunkten.

Textfelder

  • Texte werden wie Datumswerte von einfachen Hochkommata umschlossen

  • Vergleiche erfolgen von links nach rechts nach dem Alphabet

  • Gross-/Kleinschreibung bei SQL Server in der Regel nicht relevant im Gegensatz zu ORACLE

Datumsfelder

  • Alle Vergleichsoperatoren sind mΓΆglich

  • FΓΌr gΓΌltige Vergleiche muss auf das Datumsformat geachtet werden

  • Unterschiedlich bei verschiedenen Herstellern

  • Numerische Datumsformate

    • '01.01.2015'

    • '01-01-2015'

  • Alphanumerische Datumsformate (sprachenabhΓ€ngig!)

    • '01 JANUAR 15'

    • 'JAN 1, 15'

⚑️ Ausprobieren

Die Vergleichsspalte in der WHERE-Klausel muss nicht in der SELECT-Klausel enthalten sein:

  1. Erweitere dieses SQL-Statement, sodass nur noch Kundennamen angezeigt werden, welche einen Anfangsbuchstaben > 'M' haben.

  2. Schreibe ein SQL Statement, welches alle Produkte ausgibt, welche teurer als 50$ sind.

  3. Schreibe ein SQL Statement, welches alle Bestellungen anzeigt, die vor dem 15.07.1996 getΓ€tigt wurden.

Mustervergleiche

ZusΓ€tzlich zu den einfachen Vergleichsoperatoren (=, >, <, >=, <=, <>, !=) gibt es auch noch etwas komplexere Operatoren. Einer davon ist LIKE.

LIKE sucht nach enthaltenem Text in einer Textspalte. Dabei gibt es verschiedene Platzhalter, die Beschreiben:

Platzhalter

Beschreibung

%

Beliebig viele Zeichen

_

Genau ein Zeichen

[]

Genau eines der Zeichen in der Klammer oder im angegebenen Bereich / den angegebenen Bereichen.

Beispiele:

[ace]: Platzhalter fΓΌr ein a, ein c oder ein e.

[a-m]: Platzhalter fΓΌr ein Zeichen zwischen a und m.

^

Platzhalter fΓΌr ein Zeichen ausser der angegebenen Zeichen oder Zeichenbereiche.

Beispiele:

[^ace]: Platzhalter fΓΌr ein Zeichen, das kein a, c oder eist.

⚑️ Ausprobieren

  1. Erweitere das SQL-Statement, dass nur Kunden angezeigt werden, welche an Orten leben, die mit "ber" anfangen.

  2. Γ„ndere das SQL-Statement, dass nur Kunden angezeigt werden, welche an Orten leben, die mit "li" oder "la" anfangen.

  3. Γ„ndere das SQL-Statement, dass nur Kunden angezeigt werden, in deren Namen als zweiter Buchstabe ein "e" steht.

  4. Γ„ndere das SQL-Statement, dass nur Kunden angezeigt werden, deren Namen nicht mit "A" beginnen.

Operator BETWEEN

  • FΓΌr Vergleiche mit Werten in einem bestimmten Bereich

  • FΓΌr Zahlen-, Datums- und Textkriterien mΓΆglich

    • … WHERE artpreis BETWEEN 10 AND 30;

    • … WHERE gebdat BETWEEN '01.01.2000' AND '30.09.2000'

    • … WHERE artbez BETWEEN 'k' AND 'mz'

  • Grenzwerte sind immer mit dabei

  • Keine zusΓ€tzlichen Vergleichsoperatoren nΓΆtig (wie z.B. = )

⚑️ Ausprobieren

  1. Erweitere das SQL-Statement, dass nur Mitarbeiter angezeigt werden, die zwischen 1950 und 1959 geboren sind.

2. Erweitere das SQL-Statement, dass nur Produkte angezeigt werden, die zwischen 10$ und 20$ kosten.

Mengenvergleich mit IN

  • Vergleiche mit mehreren, explizit in runden Klammern angegebenen Werten

  • Bei Verwendung von IN wird kein weiterer Operator mehr benΓΆtigt

  • Gleichheit mit einem der enthaltenen Werte

  • Entspricht von der Logik einer ODER-VerknΓΌpfung

  • Die Auflistung in IN kann wieder eine SELECT Abfrage sein.

⚑️ Ausprobieren

  1. Erweitere das SQL-Statement, dass nur Kunden angezeigt werden, die in Beron oder Paris leben.

  2. Liste mit einem IN-Vergleich und einer Unterabfrage alle Produkte aus Italien auf.

Suchen von NULL-Werten

  • Vergleiche mit NULL-Werten

  • Wird auf Wahr / Falsch ausgewertet

  • NULL in Kombination mit IS

⚑️ Ausprobieren

  1. Suche in einer Nordwind-Datenbank alle Kunden, fΓΌr welche KEINE Region angegeben ist.

  2. Suche in einer Nordwind-Datenbank alle Kunden, die eine FAX-Nummer haben.

Mehrere Kriterien

  • Logische Und-VerknΓΌpfung: AND

  • Logische Oder-VerknΓΌpfung: OR

  • Jede Teilbedingung muss vollstΓ€ndig sein

    • Falsch: WHERE artnr = 1098 OR 1237

    • Richtig: WHERE artnr = 1098 OR artnr = 1237

  • Logische Umkehrung: NOT

    • Falsch: WHERE artnr NOT = 1098

    • Richtig: WHERE NOT (artnr = 1098) WHERE NOT (artnr = 1098) AND NOT (artnr = 1237)

⚑️ Ausprobieren

  • Nimm dir ein paar der vorherigen Beispiele vor und versuche sie mit NOT umzukehren.

  • Nimm dir ein paar der vorherigen Beispiele vor und versuche sie mit AND oder OR zu verknΓΌpfen.

Die PrioritΓ€ten halten sich an die natΓΌrlichen PrioritΓ€ten (von hoch bis gering):

  • Mathematische Operatoren (+, -, *, etc.)

  • Vergleichsoperatoren (=, >, <, etc.)

  • NOT

  • AND

  • OR

Durch das Setzen von Klammern kann in den AusdrΓΌcken eine andere PrioritΓ€t erzwungen werden.

Sortierung

  • Sortierung ΓΌber ORDER BY

  • ORDER BY immer letzte Klausel innerhalb der Anweisung

  • Sortiert wird immer am Schluss

  • Sortierung nach ein oder mehreren Spalten

  • Aufsteigende (ASC) und absteigende Sortierung (DESC)

  • Sortierung nach Spalten- oder Aliasnamen oder durch Spaltenposition innerhalb der SELECT-Klausel

⚑️ Ausprobieren

  1. Schreibe ein SQL-Statement, welches die Mitarbeiter nach Alter sortiert, die Γ„ltesten zuerst.

TOP Auswertungen

  • TOP: Die "obersten" x Zeilen absolut oder in Prozent

  • Reihenfolge wird durch Sortierung bestimmt

⚑️ Ausprobieren

  1. Erweitere das SQL-Statement so, dass nur die 3 Γ€ltesten Mitarbeiter angezeigt werden.

Last updated

Was this helpful?