Ich habe drei Tabellen benannt
**Student Table**
-------------
id name
-------------
1 ali
2 ahmed
3 john
4 king
**Course Table**
-------------
id name
-------------
1 physic
2 maths
3 computer
4 chemistry
**Bridge**
-------------
sid cid
-------------
1 1
1 2
1 3
1 4
2 1
2 2
3 3
3 4
4 1
4 2
Um nun den Schülernamen mit dem Kursnamen zu zeigen, den er studiert hatte,
**Result**
---------------------------
Student Course
---------------------------
ahmed physic
ahmed maths
ahmed computer
ahmed chemistry
ali physic
ali maths
john computer
john chemistry
king physic
king maths
Ich baue folgende Abfrage
select s.name as Student, c.name as Course from student s, course c join bridge b on c.id = b.cid order by s.name
Es wird jedoch nicht das gewünschte Ergebnis zurückgegeben ...
Und was wäre für eine normalisierte Form, wenn ich herausfinden möchte, wer Manager über andere ist:
**employee**
-------------------
id name
-------------------
1 ali
2 king
3 mak
4 sam
5 jon
**manage**
--------------
mid eid
--------------
1 2
1 3
3 4
4 5
Und will dieses Ergebnis bekommen:
**result**
--------------------
Manager Staff
--------------------
ali king
ali mak
mak sam
sam jon
Antworten:
Verwenden Sie einfach:
quelle
Verwenden Sie die ANSI-Syntax und es wird viel klarer, wie Sie die Tabellen verbinden:
quelle
ANSI
Syntax nicht bewusst sind , lohnt es sich, sie zu lernen. Dies hilft Ihnen,JOIN
Fehler zu vermeiden , die Sie in Zukunft gemacht haben.Zum Normalisieren der Form
quelle
m.mid = e1.id
und wichtigm.eid = e2.id
?quelle
Sie können wie in diesem Beispiel oben mehreren Tabellen beitreten.
quelle
Abfrage zum Verbinden von mehr als zwei Tabellen:
quelle
Benutze das:
quelle
Mach nicht so mit. Es ist eine wirklich sehr, sehr schlechte Übung !!! Dies wird die Leistung beim Abrufen mit massiven Daten verlangsamen. Wenn beispielsweise 100 Zeilen in jeder Tabelle vorhanden sind, muss der Datenbankserver die
100x100x100 = 1000000
Zeiten abrufen . Es musste1 million
mal holen . Um dieses Problem zu beheben, verbinden Sie die ersten beiden Tabellen, die zu einem möglichst geringen Abgleich führen können (es liegt an Ihrem Datenbankschema). Verwenden Sie dieses Ergebnis in der Unterabfrage, verbinden Sie es mit der dritten Tabelle und rufen Sie es ab. Beim allerersten Join ->100x100= 10000
Mal und nehmen wir an, wir erhalten 5 übereinstimmende Ergebnisse. Und dann verbinden wir die dritte Tabelle mit dem Ergebnis ->5x100 = 500.
Total fetch =10000+500 = 10200
times only. Und so stieg die Leistung !!!quelle