MySQL ——join连接

前期准备

此表为“course_score”表,表中的数据如下图所示:


image.png

此表为“student”表,表中的数据如下图所示:


image-20240716235556032.png

1.使用场景

JOIN ON 用于将两张或多张表中的记录组合在一起,基于它们之间的一个或多个共同字段。

2.连接的分类

JOIN 按照功能大致分为如下三类:

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录

2.1. 三种连接区别的详解

2.1.1. INNER JOIN(内连接,或等值连接)
**相当于两张表中满足某条件在两个表中共有的部分,即:取两个表匹配对应上的交集部分**,

两张表的关系如下图所示:

image-20240718164230267.png
2.1.2. LEFT JOIN(左连接)

以左边表为主,在查询时左边的表即使没有对应匹配上也会显示出来,但是右边表没有匹配上的部分就不会显示出来

两张表的关系如下图所示:

image-20240718164602698.png
2.1.2. RIGHT JOIN(右连接)

以右边表为主,在查询时右边的表即使没有对应匹配上也会显示出来,但是左边表没有匹配上的部分就不会显示出来

两张表的关系如下图所示:

image-20240718164956402.png

2.2. INNER JOIN(内连接,或等值连接)

2.2.1. 语法
SELECT column1, column2, ...
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;

注释:

  • column1, column2, ... 是你要选择的列的名称,如果使用 * 表示选择所有列。
  • table1, table2 是要连接的两个表的名称。
  • table1.column_name = table2.column_name 是连接条件,指定了两个表中用于匹配的列
2.2.2. SQL语句——例子(简单两张表)
#inner join
#查询student表的学生在course_score表中有成绩的所有学生的学号、课程编号、学生姓名、分数
select id,course_id,name,score from student INNER JOIN course_score ON stu_id=id

#上面的语句和相当于where语句的如下SQL
select id,course_id,name,score from student,course_score where stu_id=id
2.2.3. 执行结果
image-20240718163712634.png
image-20240718165424851.png

2.3. LEFT JOIN(左连接)

2.3.1. 语法
SELECT column1, column2, ...
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
2.3.2.SQL语句——例子
#left join 
#以左边表为主,在查询时左边的表即使没有对应匹配上也会显示出来
#查询出所有学生的学号、课程编号、学生姓名、分数信息
select id,course_id,name,score from student LEFT JOIN course_score ON stu_id=id
2.3.3. 执行结果
image-20240718171038729.png

2.3. RIGHT JOIN(右连接)

2.3.1. 语法
SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
2.3.2. SQL语句——例子
#RIGHT JOIN  
#以右边表为主,在查询时右边的表即使没有对应匹配上也会显示出来
#查询出所有有成绩的学生的学号、课程编号、学生姓名、分数信息
select id,course_id,name,score from student RIGHT JOIN course_score ON stu_id=id
2.3.3. 执行结果
image-20240718171947875.png

注意点:

  1. 连接的两张表至少有一个列应该时关联的;(如:演示的student表中的id和course_score表中的stu_id是有关联的)

  2. 所谓的左连表和右连表是没有特定规定的,就是在左连SQL语句放在前面的这张表就是左连表,即为左连时显示的主表;右连是以SQL语句中后面的表作为右连表,即显示的主表;

  3. 因为现在只有两张表,所以只给大家演示两张表的查询,如果存在多张表需要联合查询可以用如下的语法进行查询;(假如有A,B,C,D四张表)

    #INNER JOIN多表联查
    SELECT A.columnA, B.columnB, C.columnC,D.columnD
    FROM A
    INNER JOIN B ON A.column_id2 = B.column_id1
    INNER JOIN C ON A.column_id3 = C.column_id2
    INNER JOIN D ON C.column_id 1= D.column_id2;
    
    #LEFT JOIN多表联查
    SELECT A.columnA, B.columnB, C.columnC,D.columnD
    FROM A
    LEFT JOIN B ON A.column_id2 = B.column_id1
    LEFT JOIN C ON A.column_id3 = C.column_id2
    LEFT JOIN D ON C.column_id 1= D.column_id2;
    
    #RIGHT JOIN多表联查
    SELECT A.columnA, B.columnB, C.columnC,D.columnD
    FROM A
    RIGHT JOIN B ON A.column_id2 = B.column_id1
    RIGHT JOIN C ON A.column_id3 = C.column_id2
    RIGHT JOIN D ON C.column_id 1= D.column_id2;
    

    4.连接还可以和where子句一起使用,使用语法如下(以inner join为例子);

    #INNER JOIN多表联查
    SELECT A.columnA, B.columnB
    FROM A
    INNER JOIN B ON A.column_id2 = B.column_id1  where A.columnA1='XX'
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容