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

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
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 der beiden folgenden Lösungen ist, gerade im Web-Bereich, im Hinsicht auf Sicherheit
<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 zur Tabelle später weitere Attribute hinzugefügt werden.
allem, wenn zu einerr Tabelle später weitere Attribute hinzugefügt werden,
(Ausnahmen: <code>COUNT(*)</code>, <code>EXISTS(SELECT * ...)</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">
SELECT * FROM haendler;                
TABLE haendler;
SELECT hnr, name, adresse FROM haendler;
SELECT * FROM TABLE haendler;
</source>
</source>


/*
* Die folgenden Befehle sind korrekte SQL92-Befehle, jedoch keine SQL99-Befehle.
* Das Ergebnis ist ebenfalls jeweils die ganze Tabelle.
* Diese Befehle werden von PostgreSQL nicht unterstützt.
*/
-- TABLE haendler;
-- SELECT * FROM TABLE haendler;


/*
/*
Zeile 55: Zeile 56:


   /* Standard-SQL, aber PostgreSQL-Fehler */
   /* Standard-SQL, aber PostgreSQL-Fehler */
-- SELECT DISTINCT * FROM (SELECT typ FROM ware); i
-- 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

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