Home » Tutorials » Datenbanken » Datenbanken für Fortgeschrittene

Datenbanken für Fortgeschrittene

SQL – Structured Query Language

Allgemeines zu SQL

Arbeitet man mit Datenbanken, kommt man um SQL meist nicht herum. SQL steht für „Structured Query Language“, zu deutsch „Strukturierte Abfragesprache“. Sie stellt keine „richtige“ Programmiersprache dar, sondern kann nur für das Arbeiten mit Datenbanken verwendet werden. Besonders praktisch ist die Möglichkeit, Daten aus mehreren Tabellen, die bestimmten Bedingungen entsprechen, durch eine SQL-Abfrage in eine Ergebnismengentabelle zu bekommen.
SQL wird von allen großen Datenbankservern (Oracle, DB2, MS SQL-Server, Interbase usw.) unterstützt. Bei Desktopdatenbanken wie Paradox lassen sich SQL-Abfragen ebenfalls einsetzen, wenn die BDE verwendet wird.
Die Sprache ist genormt; dennoch gibt es Unterschiede zwischen den einzelnen Systemen. Die wichtigsten Dinge funktionieren jedoch gleich.
Neben Abfragen lassen sich über SQL auch Tabellen erzeugen und in ihrer Struktur verändern sowie Daten einfügen. Da dies, wie wir eben gesehen haben, mit Delphi und TTable jedoch recht einfach zu erledigen ist, schauen wir uns hier nur die Abfragen an. Hierbei wird natürlich auch nur ein kleiner Teil des SQL-Befehlsumfangs erwähnt. Auf unserer Bücherseite ist jedoch tiefergehende Literatur zu finden.
Allgemein gilt bei SQL, dass die Sprache nicht casesensitiv ist, Groß- und Kleinschreibung wird also wie in Pascal nicht berücksichtigt. Dennoch erhöht es die Lesbarkeit, wenn SQL-Schlüsselwörter in Großbuchstaben und die variablen Teile wie Tabellen- und Spaltennamen in Kleinbuchstaben geschrieben werden.

SELECT-Abfragen

Jede Abfrage wird durch ein SELECT eingeleitet. Die einfachste Form lautet

SELECT * FROM <Tabellenname>

Hierbei bekommt man einfach den kompletten Inhalt der Tabelle zurück. Der Stern steht für alle Spaltennamen. Man kann auch schreiben

SELECT bezeichnung FROM artikel

Hierbei bekommt man alle Bezeichnungen zurück, die in der Tabelle Artikel vorkommen – und zwar als Tabelle, wobei jede Bezeichnung einen eigenen Datensatz darstellt.

WHERE-Bedingung

Interessant wird es beim Einsatz von Bedingungen. Der Aufbau lautet

SELECT <Felder> FROM <Tabellen> WHERE <Bedingungen>

Wenn unsere Tabelle Artikel Preise enthalten würde, könnten wir uns z.B. alle Datensätze heraussuchen lassen, in denen der Artikel unter 10 Euro kostet:

SELECT * FROM artikel WHERE preis<10

WHERE-Bedingungen lassen sich wie auch die logischen Bedingungen in Pascal durch AND und OR verknüpfen:

SELECT * FROM artikel WHERE preis>10 AND preis<100

Sortierung

Eine Sortierung der Ergebnisdatensätze erreicht man durch ORDER BY:

SELECT * FROM artikel WHERE preis>10 AND preis <100 ORDER BY preis

SQL-Funktionen

Im SQL-Befehlsumfang gibt es mehrere Funktionen, wie z.B. SUM(…), um eine Summe zu bilden, MIN(…) und MAX(…), um den kleinsten und größten Wert zu finden, oder COUNT(…) um die Anzahl von Datensätzen zu ermitteln.

Abfragen über mehrere Tabellen

Mit SQL lassen sich auch Abfragen über mehrere Tabellen, sog. Joins, durchführen. Beispielsweise interessiert es die Buchhaltung unserer Beispiel-Spedition, von welchem Artikel (Bezeichnung in Tabelle Artikel) weniger als 10 Stück (Anzahl in Tabelle ArtikelAnzahl) in einem Lager vorhanden sind.
Die Abfrage muss nun über die Tabellen ArtikelAnzahl und Artikel gehen, um auch die Bezeichnung der Artikel in die Ergebnismenge aufnehmen zu können, und ebenso über die Tabelle Lager, um zu wissen, wo der Artikel knapp wird.

SELECT * FROM artikel, artikelanzahl, lager WHERE (anzahl<10) AND
(artikel.id=artikelanzahl.artikelid AND lager.id=artikelanzahl.lagerid)

Wie in der Objektorientierung werden vor den Feldnamen die Tabellennamen durch Punkt getrennt angegeben. Dies ist nur bei Feldnamen nötig, die in der Gesamtmenge der Feldnamen nicht eindeutig sind.