You are not logged in.

  • Login

1

Sunday, February 17th 2008, 4:36pm

Relationale Division in SQL

Hallo,

ich komme leider nicht von Allein weiter und hoffe nun auf eure Hilfe:

Und zwar möchte ich die relationale Division in SQL realisieren. Beispiel:

Ich habe 2 Tabellen X und Y. In X sind die Spalten M und V und in Y ist lediglich die Spalte V.
Ich möchte X/Y rechnen.

Konkreter:

X: Y: Ergebnis
m1 v1 v1 m1
m1 v2 v2
m2 v2 v3
m3 v3

Wie würde nun ein entsprechender Ausdruck in SQL aussehen (ps keine Sorge, es handelt sich nicht um einen "Schul"-Aufgabe...reines Selbstinteresse)
Gibts ein schon vorgefärtigtes Schlüsselwort dafür in SQL?

2

Sunday, February 17th 2008, 4:59pm

Ich weiß zwar nicht was eine relationale Division sein soll aber teilen kann man in SQL ganz normal mit /

3

Sunday, February 17th 2008, 5:52pm

Die relatinale Division liefert mir die m-Werte, die FÜR ALLE v-Werte vorkommen.

Ich sehe gerade, dass das Beispiel nicht korrekt ist, es müsste lauten:

X:
m1|v1
m1|v2
m2|v2

Y:
v1
v2

Das Ergebnis wäre demnach nur m1, da es für alle vorkommenden v-werte (also v1 und v2) einmal vorkommt.

4

Sunday, February 17th 2008, 7:47pm

Quoted

Die relationale Division ist der arithmetischen Division ähnlich. Sie wird mit zwei Relationen, r1 und r2, durchgeführt. Das Ergebnis der Division von r1/r2 ist eine Relation, die aus genau den Tupeln von r1 besteht, für die die zugehörige Wertemenge eines anderen Attributes von r1 alle Werte der Relation r2 enthält.

http://books.google.com/books?id=EGfu-Le…yLaVIw#PPA43,M1

Ich würde mal behaupten sowas findest du nicht in einer Standardfunktion. (Welches DBMS überhaupt?)

Aber eine Idee (falls ich das ganze überhaupt richtig verstanden habe) gebe ich dir dennoch:

SQL Code

1
2
3
4
SELECT 		m 
FROM 		tabelleX 
GROUP BY 	m 
HAVING 		COUNT(*) = (SELECT COUNT(V) FROM tabelleY)

5

Monday, February 18th 2008, 9:07pm

Hier steht wie man Schrittweise die relationale Division auf elementare Operationen abbilden kannRelational algebra#Division

6

Saturday, August 28th 2010, 6:00pm

Ich hab auch grad damit zu tun vom Studium her (muss für ne Klausur lernen).

Die Frage ist halt für mich, wie kann ich das am besten in SQL schreiben?

7

Saturday, August 28th 2010, 11:20pm

Mal ein Beispiel für die relationale Division:

Relationen (PrimaryKey, ForeignKey):
Bild B (BNR, B_Titel)
Ausstellung A (ANR, A_Titel, BNR)

Aufgabe: "Gesucht sind die Titel der Ausstellungen, die alle Bilder ausstellen."

Das ist nichts anderes als R = (ANR, BNR) A / (BNR) B

In Relationskalkülform: R = { ( x.A_Titel ) : x / A ^ ( Allquantor y / B )( Existenzquantor z / A )( y.BNR = z.BNR ^ z.ANR = x.ANR ) }

Dann formen wir den Allquantor noch um: R = { ( x.A_Titel ) : x / A ^ ( --Existenzquantor y / B )(-- Existenzquantor z / A )( y.BNR = z.BNR ^ z.ANR = x.ANR ) }

Das schöne am Kalkülausdruck ist die leichte Übersetzung in SQL:

SQL Code

1
2
3
4
5
6
7
8
9
10
SELECT A_TITEL
FROM A x
WHERE NOT EXISTS(
          SELECT *
          FROM B y
          WHERE NOT EXISTS(
                    SELECT *
                    FROM A z
                    WHERE y.BNR = z.BNR
                    AND z.ANR = x.ANR))

Similar threads

Social bookmarks