Mam trzy nazwane tabele
**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
Teraz, aby pokazać nazwisko ucznia wraz z nazwą kursu, który studiował,
**Result**
---------------------------
Student Course
---------------------------
ahmed physic
ahmed maths
ahmed computer
ahmed chemistry
ali physic
ali maths
john computer
john chemistry
king physic
king maths
Buduję następujące zapytanie
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
Ale nie zwraca wymaganego wyniku ...
A co by było dla znormalizowanej formy, jeśli chcę dowiedzieć się, kto jest menedżerem nad innymi:
**employee**
-------------------
id name
-------------------
1 ali
2 king
3 mak
4 sam
5 jon
**manage**
--------------
mid eid
--------------
1 2
1 3
3 4
4 5
I chce uzyskać ten wynik:
**result**
--------------------
Manager Staff
--------------------
ali king
ali mak
mak sam
sam jon
Odpowiedzi:
Po prostu użyj:
źródło
Użyj składni ANSI, a sposób dołączania do tabel będzie o wiele bardziej jasny:
źródło
ANSI
składni, warto poświęcić czas na jej naukę. Pomoże Ci to uniknąćJOIN
błędów, jakie popełniłeś w przyszłości.Forma normalizacji
źródło
m.mid = e1.id
im.eid = e2.id
?źródło
Możesz DOŁĄCZAĆ do wielu TABEL, tak jak w powyższym przykładzie.
źródło
Zapytanie o dołączenie do więcej niż dwóch tabel:
źródło
Użyj tego:
źródło
Nie dołączaj w ten sposób. To naprawdę bardzo zła praktyka !!! Spowolni to wydajność pobierania z ogromnymi danymi. Na przykład, jeśli w każdej tabeli było 100 wierszy, serwer bazy danych musi pobrać
100x100x100 = 1000000
czasy. Musiał przybierać na wiele1 million
razy. Aby przezwyciężyć ten problem, dołącz do pierwszych dwóch tabel, które mogą pobierać, aby uzyskać minimalne możliwe dopasowanie (zależy to od schematu bazy danych). Użyj tego wyniku w Subquery, a następnie połącz go z trzecią tabelą i pobierz. Za pierwsze złączenie ->100x100= 10000
razy i przypuśćmy, że otrzymamy 5 pasujących wyników. A potem dołączamy do trzeciej tabeli z wynikiem ->5x100 = 500.
Całkowite pobranie =10000+500 = 10200
tylko razy. I tak wydajność poszła w górę !!!źródło