Händler-Datenbank (SQL-Beispiel)/Identität: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Kowa (Diskussion | Beiträge)
Kowa (Diskussion | Beiträge)
Zeile 23: Zeile 23:
</div>
</div>


In SQL gibt es die Identitätsfunktion nicht. Es gibt aber mehrere Möglichkeiten
In SQL ist es nicht möglich, auf den Inhalt einer benannten Tabelle zuzugreifen,
den Inhalt einer gesamten Tabelle zu ermitteln:
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

  1. Kowarschick (MMDB): Wolfgang Kowarschick; Vorlesung „Multimedia-Datenbanksysteme“; Hochschule: Hochschule Augsburg; Adresse: Augsburg; Web-Link; 2016; Quellengüte: 3 (Vorlesung)