Händler-Datenbank (SQL-Beispiel)/Identität: Unterschied zwischen den Versionen
Kowa (Diskussion | Beiträge) |
Kowa (Diskussion | Beiträge) |
||
| Zeile 23: | Zeile 23: | ||
</div> | </div> | ||
In SQL | In SQL ist es nicht möglich, auf den Inhalt einer benannten Tabelle zuzugreifen, | ||
den Inhalt einer | indem man einfach den Namen der Tabelle angibt. Folgends ist als kein korrektes | ||
SQL: | |||
<source lang="sql"> | |||
haendler | |||
</source> | |||
Um den Inhalt einer Tabelle auszugeben, benötigt man also eine Identitätsfunktion. | |||
Diese gab es noch in SQL92: | |||
<source lang="sql"> | |||
TABLE haendler | |||
</source> | |||
In SQL99 (und in PostgreSQL) gibt es diese Funktion nicht mehr. Als Identitätsfunktion kommt hier | |||
<code>SELECT * FROM</code> zum Einsatz. | |||
<source lang="sql"> | <source lang="sql"> | ||
Version vom 5. Juli 2012, 08:29 Uhr
Dieser Artikel wird derzeit von einem Autor gründlich bearbeitet. Die Inhalte sind daher evtl. noch inkonsistent.
Dieser Artikel erfüllt die GlossarWiki-Qualitätsanforderungen:
| Korrektheit: 5 (vollständig überprüft) |
Umfang: 4 (unwichtige Fakten fehlen) |
Quellenangaben: 5 (vollständig vorhanden) |
Quellenarten: 5 (ausgezeichnet) |
Konformität: 5 (ausgezeichnet) |
Die Identität
Die Identitätsfunktion der Realtionalen Algebra ist eine triviale Funktion: Sie bildet eine Relation (Tabelle) auf sich selbst ab:
$ id: R \rightarrow R $
$ id(r) = r $
Es gilt folgendes triviales Gesetz:
$ id(id(r)) = id(r) = r $
In SQL ist es nicht möglich, auf den Inhalt einer benannten Tabelle zuzugreifen, indem man einfach den Namen der Tabelle angibt. Folgends ist als kein korrektes SQL:
haendler
Um den Inhalt einer Tabelle auszugeben, benötigt man also eine Identitätsfunktion. Diese gab es noch in SQL92:
TABLE haendler
In SQL99 (und in PostgreSQL) gibt es diese Funktion nicht mehr. Als Identitätsfunktion kommt hier
SELECT * FROM zum Einsatz.
SELECT * FROM haendler;
SELECT hnr, name, adresse FROM haendler;
Die erste dieser beiden Lösungen ist, gerade im Web-Bereich, im Hinsicht auf Sicherheit
und Performanz deutlich schlechter, als die zweite. Die gilt vor
allem, wenn zu einerr Tabelle später weitere Attribute hinzugefügt werden,
da sich dadurch die Semantic der SELECT-*-Anweisung verändert
(Ausnahmen: EXISTS(SELECT * ...), COUNT(*)).
In SQL92 gab es eine Ideintitätsfunktion: TABLE.
Die folgenden Befehle sind korrekte SQL92-Befehle (jedoch keine SQL99-Befehle),
die jeweils die gesamte Tabelle als Ergebnis liefern..
TABLE haendler;
SELECT * FROM TABLE haendler;
/*
* Als Tabelle dürfen auch komplexe SQL-Ausdrücke verwendet werden. * Allerdings entfernt SQL Duplikate nicht automatisch. * Um dies zu erzwingen, muss "SELECT DISTINCT" verwendet werden: * * SELECT DISTINCT * FROM <komplexer Ausdruck>;
- /
/* Standard-SQL, aber PostgreSQL-Fehler */
-- SELECT DISTINCT * FROM (SELECT typ FROM ware);
SELECT DISTINCT * FROM (SELECT typ FROM ware) AS ware_typ; SELECT * FROM (SELECT typ FROM ware) AS ware_typ; /* Duplikate */
Quellen
- Kowarschick (MMDB): Wolfgang Kowarschick; Vorlesung „Multimedia-Datenbanksysteme“; Hochschule: Hochschule Augsburg; Adresse: Augsburg; Web-Link; 2016; Quellengüte: 3 (Vorlesung)
