Lektion1: SELECT-Anweisungen |
SQL - Was ist das? |
SQL ist eine Abkürzung für Structured Query Language (strukturierte Abfragesprache). Sie wird verwendet, um bestimmte Daten aus Datenbanken auszulesen. |
Aha! Und wie geht das jetzt? |
Jede SQL-Abfrage enthält die drei Hauptbefehle select (engl. auswählen), from (engl. von) und where (engl. wo). Mit select gibt man an, welche Spalten man ausgegeben haben möchte; mit from gibt man die Tabelle an, aus der die Spalten stammen; mit where gibt man die Bedingung an, unter der die Datensätze ausgesucht werden. Where muss nicht vorkommen, wenn es keine Bedingung gibt. |
Ein Beispiel: |
Wir wollen wissen, wer in den Jahren Konstrukteursweltmeister wurde, in denen Michael Schumacher Weltmeister war. Zur Beipieltabelle... |
Also hieße die Abfrage: | |
select Saison, Fahrerweltmeister, Konstrukteurswm from WMTitel where Fahrerweltmeister = 'Michael Schumacher' |
Tipp: Wenn man alle Spalten einer Tabelle angezeigt haben möchte, kann man
auch einfach einen * einsetzen. Aus select Saison, Fahrerweltmeister,
Konstrukteursweltmeister from... wird dann select * from... . Zeichenketten (Strings) wie zum Beispiel 'Michael Schumacher' setzt man in einfache Anführungszeichen. Hinweis: Bei den Tabellennamen muss die Groß-/Kleinschreibung beachtet werden. |
Ergebnis der Abfrage: |
![]() |
Kleine und Große - die Vergleichsoperatoren | |
Mit den Operatoren <, <=, =, <>, >= und > kann man Vergleichsbedingungen
in der where-Klausel formulieren. |
|
Beispiel: Gesucht sind die Weltmeister mit mindestens 100 WM-Punkten. |
select Fahrerweltmeister, WM_Punkte from WMTitel where WM_Punkte >= 100 |
Ergebnis der Abfrage: |
![]() |
Alles logisch oder was? - logische Operatoren | |
Mit den Operatoren and, or und not kann man logische Bedingungen in der where-Klausel formulieren. | |
Beispiel: In welchen Jahren hatte Michael Schumacher mehr als 100 WM-Punkte? |
select Saison, Fahrerweltmeister, WM_Punkte from WMTitel where Fahrerweltmeister = 'Michael Schumacher' and WM_Punkte > 100 |
Ergebnis der Abfrage: |
![]() |
Gemeinsam gehts besser - der between-Operator | |
Die where-Klausel mit WM_Punkte >= 80 and <= 110 funktioniert nicht, weil beim zweiten Vergleich
der Vergleichspartner fehlt. Für Bereichsvergleiche verwendet man den between-Operator. |
|
Beispiel: In welchen Jahren hatte der Weltmeister zwischen 80 und 110 Punkte? |
select Saison, Fahrerweltmeister, WM_Punkte from WMTitel where WM_Punkte between 80 and 110 |
Ergebnis der Abfrage: |
![]() |
Gewusst wie - der like-Operator | |
Mit dem like-Operator kannst Du Muster für String-Vergleiche benutzen: - das Prozentzeichen % steht für eine beliebige Folge von Zeichen - der Unterstrich _ steht für ein einziges beliebiges Zeichen Microsoft Access benutzt anstelle des SQL-Standards den Stern * für eine beliebige Folge und das Fragezeichen ? für ein einzelnes beliebiges Zeichen. Du kannst den like-Operator auch zusammen mit not benutzen: not like |
|
Beispiel: In welchen Jahren war Renault Konstrukteursweltmeister? |
select Saison, KonstrukteursWM from WMTitel where KonstrukteursWM like '%Renault%' |
Ergebnis der Abfrage: |
![]() |
Bin ich drin? - der in-Operator | |
Hat man eine ganze Liste von Kriterien für die gesuchten Daten, so kann der in-Operator weiter helfen. Du kannst den in-Operator auch zusammen mit not benutzen: not in | |
Beispiel: In welchen Jahren waren Ayrton Senna, Alain Prost bzw. Damon Hill Weltmeister? |
select Saison, Fahrerweltmeister from WMTitel where Fahrerweltmeister in ('Ayrton Senna', 'Alain Prost', 'Damon Hill') |
Ergebnis der Abfrage: |
![]() |
NULL komma nix! | |
Wenn beim Einfügen von Daten in eine Datenbanktabelle ein Wert noch nicht bekannt ist, so wird dieser mit dem sogenannten NULL-Wert belegt. Solche NULL-Werte kannst Du mit dem is-Operator finden. Du kannst den is-Operator auch zusammen mit not benutzen: not is | |
Beispiel: In welchen Jahren gab es keine Team_Punkte für die KonstrukteursWM? |
select * from WMTitel where Team_Punkte is NULL |
Ergebnis der Abfrage: |
![]() In der Tabelle WMTitel stehen die Daten ab 1950. Die Wertung der Konstrukteurs-Weltmeisterschaft wurde aber erst ab 1958 eingeführt, weswegen für die Jahre vorher hierfür keine Werte vorliegen und daher die Team-Punkte keinen Wert, also NULL, erhalten haben. Das Ergebnis der Abfrage zeigt auch, dass es einen Unterschied zwischen NULL und dem Leerstring gibt, denn in den Jahren 1954 bis 1957 wurde im Feld KonstrukteursWM der Wert NULL durch einen Leerstring ersetzt. |
Auf den Unterschied kommt es an - der distinct-Operator | |
Mit dem distinct-Operator sorgt man dafür, dass in der Ergebnistabelle keine Einträge mehrfach vorkommen. | |
Beispiel: Wir wollen die Namen aller Weltmeister wissen, aber es soll jeder nur einmal aufgelistet werden. |
select distinct Fahrerweltmeister from WMTitel |
Ergebnis der Abfrage: |
![]() |
Mathe machts möglich - einfache Berechnungen und as-Operator | |
In der select-Klausel können mit den Grundrechenarten (+, -, *, /) Berechnungen
durchgeführt werden. Den berechneten Ergebnisspalten kannst Du mit dem as-Operator Bezeichnungen geben. |
|
Beispiel: Es soll die prozentuale Ausbeute der WM-Punkte ermittelt werden. Bei 16 Rennen und jeweils 10 Punkten können maximal 160 WM-Punkte erreicht werden. |
select Fahrerweltmeister, WM_Punkte/160*100 as Ausbeute from WMTitel |
Ergebnis der Abfrage: |
![]() |
Ordnung ist das halbe Leben - order by | |
Will man seine Ergebnisse nach bestimmten Kriterien sortiert ausgegeben haben, so setzt man
den order by-Operator ein. Standardmäßig werden Strings in alpabetischer Reihenfolge von A bis Z sortiert und Zahlen der Größe nach. Mit dem Zusatz desc werden die Daten absteigend sortiert. |
|
Beispiel: Die prozentuale Ausbeute der WM-Punkte soll sortiert dargestellt werden, beginnend mit dem größten Wert. Hinweis: Man kann nach mehreren Kriterien sortieren, wenn man nach dem order by-Operator mehrere Spalten angibt. Im Beispiel wäre also order by Ausbeute desc, Fahrerweltmeister noch besser. Tipp: Man kann statt der Spaltennamen auch einfach die Spaltennummern angeben, nach der das Ergebnis sortiert werden soll. Das ist besonders für berechnete Spalten nützlich. |
select Fahrerweltmeister, WM_Punkte/160*100 as Ausbeute from WMTitel order by Ausbeute desc select Fahrerweltmeister, WM_Punkte/160*100 from WMTitel order by 2 desc, 1 asc |
Ergebnis der Abfrage: |
![]() |
Voll am Limit | |
Die limit-Klausel wird benutzt, um die Anzahl von Datensätzen, die von einer select-Anweisung
zurückgegeben wird, zu beschränken. limit erwartet ein oder zwei numerische Argumente: - limit 3, 5 gibt ab dem 4. Datensatz insgesamt 5 Datensätze zurück, die Zählung beginnt also ab 0 - limit 10 gibt die ersten zehn Datensätze zurück (entspricht limit 0, 10) |
|
Beispiel: Von der prozentualen Ausbeute der WM-Punkte sollen nur die Plätze 5 bis 7 dargestellt werden. |
select Fahrerweltmeister, WM_Punkte/160*100 as Ausbeute from WMTitel order by Ausbeute desc, Fahrerweltmeister limit 4, 3 |
Ergebnis der Abfrage: |
![]() |
Jetzt geht's los! |
Genug der grauen Theorie - jetzt wird es praktisch. Hier geht es zu den Übungen der Lektion 1. |