0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SQL语句中left join后用on还是where

Android编程精选 来源:CSDN博客 作者:jcpp9527 2021-11-22 11:08 次阅读

来自丨blog.csdn.net/wqc19920906/article/details/79785424

前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。后来发现 join on and 不会过滤结果记录条数,只会根据and后的条件是否显示 B表的记录,A表的记录一定会显示。不管and 后面的是A.id=1还是B.id=1,都显示出A表中所有的记录,并关联显示B中对应A表中id为1的记录或者B表中id为1的记录。运行sql :

select * from student s left join class c on s.classId=c.id order by s.id

运行sql :

select * from student s left join class c on s.classId=c.id and s.name=“张三” order by s.id

运行sql :

select * from student s left join class c on s.classId=c.id and c.name=“三年级三班” order by s.id

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。在使用left jion时,on和where条件的区别如下:1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。假设有两张表:

两条SQL:1、

select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’

2、

select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)

第一条SQL的过程:1、中间表on条件:

tab1.size = tab2.size

2、再对中间表过滤where 条件:

tab2.name=’AAA’

第二条SQL的过程:1、中间表on条件:

tab1.size = tab2.size and tab2.name=’AAA’

(条件不为真也会返回左表中的记录)其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SQL
    SQL
    +关注

    关注

    1

    文章

    766

    浏览量

    44159
  • 数据库
    +关注

    关注

    7

    文章

    3815

    浏览量

    64446
  • SQL语句
    +关注

    关注

    0

    文章

    19

    浏览量

    7054

原文标题:SQL语句中 left join 后用 on 还是 where,区别大了!

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    浅谈SQL优化小技巧

    作者:京东零售 王军 回顾:MySQL的执行过程回顾 MySQL的执行过程,帮助 介绍 如何进行sql优化。 (1)客户端发送一条查询语句到服务器; (2)服务器先查询缓存,如果命中缓存,则立即返回
    的头像 发表于 12-25 09:59 462次阅读

    如何使用SQL进行数据分析

    的数据所在的数据库和表。 编写查询 :使用 SELECT 语句从数据库中提取数据。你可以使用 WHERE 子句来过滤数据,只获取你感兴趣的记录。 使用连接 :如果数据分散在多个表中,使用 JOIN 操作
    的头像 发表于 11-19 10:26 302次阅读

    SQL错误代码及解决方案

    SQL数据库开发和管理中,常见的错误代码及其解决方案可以归纳如下: 一、语法错误(Syntax Errors) 错误代码 :无特定代码,但通常会在错误消息中明确指出是语法错误。 原因 :SQL语句中
    的头像 发表于 11-19 10:21 1898次阅读

    SQL与NoSQL的区别

    在信息技术领域,数据库是存储和管理数据的核心组件。随着互联网的发展和大数据时代的到来,对数据库的需求也在不断变化。SQL和NoSQL作为两种主流的数据库管理系统,各自有着独特的优势和应用场
    的头像 发表于 11-19 10:15 179次阅读

    请问TLV320AIC3101的LEFT_LOM/LEFT_LOP可否接成RCA单端输出?

    手册中描述TLV320AIC3101音频输出包括:HPLCOM/HPLOUT,HPRCOM/HPROUT,RIGHT_LOM/RIGHT_LOP,LEFT_LOM/LEFT_LOP,方案中打算将
    发表于 10-25 17:11

    IP 地址在 SQL 注入攻击中的作用及防范策略

    SQL 注入是通过将恶意的 SQL 代码插入到输入参数中,欺骗应用程序执行这些恶意代码,从而实现对数据库的非法操作。例如,在一个登录表单中,如果输入的用户名被直接拼接到 SQL 查询语句中
    的头像 发表于 08-05 17:36 324次阅读

    使用ChatGPT解决开发问题

    数据库问题 案例1 这段 SQL 查询语句是用于获取最近更新的前 10 个销售订单 sales_order 关联的交付信息 sales_order_delivery_info。   SELECT
    的头像 发表于 07-19 16:27 620次阅读
    使用ChatGPT解决开发问题

    如何限制IPD语句中的最大字节数?

    当数据可用时,我正在使用带有 IP 和 PORT 的扩展 IPD 语句。 我的问题是,如何限制 IPD 语句中的最大字节数? 当我尝试从服务器作为客户端检索数据时,响应包含大约 20k 的数据,在
    发表于 07-17 06:06

    什么是 Flink SQL 解决不了的问题?

    简介 在实时数据开发过程中,大家经常会用 Flink SQL 或者 Flink DataStream API 来做数据加工。通常情况下选用2者都能加工出想要的数据,但是总会有 Flink SQL
    的头像 发表于 07-09 20:50 327次阅读

    MySQL联表查询优化

    使用显示连接left join(right join,inner join),尽量避免隐式连接(where逗号连接表 .... and ..
    的头像 发表于 04-24 12:33 604次阅读
    MySQL联表查询优化

    SQL全外连接剖析

    =table2.column_name; 语法图 - FULL OUTER JOIN     示例:SQL 完全外连接 让我们使用完全连接来组合相同的两个表。   SQL代码:   SELECT * FROM table_A
    的头像 发表于 03-19 18:28 2249次阅读
    <b class='flag-5'>SQL</b>全外连接剖析

    assign语句和always语句的用法

    Assign语句和Always语句是在硬件描述语言(HDL)中常用的两种语句,用于对数字电路建模和设计。Assign语句用于连续赋值,而Always
    的头像 发表于 02-22 16:24 2608次阅读

    查询SQL在mysql内部是如何执行?

    我们知道在mySQL客户端,输入一条查询SQL,然后看到返回查询的结果。这条查询语句在 MySQL 内部到底是如何执行的呢?本文跟大家探讨一下哈,我们先来看下MySQL基本架构~
    的头像 发表于 01-22 14:53 581次阅读
    查询<b class='flag-5'>SQL</b>在mysql内部是如何执行?

    default在单片机中有什么作用

    在单片机中,default关键字的作用是为了在switch语句中处理default情况下的代码逻辑。switch语句是一种选择结构,根据给定的表达式值,选择不同的分支执行不同的代码。当switch
    的头像 发表于 01-08 10:11 1347次阅读

    单片机if是什么语句

    单片机中的if语句是一种条件语句,用于根据不同的条件执行不同的代码块。在程序执行过程中,条件语句用来决定是否执行特定的代码段。在单片机编程中,if语句是最常见和最基础的一种条件
    的头像 发表于 01-05 14:04 1828次阅读