Händler-Datenbank (SQL-Beispiel)/Projektion: Unterschied zwischen den Versionen
Kowa (Diskussion | Beiträge) |
Kowa (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 70: | Zeile 70: | ||
FROM haendler | FROM haendler | ||
</source> | </source> | ||
{| class="datatable-sql" | |||
! h_name !! h_adresse | |||
|- | |||
| Maier || Königsbrunn | |||
|- | |||
| Müller || Königsbrunn | |||
|- | |||
| Maier || Augsburg | |||
|- | |||
| Huber || NULL | |||
|- | |||
| Schmidt || Hamburg | |||
|} | |||
Das Ergebnis enthält keine Duplikate, da die Attribute <code>(h_name, h_adresse)</code> | Das Ergebnis enthält keine Duplikate, da die Attribute <code>(h_name, h_adresse)</code> | ||
gemäß Datenmodell einen [[Schlüsselkandidat]] (''key candidate, ''unique key'') bilden. | gemäß Datenmodell einen [[Schlüsselkandidat]] (''key candidate, ''unique key'') bilden. | ||
| Zeile 78: | Zeile 91: | ||
FROM haendler | FROM haendler | ||
</source> | </source> | ||
oder auch | |||
<source lang="sql"> | <source lang="sql"> | ||
SELECT ALL h_name | |||
FROM haendler | |||
</source> | </source> | ||
{| class="datatable-sql" | |||
! h_name | |||
|- | |||
</ | | Maier | ||
|- | |||
| Müller | |||
|- | |||
| Maier | |||
|- | |||
| Huber | |||
|- | |||
| Schmidt | |||
|} | |||
Das Ergebnis enthält den namen Maier doppelt, da es zwei Händler mit dem gleichen Namen gibt. | |||
<br/> | |||
Mit Hilfe des <code>DISTINCT</code>-Operators können Duplikate entfernt werden: | |||
<source lang="sql"> | <source lang="sql"> | ||
SELECT DISTINCT h_name | |||
FROM haendler | |||
</source> | </source> | ||
{| class="datatable-sql" | |||
! h_name | |||
|- | |||
| Huber | |||
|- | |||
| Maier | |||
|- | |||
| Müller | |||
|- | |||
| Schmidt | |||
|} | |||
Beachten Sie bitte, dass sich die Reihenfolge geändert hat. SQL garantiert keine bestimmte Reihenfolge der Daten. Diese | |||
kann sich auch jederzeit ändern ({{zB}} nach einer einfachen [[Schemaevolution]] , bei der beispielsweise <code>VARCHAR (30)</code> | |||
durch <code>VARCHAR (50)</code> ersetzt wurde. Sollten die Daten in einer bestimmte Reihenfolge benötigt werden, müssen sie '''immer''' sortiert werden: | |||
<source lang="sql"> | <source lang="sql"> | ||
SELECT DISTINCT h_name | |||
FROM haendler | |||
ORDER BY h_name DESC | |||
</source> | </source> | ||
{| class="datatable-sql" | |||
! h_name | |||
|- | |||
| Schmidt | |||
|- | |||
| Müller | |||
|- | |||
| Maier | |||
|- | |||
| Huber | |||
|} | |||
==Quellen== | ==Quellen== | ||
Version vom 3. April 2019, 10:37 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: 4 (großteils überprüft) |
Umfang: 4 (unwichtige Fakten fehlen) |
Quellenangaben: 4 (fast vollständig vorhanden) |
Quellenarten: 5 (ausgezeichnet) |
Konformität: 5 (ausgezeichnet) |
Die nachfolgenden Beispiele können beispielsweise mit SQLite oder PostgreSQL getestet werden. Installieren Sie dazu die zugehörige Händler-Datenbank.
Die Projektionsfunktion
Eine Projektionsfunktion einer Relationalen Algebra
$ π_{f_1 \,\text{as}\, b_1, \ldots, f_k \,\text{as}\, b_k}: R \rightarrow R $
berechnet für jedes Tupel einer Relation ein neues Tupel: $f_i$ ist dabei eine Funktion, die für jedes Tupel $(v_1:a_1, \ldots, v_n:a_n) \in r$ jeweils einen Wert $f_i((v_1:a_1, \ldots, v_n:a_n))$ berechnet, der in das Ergebnistupel unter dem Namen $b_i$ eingefügt wird.
Man beachte: Dabei entstehende Duplikate müssen ebenfalls entfernt werden (sofern die relationale Algebra nicht multimengenbasiert, sondern mengenbasiert ist).
Beispiele bezüglich der Händler-Datenbank
(Diese Beispiele wurden mit PostgreSQL und SQLite getestet.)
Selektion aller Attribute der Tabelle haendler (Identität):
SELECT h_id, h_name, h_adresse
FROM haendler
| h_id | h_name | h_adresse |
|---|---|---|
| 1 | Maier | Königsbrunn |
| 2 | Müller | Königsbrunn |
| 3 | Maier | Augsburg |
| 4 | Huber | NULL |
| 5 | Schmidt | Hamburg |
Änderung der Position der Attribute:
SELECT h_name, h_adresse, h_id
FROM haendler
| h_name | h_adresse | h_id |
|---|---|---|
| Maier | Königsbrunn | 1 |
| Müller | Königsbrunn | 2 |
| Maier | Augsburg | 3 |
| Huber | NULL | 4 |
| Schmidt | Hamburg | 5 |
Entfernen einer Spalte:
SELECT h_name, h_adresse
FROM haendler
| h_name | h_adresse |
|---|---|
| Maier | Königsbrunn |
| Müller | Königsbrunn |
| Maier | Augsburg |
| Huber | NULL |
| Schmidt | Hamburg |
Das Ergebnis enthält keine Duplikate, da die Attribute (h_name, h_adresse)
gemäß Datenmodell einen Schlüsselkandidat (key candidate, unique key) bilden.
Entfernen zweier Spalten:
SELECT h_name
FROM haendler
oder auch
SELECT ALL h_name
FROM haendler
| h_name |
|---|
| Maier |
| Müller |
| Maier |
| Huber |
| Schmidt |
Das Ergebnis enthält den namen Maier doppelt, da es zwei Händler mit dem gleichen Namen gibt.
Mit Hilfe des DISTINCT-Operators können Duplikate entfernt werden:
SELECT DISTINCT h_name
FROM haendler
| h_name |
|---|
| Huber |
| Maier |
| Müller |
| Schmidt |
Beachten Sie bitte, dass sich die Reihenfolge geändert hat. SQL garantiert keine bestimmte Reihenfolge der Daten. Diese
kann sich auch jederzeit ändern (z. B. nach einer einfachen Schemaevolution , bei der beispielsweise VARCHAR (30)
durch VARCHAR (50) ersetzt wurde. Sollten die Daten in einer bestimmte Reihenfolge benötigt werden, müssen sie immer sortiert werden:
SELECT DISTINCT h_name
FROM haendler
ORDER BY h_name DESC
| h_name |
|---|
| Schmidt |
| Müller |
| Maier |
| Huber |
Quellen
- Kowarschick (MMDB-Skript): Wolfgang Kowarschick; Vorlesung Multimedia-Datenbanksysteme – Sommersemester 2018; Hochschule: Hochschule Augsburg; Adresse: Augsburg; Web-Link; 2018; Quellengüte: 4 (Skript)
- Kowarschick (MMDB): Wolfgang Kowarschick; Vorlesung „Multimedia-Datenbanksysteme“; Hochschule: Hochschule Augsburg; Adresse: Augsburg; Web-Link; 2016; Quellengüte: 3 (Vorlesung), https://kowa.hs-augsburg.de/mmdb/mmdb-beispiele/haendler-datenbank/
