sql多表查询之一:Where 和 On的秘密

简介: 原文 sql多表查询之一:Where 和 On的秘密 对于还在SQL初级阶段的朋友来说,sql多表查询问题是一个比较有趣也容易出错的技术。什么时候会用到sql多表查询呢?是在两张或两张以上表单中通过某几个字段进行互联管理的时候,这就不得不说说sql多表查询中Where 和 On的秘密。

原文 sql多表查询之一:Where 和 On的秘密

对于还在SQL初级阶段的朋友来说,sql多表查询问题是一个比较有趣也容易出错的技术。什么时候会用到sql多表查询呢?是在两张或两张以上表单中通过某几个字段进行互联管理的时候,这就不得不说说sql多表查询中Where 和 On的秘密。

 

在了解sql多表查询中Where 和 On的秘密之前,让我们先来温习一下连接基础吧


按列a把两表连接,请问各种连接方式的结果的结果?

语法呢?

左    select * from @a Aa left join @b Bb on Aa.a=Bb.a

右    select * from @a Aa right join @b Bb on Aa.a=Bb.a

内    select * from @a Aa join @b Bb on Aa.a=Bb.a

完全       select * from @a Aa full join @b Bb on Aa.a=Bb.a

迪卡尔    select * from @a,@b

是不是很简单呢,接下来我们来看sql多表查询中Where 和 On的秘密:)

 

大家想想,依据下表

下面语句出来的结果是什么?

 

select * from @a _a left join @b _b on _a.id=_b.id where _b.name=1

select * from @a _a left join @b _b on _a.id=_b.id and _b.name=1

先想想,再看结果吧^_*

sql多表查询中Where 和 On的秘密在SQLserver 中的执行顺序是: 先join后where

所以,当条件写在where里,结果如下:

条件写在on里,结果如下:

Where 和 On是不是很有趣,你也试试吧!

 

下一个

请说出下面语句各返回多少记录

select * from @a a left join @b b on a.id=b.id where a.id=1

select * from @a a left join @b b on a.id=b.id and b.id=1

select * from @a a left join @b b on a.id=b.id and a.id=1

select * from @a a left join @b b on a.id=1

先想想,再看答案:P

—        select * from @a a left join @b b on a.id=b.id where a.id=1

 

—        原因是先执行连接条件,再执行where部分,所以只有1条记录

 

—        select * from @a a left join @b b on a.id=b.id and b.id=1

 

—        原因是满足a.id=b.id and a.id=1 条件的只有一条,但left join是对没有附和条件的加null处理,所以最后结果是3条

 

—        select * from @a a left join @b b on a.id=b.id and a.id=1

 

—        原因是满足a.id=b.id and a.id=1 条件的只有一条,但left join是对没有附和条件的加null处理,所以最后结果是3条

 

—        select * from @a a left join @b b on a.id=1

 

—        原因是在做完迪卡尔后,满足a.id=1 条件的有3条,但left join是对没有附和条件的加null处理,所以最后结果是5条

目录
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
六、SQL多表查询
六、SQL多表查询
30 0
|
4月前
|
SQL 数据库
SQL 查询优化指南:SELECT、SELECT DISTINCT、WHERE 和 ORDER BY
SQL的SELECT语句用于从数据库中选择数据。SELECT语句的基本语法如下:
55 1
|
6月前
|
SQL XML Java
Mybatis:SQL注入问题 like模糊查询 多表查询 动态SQL
Mybatis:SQL注入问题 like模糊查询 多表查询 动态SQL
65 0
|
1月前
|
SQL
SQL多表查询的几种连接方式
SQL多表查询时,主要使用以下几种连接方式
|
3月前
|
SQL
SQL语句多表查询练习
SQL语句多表查询练习
11 0
|
7月前
|
SQL 关系型数据库 MySQL
SQL99语法实现多表查询
SQL99语法实现多表查询
40 0
|
3月前
|
SQL 流计算
在Flink SQL中,如果在使用表别名后,WHERE子句中使用了别名,可能会出现找不到表的问题
【1月更文挑战第4天】【1月更文挑战第18篇】在Flink SQL中,如果在使用表别名后,WHERE子句中使用了别名,可能会出现找不到表的问题
32 1
|
6月前
|
SQL
一条集多表查询、字段与字段拼接、合并每张表共同字段、新增列并赋值的SQL
一条集多表查询、字段与字段拼接、合并每张表共同字段、新增列并赋值的SQL
26 0
|
6月前
|
SQL
29MyBatis - 动态SQL的 where标签
29MyBatis - 动态SQL的 where标签
30 0
|
8月前
|
SQL 开发框架 .NET
sql 不同where下的统计
sql 不同where下的统计
53 0