Databases Reference
In-Depth Information
weise muss sich bei der Programmierung an der Funktionsweise des Rechners
orientieren. Das ist bei SQL anders: Wir müssen nicht einmal wissen, was ein
Computer ist. Tabellen kennt jeder und kann erst einmal loslegen. Zwar treten
immer wieder Phänomene bei der Arbeit mit SQL auf, die nur schwer erklärbar
sind - wer aber das relationale Modell kennt, kommt auch hier klar. Der Stil der
SQL-Abfragen ist deklarativ: Der Entwickler formuliert in seinen Abfragen, welche
Daten er benötigt, den Rest erledigt das RDBMS. Wir haben es hier also, vergli-
chen mit „klassischen“ Programmiersprachen, mit einem deutlich höheren Ab-
straktionsgrad zu tun. Grundsätzlich ist der Entwickler auch nicht mehr für eine
Formulierung der Abfrage verantwortlich, die eine schnelle Verarbeitung sicher-
stellt. Diese Aufgabe übernimmt der Optimierer, der ein Teil des RDBMS ist. Er
formuliert die Anweisung so um, dass sie schnell verarbeitet werden kann. Es
kann schon mal vorkommen, dass der Optimierer eine Fehlentscheidung trifft, so
dass der Entwickler doch wieder eingreifen muss. Bei hochwertigen RDBMS sollte
dies aber eher die Ausnahme sein. Anders als bei prozeduralen Programmierspra-
chen werden in SQL die Anweisungen oft parallelisiert und dann gleichzeitig auf
mehreren Prozessoren ausgeführt. Die folgende Einschätzung dazu findet man in
[Kul07]:
„... it is likely that more SQL programs are executed in parallel than in any other
programming language. However, most SQL programmers do not write explicitly
parallel code ...“
Ebenso wie die Relationenalgebra ist auch SQL abgeschlossen: Die Operanden einer
select -Anweisung sind, ebenso wie ihr Ergebnis, Tabellen. Insbesondere kann
also das Ergebnis einer Abfrage wieder Operand einer weiteren Abfrage sein. Um
dies zu verstehen, definieren wir eine einfache Tabelle:
Listing 9.1: Eine ganz einfache Tabelle
create table personen(
id int generated always as identity primary key,
name varchar(20),
freund char(1) check (freund in ('J','N'))
)
Die folgende Anweisung ist aufgrund der Abgeschlossenheit von SQL-Aus-
drücken syntaktisch korrekt.
select name
from (select id, name
from personen
where freund='J')
Ob es sinnvoll ist, select -Anweisung so zu formulieren, ist dabei wieder eine
andere Frage. Im vorliegenden Fall wählt man die klarere Variante:
Search WWH ::




Custom Search