Händler-Datenbank (SQL-Beispiel)/Identität: Unterschied zwischen den Versionen
Kowa (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Kowa (Diskussion | Beiträge) |
||
| Zeile 26: | Zeile 26: | ||
den Inhalt einer gesamten Tabelle zu ermitteln: | den Inhalt einer gesamten Tabelle zu ermitteln: | ||
Die erste | <source lang="sql"> | ||
SELECT * FROM haendler; | |||
SELECT hnr, name, adresse FROM haendler; | |||
</source> | |||
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 | und Performanz deutlich schlechter, als die zweite. Die gilt vor | ||
allem, wenn | allem, wenn zu einerr Tabelle später weitere Attribute hinzugefügt werden, | ||
(Ausnahmen: <code> | da sich dadurch die Semantic der <code>SELECT</code>-<code>*</code>-Anweisung verändert | ||
(Ausnahmen: <code>EXISTS(SELECT * ...)</code>, <code>COUNT(*)</code>). | |||
In SQL92 gab es eine Ideintitätsfunktion: <code>TABLE</code>. | |||
Die folgenden Befehle sind korrekte SQL92-Befehle (jedoch keine SQL99-Befehle), | |||
die jeweils die gesamte Tabelle als Ergebnis liefern.. | |||
<source lang="sql"> | <source lang="sql"> | ||
TABLE haendler; | |||
SELECT | SELECT * FROM TABLE haendler; | ||
</source> | </source> | ||
/* | /* | ||
| Zeile 55: | Zeile 56: | ||
/* Standard-SQL, aber PostgreSQL-Fehler */ | /* Standard-SQL, aber PostgreSQL-Fehler */ | ||
-- SELECT DISTINCT * FROM (SELECT typ FROM ware); | -- SELECT DISTINCT * FROM (SELECT typ FROM ware); | ||
SELECT DISTINCT * FROM (SELECT typ FROM ware) AS ware_typ; | SELECT DISTINCT * FROM (SELECT typ FROM ware) AS ware_typ; | ||
Version vom 5. Juli 2012, 08:19 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 gibt es die Identitätsfunktion nicht. Es gibt aber mehrere Möglichkeiten den Inhalt einer gesamten Tabelle zu ermitteln:
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)
