• SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(七)


    LEFT JOIN

    LEFT JOIN 同样用于关联两个表,ON 关键字后指定两个表共有的字段作为匹配条件,与 INNER JOIN 不同的地方在于匹配不上的数据行INNER JOIN 对两表匹配不上的数据行不返回结果,而 LEFT JOIN 只对右表(table2)匹配不上的数据行不返回结果,但是对左表(table1)匹配不上的数据行依然返回结果

    语法:

    SELECT columns
    FROM table1
    LEFT JOIN table2
    ON table1.column_name=table2.column_name;
    
    • 1
    • 2
    • 3
    • 4

    columns:要显示的列名。
    table1:左表的名称。
    table2:右表的名称。
    column_name:表中用于连接的列名。
    table1.column_name:表示table1表的column_name字段。

    举例说明:
    依然使用之前的score学生成绩表和subject课程数据表,对subject表进行一些修改,删除语文科目的数据行:

    此时依然使用 INNER JOIN 关联两表,查询学生各科成绩:

    SELECT id,score.subject_id,subject_name,score
    FROM score
    INNER JOIN subject
    ON score.subject_id = subject.subject_id;
    
    • 1
    • 2
    • 3
    • 4

    从结果中看到每个学生本应有六科成绩,但是此时只能查询出五科的成绩,因为缺失语文科目的数据行,两张表匹配不上的行都没有返回结果。

    如果使用 LEFTJOIN 的关联方式呢?

    SELECT id,score.subject_id,subject_name,score
    FROM score
    LEFT JOIN subject
    ON score.subject_id = subject.subject_id;
    
    • 1
    • 2
    • 3
    • 4

    我们注意到,LEFT JOIN 关联后,左表(score表)的部分数据行没有匹配成功,但是依然返回了结果。也就是说,左表的数据行不管能否匹配成功,都会在结果中显示出来,不会造成左表数据的遗漏,一般用于左表存储了重要的,不可遗落的数据的情况。

    RIGHT JOIN

    既然有 LEFT JOIN ,那自然也有 RIGHT JOIN 。RIGHT JOIN 与 LEFT JOIN 正好相反右表的数据行不管能否匹配成功,都会在结果中显示出来,不会造成右表数据的遗漏。

    语法:

    SELECT columns
    FROM table1
    RIGHT JOIN table2
    ON table1.column_name=table2.column_name;
    
    • 1
    • 2
    • 3
    • 4

    columns:要显示的列名。
    table1:左表的名称。
    table2:右表的名称。
    column_name:表中用于连接的列名。
    table1.column_name:表示table1表的column_name字段。

    举例说明:
    先把 subject 表的数据修改一下,增加一条新数据“1000000 体育”,这条数据在score表中没有匹配项。
    新subject表如下:

    将score表与subject表进行 RIGHT JOIN 关联,查询学生各科成绩:

    SELECT id,score.subject_id,subject_name,score
    FROM score
    RIGHT JOIN subject
    ON score.subject_id = subject.subject_id;
    
    • 1
    • 2
    • 3
    • 4

    RIGHT JOIN 关键字从右表(subject表)返回所有的行,即使表中有匹配不到的数据行。

    本专栏将持续更新,对数据库SQL感兴趣的同学可以关注一下,谢谢!

  • 相关阅读:
    CentOS环境下安装Nacos
    考研数一数二数三之间的具体详细区别
    【路径规划-PRM路径规划】基于RRT算法避障路径规划附完整matlab代码
    day6-双向聚类文献综述
    C#中实现按位域操作
    Intel 700 800系网卡升级支持WOL UEFI PXE方法
    DDD领域驱动设计
    HAL库(STM32CubeMX)之看门狗学习及实操(STM32F767IGTX)
    Git分支操作
    优先级队列(堆)的概念+模拟堆的实现
  • 原文地址:https://blog.csdn.net/lrn521zsd/article/details/134472068