Datenbankabfragen

Wir haben unsere Tabellen in der Datenbank erfolgreich erstellt und können ab jetzt jedes beliebige Detail (das in den Tabellen gespeichert ist) abfragen und uns anzeigen lassen.
Der Syntax für eine Abfrage lautet wie folgt:

SELECT attributname
FROM tabelle
WHERE schlüsselattribut = “Wert des abgefragten Attributs”;

Vereinfacht im Beispiel:

Wir wollen uns Anzeigen lassen welche Adresse, der Kunde mit der Kundennummer 5 hat.

SELECT strasse, hausnr, plz, name
FROM kunden
WHERE kd_nr =5;

Die Ausgabe sieht folgendermaßen aus:
EinfacheAbfrage

Wir können auch die WHERE Klausel weglassen und uns einfach nur Attribute aus einer Tabelle ausgeben lassen die uns interessieren. Beispielsweise wollen wir nur die Nachnamen und die PLZ wissen? Dann nutzen wir die Abfrage:

SELECT name, plz
FROM kunden;

SelectNachAttributen

Eine Select-Anweisung kann auch mehrere Klauseln enthalten die wiederum verschachtelt sein können, somit kann eine Select-Abfrage durchaus komplexe Strukturen erreichen.

Eine große Besonderheit an der Select-Anweisung ist die Reihenfolge in der sie ausgeführt wird. Nehmen wir ein anderes Beispiel um zu veranschaulichen wie die Abfrage vom Server verarbeitet wird. Wir wollen und alle Rechnungen anzeigen lassen die noch offen sind.

SELECT *
FROM rechnungen
WHERE Zahlungseingang =’j';

Zahlungseingang

Anders als man annehmen könnte startet der Server die Auftragsbearbeitung nicht am “Anfang” also bei SELECT sondern in der zweiten Zeile bei “FROM”.
Der SQL-Server geht dabei folgendermaßen vor, zunächst wird die Tabelle oder die Tabellen gesucht, auf denen eine Operation durchgeführt werden soll, anschliessend werden die Ergebnisse gemäß der WHERE-Klausel gefiltert (ABER NICHT sortiert!) dann werden diese Ergebnisse “ausgewählt” (SELECT) und erscheinen als Ausgabe auf dem Bildschirm. Dazwischen können noch andere Operationen auftreten (Sortierungen, Verknüpfungen), aber wichtig ist, dass zuerst FROM ausgeführt wird!

Nehmen wir nun an wir wollen wissen, welche unserer Kunden schon einmal bei uns bestellt haben. Dann können wir die Abfrage der Tabelle bestellungen vornehmen indem wir folgende Anweisung verwenden: 

SELECT kd 
FROM bestellungen;

multipleAusgabe

Hier bekommen wir dreimal Kunde 7, einmal Kunde 5 und zweimal Kunde 1 angegeben. Bei 6 Bestellungen noch recht übersichtlich, aber sobald die Menge an Bestellungen in die Hundert geht, wird es schon recht mühsam sich die gewünschten Daten heraus zu fischen. 
Dem kann man relativ einfach Abhilfe verschaffen indem man das Schlüsselwort DISTINCT einsetzt: 

SELECT DISTINCT kd
FROM bestellungen;

DISTINCT

Somit bekommen wir jede Ausgabe nur einmal und können so unsere Abfrage und das Ergebnis besser steuern. 

Aliasse und Ihre Bedeutung

Eine nicht zu verachtende Komponente bei komplexen Abfragen sind Aliasse. So kann ich für Abfrageergebnisse andere Spaltennamen in der SELECT-Anweisung vergeben oder aber Tabellen in der FROM-Klausel einen Tabellenalias zuweisen um später bei Verknüpfungen eindeutig die Spalte bestimmen zu können. 

Fangen wir ganz einfach an.

Unsere Tabelle lieferanten Beispielsweise besteht aus den Spalten “lieferanten_nr”, “firmenname”, “strasse”, “hausnummer”, “plz”, “tel” “unsere_kd_nr”.

Für die Aufbewahrung in Tabellen eine durchaus brauchbare Beschriftung, wollen wir aber eine Auswertung ausarbeiten wer unsere Lieferanten sind könnte man das auch “anwenderfreundlicher” und in gewissem Maße übersichtlicher Gestalten indem wir beispielsweise “Firmenname” in “Lieferant” umwandeln, “lieferanten_nr” ohne Unterstrick ausgeben und “unsere_kd_nr” auch leserfreundlicher gestalten.
In diesem Beispiel sind das “nur” kosmetische Änderungen, aber man kann bei Bedarf jede Spalte für eine Abfrage umbenennen falls nötig oder gewünscht.
Das funktioniert folgendermaßen:

SELECT lieferanten_nr as “Lieferanten Nummer”, firmenname as “Lieferant”, unsere_kd_nr as “Unsere Kundennummer”
From lieferanten;

asZuweisung

Ihr seht also, Abfragespezifisch, kann durch das “as” der Spaltenname angepasst werden. Dieses “as” bräuchte man dafür eigentlich nicht und in der Realität sieht es so aus, dass knapp 50/50 der Entwickler das “as” nutzen oder eben nicht. Es gilt aber als “Best-Practice” es zu verwenden, daher werde ich es durchgehend verwenden.

Eine SELECT-Abfrage ohne “as” als Beispiel:

SELECT lieferanten_nr “Lieferanten”, firmenname “Firma”, unsere_kd_nr “Unsere Kundennummer”
FROM kunden;

Die Abfrage führt zum selben Ergebnis und man könnte argumentieren, man spart sich Arbeit, wenn man das “as” weglässt, aber je komplexer die Anweisungen werden, desto besser ist es, zu wissen was man ausdrücklich erwartet und möchte. So kann man bei Anweisungsfehlern leichter das “as” finden als eine Anweisung ohne Anweisung.

Genauso kann man auch hergehen und in der FROM-Klausel einer ganzen Tabelle einen Alias zuordnen. Dazu kommen wir aber später wenn wir uns Verknüpfungen ansehen. Denn an dieser Stelle sollte es für den Anfang reichen. Simple Abfragen können wir nun ohne weiteres bewältigen.

2 Gedanken zu „Datenbankabfragen

  1. Pingback: Verknüpfungen – Cross Joins, Inner Joins und Outer Joins | SQL – Arbeiten mit Datenbanken

  2. Pingback: Die Beiträge im Überblick | SQL – Arbeiten mit Datenbanken

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>