数据库左连接的一点知识

数据库左连接的一点知识

 

数据库的做链接我们经常遇到,有一次发现了顺序问题,没有搞明白,现在在回顾总结下。

首先创建2张表A,B,然后插入初始化数据。

 

复制代码
create table A(id int);
create table B(id int);

INSERT INTO A VALUES(1);
INSERT INTO A VALUES(2);
INSERT INTO A VALUES(3);

INSERT INTO B VALUES(1);
INSERT INTO B VALUES(2);
INSERT INTO B VALUES(3);

SELECT * FROM A;
SELECT * FROM B;

id




id




我们假设命名为Case1.
--现在看看这个左连接
select a.*,b.*
from   A a left join B b 
on     a.id =b.id and a.id=2;  

id          id
----------- -----------
           NULL
           2
           NULL

 

这里我们假设命名为Case2
--看看下面这个
select a.*,b.* 
from   A a left join B b 
on     a.id =b.id 
where  a.id=2;

id          id
----------- -----------
           2
复制代码

于是出现了Case1与Case2两种不同的结果,这里说明了什么呢?

首先我们要知道什么是左连接:左连接的关键字是Left join ,

LEFT JOIN 关键字会从左表 (A) 那里返回所有的行,即使在右表 (B) 中没有匹配的行,显示为空值(NULL)。

Case1没有用到where筛选,Case2用到了Where筛选

 

   在使用left jion时,on和where条件的区别如下: 

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

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

( left join:一旦加上where条件,则显示的结果等于inner join)

 

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

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

例如,

select a.*,b.*
from   A a left join B b 
on     a.id =b.id and a.id=4;  

id       id
        NULL
        NULL
        NULL

这里看到,用and的时候,不管条件为真还是假都返回left或right表中的记录

select a.*,b.* 
from   A a left join B b 
on     a.id =b.id 
where  a.id=4;

id     id

这里没有查询出任何数据,

可以看出 

left join:一旦加上where条件,则显示的结果等于inner join

select a.*,b.*
from   A a inner join B b 
on     a.id =b.id and b.id=2;  

id   id
2     2

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

基本查询情况就是这样子的。

共同学习,共同进步!

 

posted @   麦麦提敏  阅读(288)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示