SQL 中 关于Left Join 转为 Inner Join 的问题「建议收藏」

SQL 中 关于Left Join 转为 Inner Join 的问题「建议收藏」结论从下面的测试结果很容易看出,左关联的查询语句中,只要有WHERE的过滤条件,那么该语句将被转为内关联。一、创建表演示使用,随便创建两张表二、创建数据三、左关联出现的几种情形1.无过滤条件查询语句:

结论

从下面的测试结果很容易看出,左关联的查询语句中,只要有 WHERE 的过滤条件,那么该语句将被转为内关联。

一、创建表

演示使用,随便创建两张表

--班级表
CREATE TABLE T_CLASS(
  class_id NUMBER not null,
  class_name VARCHAR2(100)
)
--学生表
CREATE TABLE T_STUDENT(
  student_id NUMBER not null,
  class_id NUMBER not null,
  student_name VARCHAR2(100),
  age NUMBER,
  sex CHAR(1) 
)

二、创建数据

--班级数据
insert into T_CLASS (CLASS_ID, CLASS_NAME) values (1, '一班');

insert into T_CLASS (CLASS_ID, CLASS_NAME) values (2, '二班');

insert into T_CLASS (CLASS_ID, CLASS_NAME) values (3, '三班');

insert into T_CLASS (CLASS_ID, CLASS_NAME) values (4, '四班');

insert into T_CLASS (CLASS_ID, CLASS_NAME) values (5, '五班');

--学生数据
insert into T_STUDENT (STUDENT_ID, CLASS_ID, STUDENT_NAME, AGE, SEX) values (1, 1, '李1', 3, '1');

insert into T_STUDENT (STUDENT_ID, CLASS_ID, STUDENT_NAME, AGE, SEX) values (2, 1, '李2', 2, '1');

insert into T_STUDENT (STUDENT_ID, CLASS_ID, STUDENT_NAME, AGE, SEX) values (3, 1, '李3', 3, '1');

insert into T_STUDENT (STUDENT_ID, CLASS_ID, STUDENT_NAME, AGE, SEX) values (4, 2, '李4', 4, '1');

insert into T_STUDENT (STUDENT_ID, CLASS_ID, STUDENT_NAME, AGE, SEX) values (5, 2, '李5', 3, '2');

insert into T_STUDENT (STUDENT_ID, CLASS_ID, STUDENT_NAME, AGE, SEX) values (6, 2, '李6', 3, '1');

insert into T_STUDENT (STUDENT_ID, CLASS_ID, STUDENT_NAME, AGE, SEX) values (7, 3, '李7', 6, '2');

insert into T_STUDENT (STUDENT_ID, CLASS_ID, STUDENT_NAME, AGE, SEX) values (8, 3, '李8', 4, '2');

insert into T_STUDENT (STUDENT_ID, CLASS_ID, STUDENT_NAME, AGE, SEX) values (9, 2, '李9', 2, '2');

insert into T_STUDENT (STUDENT_ID, CLASS_ID, STUDENT_NAME, AGE, SEX) values (10, 2, '李10', 3, '1');

insert into T_STUDENT (STUDENT_ID, CLASS_ID, STUDENT_NAME, AGE, SEX) values (11, 3, '李11', 3, '2');

insert into T_STUDENT (STUDENT_ID, CLASS_ID, STUDENT_NAME, AGE, SEX) values (12, 2, '李12', 8, '2');

insert into T_STUDENT (STUDENT_ID, CLASS_ID, STUDENT_NAME, AGE, SEX) values (13, 1, '李13', 6, '2');

三、左关联出现的几种情形

1.无过滤条件

查询语句:

SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
 ORDER BY A.CLASS_ID;

查询结果:
_

2.A表过滤条件在AND中

查询语句:

SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
   AND A.CLASS_ID = 1
 ORDER BY A.CLASS_ID;

查询结果:
A_AND_

3.A表过滤条件在WHERE中

查询语句:

SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
 WHERE A.CLASS_ID = 1
 ORDER BY A.CLASS_ID;

查询结果:
A_WHERE_

4.B表过滤条件在AND中

查询语句:

SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
   AND B.AGE = 3
 ORDER BY A.CLASS_ID;

查询结果:
B_AND_

5.B表过滤条件在WHERE中

查询语句:

SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
 WHERE B.AGE = 3
 ORDER BY A.CLASS_ID;

查询结果:
B_WHERE_

6.A表过滤条件在AND中,B表过滤条件在WHERE中

查询语句:

SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
   AND A.CLASS_ID = 1
 WHERE B.AGE = 3
 ORDER BY A.CLASS_ID;

查询结果:
A_AND_B_WHERE_

7.A表过滤条件在WHERE中,B表过滤条件在AND中

查询语句:

SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
   AND B.AGE = 3
 WHERE A.CLASS_ID = 1
 ORDER BY A.CLASS_ID;

查询结果:
A_WHERE_B_AND_

8.A表和B表过滤条件都在AND中

查询语句:

SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
   AND B.AGE = 3
   AND A.CLASS_ID = 1
 ORDER BY A.CLASS_ID;

查询结果:
A_B_AND_

9.A表和B表过滤条件都在WHERE中

查询语句:

SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
 WHERE B.AGE = 3
   AND A.CLASS_ID = 1
 ORDER BY A.CLASS_ID;

查询结果:
A_B_WHERE_

以下附上所有查询语句:

--1.无过滤条件
SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
 ORDER BY A.CLASS_ID;
--2.A表过滤条件在AND中
SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
   AND A.CLASS_ID = 1
 ORDER BY A.CLASS_ID;
--3.A表过滤条件在WHERE中
SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
 WHERE A.CLASS_ID = 1
 ORDER BY A.CLASS_ID;
--4.B表过滤条件在AND中
SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
   AND B.AGE = 3
 ORDER BY A.CLASS_ID;
--5.B表过滤条件在WHERE中
SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
 WHERE B.AGE = 3
 ORDER BY A.CLASS_ID;
--6.A表过滤条件在AND中,B表过滤条件在WHERE中
SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
   AND A.CLASS_ID = 1
 WHERE B.AGE = 3
 ORDER BY A.CLASS_ID;
--7.A表过滤条件在WHERE中,B表过滤条件在AND中
SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
   AND B.AGE = 3
 WHERE A.CLASS_ID = 1
 ORDER BY A.CLASS_ID;
--8.A表和B表过滤条件都在AND中
SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
   AND B.AGE = 3
   AND A.CLASS_ID = 1
 ORDER BY A.CLASS_ID;
--9.A表和B表过滤条件都在WHERE中
SELECT *
  FROM T_CLASS A
  LEFT JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
 WHERE B.AGE = 3
   AND A.CLASS_ID = 1
 ORDER BY A.CLASS_ID;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/12971.html

(0)

相关推荐

  • Python代码:求列表长度

    Python代码:求列表长度在Python中,列表是一个非常常见的数据类型,它可以储存任意数量的元素,并且可以包含不同类型的元素,例如数字、字符串、列表等。在实际的编程中,我们经常需要知道列表的长度,以便我们能够正确地操作列表。Python提供了内置函数len()来求列表的长度。

    2024-06-01
    51
  • 故障分析 | binlog flush 失败导致的 Crash

    故障分析 | binlog flush 失败导致的 Crash作者:xuty 开个坑,记录自己平时由于解决问题需要或是兴趣研究进行的 MySQL 源码跟踪学习过程。 一、问题现象 某项目上出现 MySQL Crash,相关 errorlog 日志如下,从日志可…

    2023-01-30
    162
  • 定制机和非定制机的区别(手机定制机是什么意思)

    定制机和非定制机的区别(手机定制机是什么意思)

    2023-09-02
    140
  • Python工程师的Opencv安装指南

    Python工程师的Opencv安装指南Opencv(Open Source Computer Vision)是一个广泛使用的计算机视觉开源库,适用于工业图像处理、机器人视觉等领域。由于其功能强大,Opencv被广泛应用于图像处理、人脸检测、目标跟踪、运动分析、手势识别等领域中。

    2024-06-05
    66
  • Python ID作为核心的开发

    Python ID作为核心的开发Python作为一种高级语言,广泛应用于各个领域。在Python开发过程中,IDE(集成开发环境)扮演着重要的角色,它可以提高开发效率和代码质量,让开发过程更加顺利。Python ID作为其中的一种,不仅具有语法高亮、自动缩进、自动补全等常用功能,还能够在一定程度上提升代码调试、测试和发布的效率。在本文中,我们将从多个方面对Python ID作为核心开发进行详细阐述。

    2024-04-14
    74
  • 理解Spark运行模式(二)(Yarn Cluster)[通俗易懂]

    理解Spark运行模式(二)(Yarn Cluster)[通俗易懂]上一篇说到Spark的yarn client运行模式,它与yarn cluster模式的主要区别就是前者Driver是运行在客户端,后者Driver是运行在yarn集群中。yarn client模式一

    2022-12-19
    157
  • dnf白毛笔(dnf白字是什么意思)

    dnf白毛笔(dnf白字是什么意思)

    2023-10-17
    132
  • Python 3 Mac开发技巧分享

    Python 3 Mac开发技巧分享Python 3是一种高级编程语言,可用于各种用途,包括Web开发、数据分析、人工智能和机器学习。在Mac系统上使用Python 3进行开发,可以使开发变得更加简单和高效。

    2024-05-28
    54

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注