当前位置:网站首页 > 技术博客 > 正文

left join 和inner join一起用



  • Simple Nested-Loop Join:SNLJ,简单嵌套循环连接
  • Index Nested-Loop Join:INLJ,索引嵌套循环连接
  • Block Nested-Loop Join:BNLJ,缓存块嵌套循环连接
    在选择Join算法时,会有优先级,理论上会优先判断能否使用INLJ、BNLJ:

接下来通过例子帮助理解他们之间的区别

首先,我们创建示例数据库和表。同时也要明确一个概念:操作中,A表被称为左表,B表被称为右表

创建示例数据库,在数据库下创建两张示例表:、。
创建学生基本信息表,如下:
在这里插入图片描述

 

创建学生违纪处罚记录表,如下:
在这里插入图片描述

 

注意,为了测试这三种JOIN操作的不同,表中这个学生ID在学生基本信息表中是不存在的,这个相当于异常数据。

示例信息已经创建完毕,那么我们来看看具体的操作有什么区别。

首先,我们看看INNER JOIN操作,我们写个SQL语句,查询学生表中哪些学生受过处分:

 

在这里插入图片描述
分析一下上面SQL语句的执行结果,我们的查询条件是,即学生表和处分表都有的student_id的结果集,很明显,、在两表中都有

所以我们可以得出INNER JOIN操作的作用是:INNER JOIN根据ON字段标识出来的条件,查出关联的几张表中,符合该条件的记录,合并成一个查询结果集。

 

在这里插入图片描述
分析一下执行结果,LEFT JOIN操作中,比如,会输出 左表A 中所有的数据,同时将符合 ON条件 的 右表B 中搜索出来的结果合并到 左表A表中,如果A表中存在而在B表中不存在,则结果集中会将查询的B表字段值(如此处的P.punishment字段)设置为NULL。

所以,LEFT JOIN的作用是:LEFT JOIN 从 右表B 中将符合ON条件的结果查询出来,合并到A表中,再作为一个结果集输出。

 

在这里插入图片描述
分析过LEFT JOIN了,RIGHT JOIN相信你也已经明白了,“A LEFT JOIN B ON ……”是将符合ON条件的B表搜索结果合并到A表中,作为一个结果集输出。而RIGHT JOIN刚好相反, “A RIGHT JOIN B ON ……”是将符合ON条件的A表搜索结果合并到B表中,作为一个结果集输出:

  • :内联操作,将符合ON条件的A表和B表结果均搜索出来,然后合并为一个结果集。
  • :左联操作,左联顾名思义是,将符合ON条件的B表结果搜索出来,然后左联到A表上,然后将合并后的A表输出。
  • :右联操作,右联顾名思义是,将符合ON条件的A表结果搜索出来,然后右联到B表上,然后将合并后的B表输出。

SQL中INNER、LEFT、RIGHT JOIN的区别和用法详解

版权声明


相关文章:

  • 查看mysql字符集2025-05-09 10:30:01
  • i2c通信的详细讲解2025-05-09 10:30:01
  • 动态路由表2025-05-09 10:30:01
  • jdk的环境变量配置(步骤超级简单)2025-05-09 10:30:01
  • 同步和异步的含义2025-05-09 10:30:01
  • sql指定日期加一天2025-05-09 10:30:01
  • nmon命令使用方法2025-05-09 10:30:01
  • ntpq命令2025-05-09 10:30:01
  • 存储器的分类和区别2025-05-09 10:30:01
  • rbac权限管理设计 7表2025-05-09 10:30:01