SQL 中 Left Join 转为 Inner Join 的实际应用

简介: 之前我写过一篇文章叫做,《SQL 中 关于Left Join 转为 Inner Join 的问题》。文章中给出的一个结论是:左关联的查询语句中,只要有 where 的过滤条件,那么该语句将被转为内关联。

之前我写过一篇文章叫做,《SQL 中 关于Left Join 转为 Inner Join 的问题》。文章中给出的一个结论是:左关联的查询语句中,只要有 where 的过滤条件,那么该语句将被转为内关联

继续上一篇的内容,在这篇文章中我来说说在日常开发中的一个实际应用。说来简单,但是不知道的人也经常颇受困扰。

应用:对 Left Join 之后的数据进行过滤,即对左关联之后的数据进行过滤

还是用前一篇文章的例子来说明,建表语句和造数语句均可在前一篇找到,在此不做累赘。

需求说明:

进入界面的时候,需要根据需求查询出所有数据。同时在查询的数据之上有可输入的过滤条件,可以对查询出来的结果进行筛选过滤。即,在进入界面时需要查询出 classstudentsex = 1 的数据,同时界面上有个可输入的过滤条件 classID 。大体结构如下图:

_

进入界面时的查询语句如下:

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

查询结果如下:

_1

此时的问题是:如何把 classID 过滤条件加入到这个查询语句中?

经常有人是这么加 classID 的条件的:

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

得到的查询结果如下图:

_2

数据中仍然带着 student 为空的 class 。原因是,这样的写法,SQL 语句仍然是左关联,空数据无法被过滤。

分析一下需求,添加过滤条件之后,查询结果应该已不是左关联,而是内关联。

此时我们有两种做法

第一种,直接将左关联改为内关联,即将 Left Join 改为 Inner Join
SELECT *
  FROM T_CLASS A
  INNER JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
   AND B.SEX = 1
   AND A.CLASS_ID = 1
 ORDER BY A.CLASS_ID;

查询结果如下:

_3

但是,很多情况下我们不会因为功能中需要有过滤条件而重新写一个查询语句。更多的情况,还是在原有的查询语句中增加过滤条件。此时需要第二种做法。

第二种,用 where 进行过滤,查询语句如下:
SELECT *
  FROM T_CLASS A
 INNER JOIN T_STUDENT B
    ON A.CLASS_ID = B.CLASS_ID
   AND B.SEX = 1
 WHERE A.CLASS_ID = 1
 ORDER BY A.CLASS_ID;

查询结果如下:

_3

就像我在之前文章说的,左关联的查询语句中,只要有 where 的过滤条件,那么该语句将被转为内关联。此时这个用法派上用场了。

相关文章
|
1月前
|
SQL 存储 测试技术
SQL在构建系统中的应用:关键步骤与技巧
在构建基于数据库的应用系统时,SQL(Structured Query Language)作为与数据库交互的核心语言,扮演着至关重要的角色
|
7天前
|
SQL 数据库
如何应用SQL约束条件?
【10月更文挑战第28天】如何应用SQL约束条件?
24 11
|
8天前
|
SQL
SQL JOIN
【11月更文挑战第06天】
24 4
|
14天前
|
SQL 关系型数据库 MySQL
图解 SQL 里的各种 JOIN
用文氏图表示 SQL 里的各种 JOIN,一下子就理解了。
29 2
|
26天前
|
SQL Oracle 关系型数据库
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
|
28天前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
29天前
|
SQL 存储 数据库
SQL在构建系统中的应用:关键要素与编写技巧
在构建基于数据库的系统时,SQL(Structured Query Language)扮演着至关重要的角色
|
1月前
|
SQL 关系型数据库 数据库
SQL数据库:核心原理与应用实践
随着信息技术的飞速发展,数据库管理系统已成为各类组织和企业中不可或缺的核心组件。在众多数据库管理系统中,SQL(结构化查询语言)数据库以其强大的数据管理能力和灵活性,广泛应用于各类业务场景。本文将深入探讨SQL数据库的基本原理、核心特性以及实际应用。一、SQL数据库概述SQL数据库是一种关系型数据库
36 5
|
1月前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
45 3
|
1月前
|
SQL 分布式计算 Java
Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作
Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作
31 3