Lorsque nous écrivons des instructions SQL, nous ne pouvons pas éviter d'utiliser des mots-clés de connexion, tels que des connexions internes et des connexions externes. Il en existe de nombreux types, je posterai ici une photo que j'ai trouvée ailleurs :
Je trouve que cette photo est très détaillée, elle montre Hors du commun types dans les instructions SQL, prenez la jointure gauche dans cet article comme exemple. Elle est définie en ligne comme ceci : Le mot-clé LEFT JOIN renverra toutes les lignes de la table de gauche, même s'il n'y a aucune ligne correspondante dans la table de droite.
En fait, en termes de sens littéral, left join
est relativement facile à comprendre, mais dans le processus d'utilisation, il y aura encore quelques problèmes, comme l'état après et après où , leurs résultats sont complètement différents. Ensuite, nous découvrirons la jointure gauche de superficielle à profonde.
CREATE TABLE `class` ( `class_id` int NOT NULL, `class_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `class_grade` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, PRIMARY KEY (`class_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=COMPACT;
tableau de score :
CREATE TABLE `score` ( `class_id` int NOT NULL, `stu_id` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `score` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=COMPACT;
Ils ont chacun des données :
#🎜🎜 #
Q1 : sélectionnez c.class_id,c.class_name,c.class_grade,s.stu_id,s.score de la classe c, rejoignez le score s sur c.class_id =s.class_id. Cette phrase peut être réécrite comme suit : Nous avons analysé cette instruction. La table de gauche est la table des classes, la table de droite est la table des scores et leur champ associé est class_id. Lorsque le class_id dans la table de gauche est 1, il y a deux enregistrements dans la table de droite avec class_id 1 ; lorsque le class_id dans la table de gauche est 2, le class_id dans les deux enregistrements de la table de droite est 2 ; la table de gauche est 3, il y a un enregistrement dans la table de droite. Le class_id de l'enregistrement est 3, nous devrions donc obtenir cinq enregistrements :1 语文 A A002 82 1 语文 A A001 91 2 数学 B A002 87 2 数学 B A001 95 3 英语 C B003 65
Sur la base de l'exemple de la première question, celle-ci a une condition supplémentaire de s.score=90. Cela signifie que le champ de score du tableau de droite est de 90, mais quand on regarde les données du tableau. , on constate qu'il n'y a pas de score dans le tableau de droite 90, OK, le résultat sera-t-il vide ? Après tout, le tableau de droite ne contient pas de données répondant aux conditions.
1 语文 A 2 数学 B 3 英语 C
1 语文 A null null 2 数学 B null null 3 英语 C null null
1 语文 A null null 2 数学 B null null 3 英语 C null null
1 语文 A A002 82 1 语文 A A001 91 2 数学 B null null 3 英语 C null null
1 语文 A 2 数学 B 3 英语 C B003 65
1 语文 A 2 数学 B 3 英语 C
Q9 : sélectionnez c.class_id,c.class_name,c.class_grade,s.stu_id,s.score de la classe c, rejoignez le score s sur c.class_id=s.class_id et c.class_name= «中文’ et s.
右表中只有一条记录的score为91,所以需要拿左表与右表的这一条数据进行关联,左表只有语文可以与右表的那一条数据对上,所以结果为:
1 语文 A A001 91 2 数学 B 3 英语 C
Q10:select c.class_id,c.class_name,c.class_grade,s.stu_id,s.score from class c left join score s on c.class_id=s.class_id and c.class_name=‘体育’ and s.score=90。
右表中没有数据的score为90,同样左表中也没有class_name为体育,但是这并不意味着最后的结果就是空了,只要没有where条件,最终的结果数量最起码也会是左表中原先的数据数量,所以这条sql会返回左表的全部数据。
1 语文 A 2 数学 B 3 英语 C
Q11:select c.class_id,c.class_name,c.class_grade,s.stu_id,s.score from class c left join score s on c.class_id=s.class_id where c.class_name=‘英语’。
需要注意的点:条件是在where中的,也就是在表关联之后,再进行过滤的,所以最终的结果只会有一条:
3 英语 C B003 65
Q12:select c.class_id,c.class_name,c.class_grade,s.stu_id,s.score from class c left join score s on c.class_id=s.class_id where s.score=91。
和上面一样,是在连表查询之后,找出score=90的数据:
1 语文 A A001 91
Q12;select c.class_id,c.class_name,c.class_grade,s.stu_id,s.score from class c left join score s on c.class_id=s.class_id where c.class_name=‘语文’ and s.score=91。
我们将两表连接查询后,找出结果中class_name为语文,score为91的记录,只有一条:
1 语文 A A001 91
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!