J'ai trois tables nommées
**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
Maintenant, pour montrer le nom de l'étudiant avec le nom du cours qu'il avait étudié comme,
**Result**
---------------------------
Student Course
---------------------------
ahmed physic
ahmed maths
ahmed computer
ahmed chemistry
ali physic
ali maths
john computer
john chemistry
king physic
king maths
Je construis la requête suivante
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
Mais cela ne renvoie pas le résultat recherché ...
Et que serait la forme normalisée, si je veux trouver qui est le manager plutôt que les autres:
**employee**
-------------------
id name
-------------------
1 ali
2 king
3 mak
4 sam
5 jon
**manage**
--------------
mid eid
--------------
1 2
1 3
3 4
4 5
Et veut obtenir ce résultat:
**result**
--------------------
Manager Staff
--------------------
ali king
ali mak
mak sam
sam jon
Réponses:
Utilisez simplement:
la source
Utilisez la syntaxe ANSI et la manière dont vous joignez les tables sera beaucoup plus claire:
la source
ANSI
syntaxe, cela vaut la peine de l'apprendre. Cela vous aidera à éviter lesJOIN
erreurs que vous avez commises à l'avenir.Pour normaliser la forme
la source
m.mid = e1.id
etm.eid = e2.id
?la source
Vous pouvez REJOINDRE plusieurs TABLES comme cet exemple ci-dessus.
la source
Requête pour joindre plus de deux tables:
la source
Utilisez ceci:
la source
Ne vous joignez pas comme ça. C'est vraiment une très mauvaise pratique !!! Cela ralentira les performances de récupération avec des données massives. Par exemple, s'il y avait 100 lignes dans chaque table, le serveur de base de données doit récupérer les
100x100x100 = 1000000
heures. Il fallait aller chercher des1 million
fois. Pour surmonter ce problème, joignez les deux premières tables qui peuvent extraire le résultat d'une correspondance minimale possible (cela dépend de votre schéma de base de données). Utilisez ce résultat dans Subquery, puis joignez-le à la troisième table et récupérez-le. Pour la toute première jointure ->100x100= 10000
fois et supposons que nous obtenions 5 résultats correspondants. Et puis nous rejoignons la troisième table avec le résultat ->5x100 = 500.
Total fetch =10000+500 = 10200
times only. Et ainsi, la performance a augmenté !!!la source