广告
返回顶部
首页 > 资讯 > 数据库 >SQL语句中LEFT JOIN的ON和WHERE有什么区别
  • 928
分享到

SQL语句中LEFT JOIN的ON和WHERE有什么区别

SQLLEFTJOINSQLLEFTJOINONSQLLEFTJOINWHERE 2022-12-16 15:12:06 928人浏览 安东尼
摘要

目录阐述left join的on和where的条件区别第一条sql的过程第二条SQL的过程阐述 写SQL时本想通过 A left B join on and 后面的条件查出的两条记录变成一条,奈何发现还是有两条

阐述

写SQL时本想通过 A left B join on and 后面的条件查出的两条记录变成一条,奈何发现还是有两条。

后来发现 join on and 不会过滤结果记录条数,只会根据 and 后的条件是否显示 B 表的记录,A 表的记录一定会显示。

不管 and 后面的是 A.id=1 还是 B.id=1,都显示出 A 表中所有的记录,并关联显示 B 中对应 A 表中 id1 的记录或者B表中 id 为 1 的记录。

SQL语句中LEFT JOIN的ON和WHERE有什么区别

SELECT u.id,u.nickname,c.content FROM chat_user u
LEFT JOIN chat_communication c
on u.id=c.toid order by c.id

+----+------------------+--------------+
| id | nickname         | content      |
+----+------------------+--------------+
| 86 | 大美如斯         | NULL         |
| 88 | 悦悦             | NULL         |
| 89 | 雨薇             | NULL         |
| 87 | 大金             | 你好         |
| 85 | Love violet life | 你也好       |
| 87 | 大金             | 你在干嘛     |
| 87 | 大金             | 你还在吗     |
| 87 | 大金             | 订单         |
+----+------------------+--------------+
8 rows in set (0.00 sec)

SELECT u.id,u.nickname,c.content FROM chat_user u
LEFT JOIN chat_communication c
on u.id=c.toid and u.nickname="大金" order by c.id
+----+------------------+--------------+
| id | nickname         | content      |
+----+------------------+--------------+
| 85 | Love violet life | NULL         |
| 86 | 大美如斯         | NULL         |
| 88 | 悦悦             | NULL         |
| 89 | 雨薇             | NULL         |
| 87 | 大金             | 你好         |
| 87 | 大金             | 你在干嘛     |
| 87 | 大金             | 你还在吗     |
| 87 | 大金             | 订单         |
+----+------------------+--------------+
8 rows in set (0.00 sec)
SELECT u.id,u.nickname,c.content,c.fromname FROM chat_user u
LEFT JOIN chat_communication c
on u.id=c.toid and c.fromname="雨薇" order by c.id

SQL语句中LEFT JOIN的ON和WHERE有什么区别

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

left join的on和where的条件区别

1、 on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。

2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

新建两张表:

CREATE TABLE test1(id int,size int); 
INSERT INTO test1 VALUES (1,10),(2,20),(3,30); 
CREATE TABLE test2(size int,nikname varchar(10));
INSERT INTO test2 VALUES (10,"AAA"),(20,"BBB"),(20,"CCC"); 

表1:test1

Mysql> select * from test1;
+------+------+
| id   | size |
+------+------+
|    1 |   10 |
|    2 |   20 |
|    3 |   30 |
+------+------+
3 rows in set (0.00 sec)

表2:test2

+------+---------+
| size | nikname |
+------+---------+
|   10 | AAA     |
|   20 | BBB     |
|   20 | CCC     |
+------+---------+
3 rows in set (0.01 sec)

第一条 SQL

SELECT * FROM test1
LEFT JOIN test2 ON (test1.size = test2.size)
WHERE test2.nikname = "AAA";
+------+------+------+---------+
| id   | size | size | nikname |
+------+------+------+---------+
|    1 |   10 |   10 | AAA     |
+------+------+------+---------+
1 row in set (0.00 sec)

第二条 SQL

select * FROM test1 left join test2 
on (test1.size = test2.size and test2.nikname="AAA");
+------+------+------+---------+
| id   | size | size | nikname |
+------+------+------+---------+
|    1 |   10 |   10 | AAA     |
|    2 |   20 | NULL | NULL    |
|    3 |   30 | NULL | NULL    |
+------+------+------+---------+
3 rows in set (0.00 sec)

第一条SQL的过程

1、中间表 on 条件 : test1.size = test2.size

+------+------+------+---------+
| id   | size | size | nikname |
+------+------+------+---------+
|    1 |   10 |   10 | AAA     |
|    2 |   20 |   20 | BBB     |
|    2 |   20 |   20 | CCC     |
|    3 |   30 | NULL | NULL    |
+------+------+------+---------+
4 rows in set (0.00 sec)

2、再对中间表过滤 where 条件:test2.nikname="AAA"

+------+------+------+---------+
| id   | size | size | nikname |
+------+------+------+---------+
|    1 |   10 |   10 | AAA     |
+------+------+------+---------+
1 row in set (0.00 sec)

第二条SQL的过程

1、中间表on条件:test1.size = test2.size and test2.nikname=’AAA’

(条件不为真也会返回左表中的记录)

+------+------+------+---------+
| id   | size | size | nikname |
+------+------+------+---------+
|    1 |   10 |   10 | AAA     |
|    2 |   20 | NULL | NULL    |
|    3 |   30 | NULL | NULL    |
+------+------+------+---------+
3 rows in set (0.00 sec)

