You are not logged in.


Escape

Moderator

  • "Escape" started this thread

Posts: 612

Location: Schweiz, AG

Occupation: Applikationsentwicklungs - Lehrling

  • Send private message

1

Wednesday, March 5th 2008, 5:04pm

Joins

Hallo

Ich werde aus den Beschreibungen die ich bis jetz im Internet finde nicht so richtig schlau.

Ich lese immer von rechten und linken Tabellen. Wie will ich das den rausfinden ob jetz eine Tabelle rechts oder links ist bzw. wie will man das überhaupt sehen ? Aus der UML Notation ?

Also, was ist ein Left Join ?
...Right Join ?
...Outer Join ?
...Inner Join ?

MfG - Escape =)

CDW

Active Clubbers

Posts: 324

Location: CreateRemoteThread

Occupation: Student

  • Send private message

2

Thursday, March 6th 2008, 12:50pm

Vielleicht wirst Du mit der Relationalen Algebra erklärung glücklich:
http://de.wikipedia.org/wiki/Relationale_Algebra#Join
Ein Join ist ein Kreuzprodukt der Tabellen mit einer anschließenden (algebraischen) Selektion ("Filterung" der Tupeln).

Das sind die bekannten "inner joins" - Krezugverbund nach Kriterien. Wobei dann zwischen "equi" und "natural" Joins unterschieden wird (bei equi gibt man die Bedingung an, bei natural wird die "natürliche" Bedingung genommen - also die gleichnamigen Spalten vergichen).


Nicht alle DBMS bieten diese Joins an. DB2 z.B kennt glabe ich keine NATURAL JOINS - nur EQUIs .
Denn JOINS kann man in SQL auch mit
SELECT * FROM x,y WHERE x.bla=y.foo
nachbauen.

Outer Joins sind eine "Erweiterung" und manchmal sinnvoll. Dabei werden die Tupeln wie bei "inner"Join verglichen, allerdings je nach Angabe (LEFT/RIGHT/FULL) auch Tupeln aus der Linken/Rechten/Beiden Tabellen mit ins Ergebnis reingenommen, die keinen "Partner" haben.Ob "Links", "Rechts" oder "Full" wird durch die Angabe bei JOIN unterschieden

myTable LEFT OUTER JOIN otherTable ON bla
bzw sollte aus der UML Notation auch sichbar sein.

D.h dass man dann alle Einträge aus der linken Tabelle mindestens einmal im Ergebnis wiederfindet.

Ein sinnvolles Beispiel für die Verwendung:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
StudiTab
Name, MatNr
N1, 123
N2, 124
N4, 125

TestErgebnisDBS
MatNr, bestanden
124, TRUE
123, FALSE


Wir wollen Gesamtergebniss des Test anzeigen um Liste mit Zulassungen für die Klausur auszuhängen:

SELECT MatNr,Ergebnis FROM StudiTab LEFT OUTER JOIN TestErgebnisDBS
ON StudiTab.MatNr=TestErgebnisDBS.MatNr

Das wird ausgehangen:
MatNr, Ergebnis
124, TRUE
123, FALSE
125, NULL

Legende: TRUE = zugelassen, FALSE=nicht zugelassen, NULL = nicht teilgenommen= nicht zugelassen

Zugegeben, die Leute hatten einen Sinn für Humor ;)

Also OUTER Joins - wenn man die Information aus der Tabelle für noch was anderes braucht. Weiteres Beispiel:
http://sqlcourse2.com/cgi-bin/sqlcmd-sql…rid%29%3B%0D%0A
Tabellen dazu
http://sqlcourse2.com/items_ordered.html
http://sqlcourse2.com/customers.html
Hier werden Bestellungen aller Benutzer aufgelistet und zusätzlich auch Benutzer ins Ergebnis hineingenommen, die nichts bestellt haben - das kann dann für irgendwelche Zwecke intern verwendet werden (Statistiken usw).
EB FE

This post has been edited 3 times, last edit by "CDW" (Mar 6th 2008, 1:59pm)


Escape

Moderator

  • "Escape" started this thread

Posts: 612

Location: Schweiz, AG

Occupation: Applikationsentwicklungs - Lehrling

  • Send private message

3

Thursday, March 6th 2008, 2:09pm

Hallo

Danke schon mal für deine Antwort.
Jedoch habe ich das Problem das ich nicht verstehe wie ich wissen kann ob jetz eine Tabelle rechts oder links ist ?

mfg

Escape

CDW

Active Clubbers

Posts: 324

Location: CreateRemoteThread

Occupation: Student

  • Send private message

4

Thursday, March 6th 2008, 2:21pm

Linke_tabelle IRGENDEIN JOIN rechte_tabelle ON bla ?
JOIN ist nicht umsonst ein binärer Operator - ich dachte, das wäre "intuitiv" erfassbar, bei der Schreibweise ;)
EB FE

This post has been edited 1 times, last edit by "CDW" (Mar 6th 2008, 2:21pm)


Jockel

Ehrenmitglied mit Auszeichnung

Posts: 3,337

Location: (7<<0xd|0xb<<6|3<<4)+1

Occupation: Wissenschaftlicher Mitarbeiter

  • Send private message

5

Tuesday, March 11th 2008, 8:22pm

Hallo!

Verschoben Access -> Sonstiges zu DBS

mfg

Jockel
--------
It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: As potential programmers they are mentally mutilated beyond hope of regeneration. [Edsgar W. Dijkstra, 1975]

Social bookmarks

Rate this thread