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条
sql多表查询之一:Where 和 On的秘密的更多相关文章
- oracle SQL多表查询
SQL多表查询 1.集合理论 1.1 什么是集合 具有某种特定性质的事物的总体. 集合的特性:无序性.互异性.确定性. 一个集合可以小到从一个表中取出一行中的一列. 1 ro ...
- SQL联表查询
数据库中最最常用的语法----select.简单的select语法很直白: select column from table where expression: 从((from)存储数据的地方(tab ...
- Sql Server的艺术(四) SQL多表查询
表的基本连接 SQL的一个重要特性就是能通过JOIN关键词,从多个交叉表中查询.分析数据. 连接表的目的 在关系数据库中,数据表设计的一个重要原则就是要避免冗余性. 减少了冗余信息,节省了数据库存储空 ...
- sql多表查询(单表查询略过)
表library: 表borrow: 表reader: 1.等值连接:(常用) 原理:将多张表组合成一个逻辑大表,即字段相加记录相乘(笛卡尔积). 语法:select * from 表A,表B whe ...
- SQL多表查询总结
前言 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要.只有真正了解它们之间的区别,才能正确使用. 一.Union UNION 操作符用于合并两个或多个 SELE ...
- sql 多表查询结果验证
1.笛卡尔积 定义: 设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成的有序对,所有这样的有序对组成的集合 ,叫做A与B的笛卡尔积,记作AxB. 上面有一个很关键的词为“有序”,因此,我们 ...
- 【数据库】sql连表查询
SQL总结 连表查询 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两 ...
- Server Sql 多表查询、子查询和分页
一.多表查询:根据特定的连接条件从不同的表中获取所需的数据 多表查询语法: SELECT table1.column, table2.column FROM table1, table2 WHERE ...
- sql 两表查询后 更新某表中部分字段
这是上一个sql更新某表字段的一个延伸,在更新表数据时,实际上会有多表数据查询场景,查询后,只需要更新某一个表中的数据,以下提供两个方法, 第一种使用update 两表查询 update api_ma ...
随机推荐
- 使用vbs脚本添加域网络共享驱动器
MapNetworkDrive Method Adds a shared network drive to your computer system. object.MapNetworkDrive(s ...
- MVC 检测用户是否登录
当我们访问一个网站的需求检測用户是否已经登录(通过Session是否为null),我们知道在WebForm中能够定义一个BasePage类让他继承System.Web.UI.Page,重写它 ...
- ZeroMQ注意事项
Request-Reply状态 供client它必须是严肃的格在根据第一呼叫zmq_send() 函数,然后调用zmq_recv()函数的顺序来运行 对于server来说,运行时序相反 假设不依照这个 ...
- UVALive 5103 Computer Virus on Planet Pandora Description 一些新兴需求模式的字符串 AC自己主动机
主题链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=3104">点击打开链接 题意: ...
- NGUI判断是否点击到UI控件
注意:UI应加上Box Collider 1.射线检测 UICamera发一条射线,射线碰到了东西就说明点击到了UI Ray ray=UICamera.mainCamera.ScreenPointTo ...
- 解决linux看温度是报错No sensors found问题
今日因为同事的linuxserver频繁死机,其型号和配置与我的一致,故此与其对照了一下server的内存使用率.CPU使用率.温度等信息. 在对照温度信息的时候发现无法使用sensors进行温度查看 ...
- OC动态创建的问题变量数组.有数组,在阵列13要素,第一个数据包阵列,每3元素为一组,分成若干组,这些数据包的统一管理。最后,一个数组.(要动态地创建一个数组).两种方法
<span style="font-size:24px;">//////第一种方法 // NSMutableArray *arr = [NSMutable ...
- JXL组件生成报告错误(两)
JXL组件生成报告 1.详细报错例如以下: usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -non ...
- iOS 在下面 AOP 程序
iOS 在下面 AOP 程序 概念 在软件业.AOP对于Aspect Oriented Programming缩写,手段:面向方面的编程.它是一种函数式编程张燕生风扇类型.通过这样一个技术方案功能的预 ...
- [原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇)
原文:[原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) .NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) 前言:接着上篇来. 系列文章链接: [ ...