其实以上结果的关键原因就是 left join,right join,full join 的特殊性,不管 on 上的条件是否为真都会返回 left 或 right 表中的记录。

full 则具有 left 和 right 的特性的并集。

而 inner join 没这个特殊性,则条件放在 on 中和 where 中,返回的结果集是相同的。

到此这篇关于SQL语句中LEFT JOIN的ON和WHERE有什么区别的文章就介绍到这了,更多相关SQL LEFT JOIN内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: SQL语句中LEFT JOIN的ON和WHERE有什么区别

本文链接: https://www.lsjlt.com/news/175104.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL语句中LEFT JOIN的ON和WHERE有什么区别
    目录阐述left join的on和where的条件区别第一条SQL的过程第二条SQL的过程阐述 写SQL时本想通过 A left B join on and 后面的条件查出的两条记录变成一条,奈何发现还是有两条...
    99+
    2022-12-16
    SQLLEFTJOIN SQLLEFTJOINON SQLLEFTJOINWHERE
  • SQL语句中LEFTJOIN的ON和WHERE有什么区别
    目录阐述left join的on和where的条件区别第一条SQL的过程第二条SQL的过程阐述 写SQL时本想通过 A left B join on and 后面的条件查出...
    99+
    2022-12-16
    SQL LEFT JOIN SQL LEFT JOIN ON SQL LEFT JOIN WHERE
  • sql语句中left join和inner join中的on与where的区别分析
    关于SQL SERVER的表联接查询INNER JOIN 、LEFT JOIN和RIGHT JOIN,经常会用到ON和WHERE的条件查询,以前用的时候有时是凭感觉的,总是没有搞清楚,今日亲自测试了...
    99+
    2022-10-18
  • 深入Oracle的left join中on和where的区别
    今天遇到一个求某月所有天数的统计结果,如果某日的结果是0也需要显示出来,即: 日期                 ...
    99+
    2022-10-18
  • sql中的left join及on、where条件关键字的区别详解
    LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 LEFT JOIN 关键字语法 SELECT co...
    99+
    2022-10-18
  • sql的join和where有什么区别
    小编给大家分享一下sql的join和where有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!join关键字的...
    99+
    2022-10-18
  • MySQL left join操作中on和where放置条件的区别有哪些
    这篇文章给大家分享的是有关MySQL left join操作中on和where放置条件的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。优先级两者放置相同条件,...
    99+
    2022-10-18
  • sql连接查询语句中on、where筛选的区别是什么
    这篇文章将为大家详细讲解有关sql连接查询语句中on、where筛选的区别是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。来看一个示例,有两张数据表,结构和...
    99+
    2022-10-18
  • sql左连接LEFT JOIN和右连接RIGHT JOIN有什么区别
    这篇文章主要介绍了sql左连接LEFT JOIN和右连接RIGHT JOIN有什么区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。sql左...
    99+
    2022-10-18
  • sql语句中where和having的区别是什么
    这篇文章主要介绍“sql语句中where和having的区别是什么”,在日常操作中,相信很多人在sql语句中where和having的区别是什么问题上存在疑惑,小编查...
    99+
    2022-10-18
  • join和on语句中select语句选择公共列的区别
      对多个表进行join时,在select语句中,如果使用using语句,则using语句中选中的列,在select语句中不能指定限定词,否则会报ORA-25154查看emp表SQL&g...
    99+
    2022-10-18
  • SQL语句过滤条件放在on与where子句中的区别和联系浅析
    目录摘要:综述过滤条件放在on和where中的区别小结Reference摘要: 介绍在多表关联SQL语句中,过滤条件放在on和where子句中的区别——inner join中没...
    99+
    2022-09-18
  • SQL中where和having有什么区别
    本篇内容主要讲解“SQL中where和having有什么区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL中where和ha...
    99+
    2022-10-18
  • SQL 中having 和where有什么区别
    今天就跟大家聊聊有关SQL 中having 和where有什么区别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在selec&#...
    99+
    2022-10-18
  • SQL中过滤条件放on和where中的区别有哪些
    这篇文章主要介绍SQL中过滤条件放on和where中的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!join过程可以这样理解:首先两个表做一个笛卡尔积,on后面的...
    99+
    2022-10-18
  • MySQL查询条件中on和where的区别是什么
    今天就跟大家聊聊有关MySQL查询条件中on和where的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MySQL 语句执行顺序...
    99+
    2022-10-18
  • mysql中where和having子句的区别是什么
    本篇文章为大家展示了mysql中where和having子句的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。having的用...
    99+
    2022-10-18
  • java中switch和if语句的区别是什么
    这期内容当中小编将会给大家带来有关java中switch和if语句的区别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程...
    99+
    2023-06-14
  • C语言中的i++和++i有什么区别
    这篇文章主要讲解了“C语言中的i++和++i有什么区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中的i++和++i有什么区别”吧!(1)如果只是看i++和++i,这两个是等价的,都...
    99+
    2023-06-03
  • Go 语言中的数组和切片有什么区别?
    在 Go 语言中,数组和切片都是常见的数据结构。尽管它们都可以用于存储相同类型的数据,但它们在语义上具有不同的行为,这使得它们在实际使用中有着不同的用途。 数组 数组是一种固定长度、存储相同类型元素的集合。在 Go 语言中,数组的长度...
    99+
    2023-10-07
    数组 git 日志
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作