Maison >base de données >tutoriel mysql >Une explication de la différence d'utilisation entre on etwhere dans les instructions SQL

Une explication de la différence d'utilisation entre on etwhere dans les instructions SQL

巴扎黑
巴扎黑original
2017-07-17 09:37:217067parcourir

Ce blog fait référence à Internet. Je ne sais pas quel article est le manuscrit original, je le déclare donc par la présente.

Lorsque la base de données renvoie des enregistrements en connectant deux tables ou plus, une table temporaire intermédiaire sera générée, puis cette table temporaire sera renvoyée à l'utilisateur.

Tutoriels vidéo MySQL associés recommandés : "Tutoriel MySQL "

Lors de l'utilisation de jion gauche, la différence entre les conditions on et Where est la suivante :

1. La condition on est une condition utilisée lors de la génération d'une table temporaire. Elle renverra les enregistrements dans la table de gauche, que la condition on soit vraie ou non.

2. La condition Where est la condition de filtrage de la table temporaire après la génération de la table temporaire. Pour le moment, la jointure gauche n'a aucune signification (les enregistrements de la table de gauche doivent être renvoyés). Si la condition n'est pas vraie, tous seront filtrés.

Supposons qu'il y ait deux tableaux :

Tableau 1 : tab2

tbody>

id

size

1

10

2

20

3

30

id

taille

size

name

10

AAA

20

BBB

20

CCC

1


10
1、select * form tab1 left join tab2 on (tab1.size =
tab2.size) where tab2.name=’AAA’
2、select * form tab1 left join tab2 on (tab1.size =
tab2.size and tab2.name=’AAA’)
2

第一条SQL的过程:

1、中间表on条件: tab1.size = tab2.sizetab1.idtab1.sizetab2.sizetab2.name11010AAA22020BBB22020CCC330(null)(null)||2、再对中间表过滤where 条件(此时不为真的行会被过滤掉):tab2.name=’AAA’tab1.idtab1.sizetab2.sizetab2.name11010AAA 

第二条SQL的过程:

1、中间表on条件: tab1.size = tab2.size and tab2.name=’AAA’(条件不为真也会返回左表中的记录)tab1.idtab1.sizetab2.sizetab2.name11010AAA220(null)(null)330(null)(null)
20

3 30
Tableau 2 : tab2
taille nom
10 AAA
20

BBB
20 CCC

Deux SQL :

Le premier processus SQL :

1. Table intermédiaire sous condition : tab1.size = tab2.sizetab1.idtab1.sizetab2.sizetab2.name11010AAA22020BBB22020CCC330(null)(null)|| 2. Puis filtrer la condition Where sur la table intermédiaire (les lignes qui ne sont pas vraies à ce moment seront filtrées) : tab2.name='AAA'tab1.idtab1.sizetab2.sizetab2.name11010AAA
Deuxième processus SQL : 1. Intermédiaire table sous condition : tab1.size = tab2.size et tab2.name='AAA' (les enregistrements de la table de gauche seront renvoyés si la condition n'est pas vraie) tab1.idtab1.sizetab2.sizetab2.name11010AAA220(null)(null ) 330(null)(null)
En fait, la principale raison des résultats ci-dessus est la particularité de la jointure gauche, de la jointure droite et de la jointure complète, peu importesur soit vraie ou non, elle reviendra gauche ou droite dans le tableau Record , complet a l'union des caractéristiques de gauche et de droite. Le jion interne n'a pas cette particularité, donc les conditions sont placées sur et où, et l'ensemble de résultats renvoyé est le même Résumé : En général, l'instruction Where filtrera le nombre de lignes contenant NULL (le nombre de lignes avec une condition fausse). Par conséquent, les résultats de l'instruction Where et de l'instruction on sont les plus différents dans l'instruction FULL JOIN ; il n'y a aucune différence dans l'instruction JOIN/INNER JOIN ; la différence entre LEFT JOIN et RIGHT JOIN dépend de l'expression et des données dans le tableau.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn