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

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Kowa (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Kowa (Diskussion | Beiträge)
Zeile 1: Zeile 1:
{{In Bearbeitung}}
#REDIRECT [[Projekt]]
{{Qualität
|correctness        = 4
|extent              = 4
|numberOfReferences  = 4
|qualityOfReferences = 5
|conformance        = 5
}}
Die nachfolgenden Beispiele können beispielsweise mit [[SQLite]] oder [[PostgreSQL]] getestet werden.
Installieren Sie dazu die zugehörige [[Händler-Datenbank (SQL-Beispiel)|Händler-Datenbank]].


== Die Projektionsfunktion==
[[File:Relational Algebra Single Table Projection Extended.svg|mini|200px|Eine Projektionsfunktion berechnet für jedes Tupel einer Tabelle ein neues Tupel; Duplikatzeilen werden üblicherweise entfernt]]
Eine Projektionsfunktion einer [[Relationale Algebra#Projektion|Relationalen Algebra]]
<div class="formula">
<math>π_{f_1 \,\text{as}\, b_1, \ldots, f_k \,\text{as}\, b_k}: R \rightarrow R</math><br />
</div>
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 (SQL-Beispiel)|Händler-Datenbank]]==
(Diese Beispiele wurden mit [[PostgreSQL]] und [[SQLite]] getestet.)
Selektion aller Attribute der Tabelle <code>haendler</code> ([[Händler-Datenbank (SQL-Beispiel)/Identität|Identität]]):
<source lang="sql">
SELECT h_id, h_name, h_adresse
FROM  haendler
</source>
{| class="datatable-sql"
!  h_id !! h_name !! h_adresse
|-
| 1 || Maier || Königsbrunn
|-
| 2 || Müller || Königsbrunn
|-
| 3 || Maier || Augsburg
|-
| 4 || Huber  || NULL
|-
| 5 || Schmidt || Hamburg
|}
<br/>
Änderung der Position der Attribute:
<source lang="sql">
SELECT h_name, h_adresse, h_id
FROM  haendler
</source>
{| class="datatable-sql"
! h_name !! h_adresse !! h_id
|-
| Maier || Königsbrunn || 1
|-
| Müller || Königsbrunn || 2
|-
| Maier || Augsburg || 3
|-
| Huber  || NULL || 4
|-
| Schmidt || Hamburg || 5
|}
<br/>
Entfernen einer Spalte:
<source lang="sql">
SELECT h_name, h_adresse
FROM  haendler
</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>
gemäß Datenmodell einen [[Schlüsselkandidat]] (''key candidate, ''unique key'') bilden.
<br/>
Entfernen zweier Spalten:
<source lang="sql">
SELECT h_name
FROM  haendler
</source>
oder auch
<source lang="sql">
SELECT ALL h_name
FROM      haendler
</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">
SELECT DISTINCT h_name
FROM            haendler
</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">
SELECT DISTINCT h_name
FROM            haendler
ORDER BY        h_name  DESC
</source>
{| class="datatable-sql"
! h_name
|-
| Schmidt
|-
| Müller
|-
| Maier
|-
| Huber
|}
==Quellen==
<references/>
<ol start="1">
<li>{{Quelle|Kowarschick, W. (MMDB-Skript): Skriptum zur Vorlesung Multimedia-Datenbanksysteme}}</li>
<li>{{Quelle|Kowarschick, W.: Multimedia-Datenbanksysteme}}, https://kowa.hs-augsburg.de/mmdb/mmdb-beispiele/haendler-datenbank/</li>
</ol>
[[Kategorie:PostgreSQL-Beispiel]]
[[Kategorie:Praktikum:MMDB]]
==Siehe auch==
* [[Händler-Datenbank (SQL-Beispiel)]]
* [[Händler-Datenbank (SQL-Beispiel)/Identität]]
* [[Händler2-Datenbank (SQL-Beispiel)]]

Version vom 14. April 2019, 14:28 Uhr

Weiterleitung nach: