T-SQL表联接查询
由于实践不足,总是忘记SQL Server 联接表查询的细节,在这里记录以便查询。
一、交叉联接
交叉联接仅执行一个罗辑查询处理阶段——笛卡尔积。也就是说,将一个输入表的每一行与另一个表的所有行匹配。所以,如果一个表有m行,另一个表有n行,得到的结果中有mxn行。
ANSI SQL-92语法:
select c.custid,e.empid
from Sales.Customers as c
cross join HR.Employees as e;
ANSI SQL-89语法:
select c.custid,e.empid
from Sales.Customers as c, HR.Employees as e;
二、内部联接
内部联接应用两个罗辑查询处理阶段——先应用笛卡尔积,然后按指定的谓词筛选行。
ANSI SQL-92语法:
select e.empid,e.firstname,e.lastname,o.orderid
from HR.Employees as e
join Sales.Orders as o
on e.empid=o.empid;
使用ANSI-92语法,应在表名之间使用 INNER JOIN 关键字。由于内部联接是默认联接,所以 INNER 关键字是可选的,可以仅指定 JOIN 关键字。
ANSI SQL-89语法:
select e.empid,e.firstname,e.lastname,o.orderid
from HR.Employees as e, Sales.Orders as o
where e.empid=o.empid;
三、外部联接
外部联接应用内部联接所应用的两个罗辑处理阶段(笛卡尔积和ON筛选),再加上一个“添加外部行”的第三阶段,此阶段是此联接类型唯一具有的阶段。
在外部联接中,需要在表名之间使用关键字LEFT OUTER JOIN、RIGHT OUTER JOIN或FULL OUTER JOIN标记一个表为“保留”表。OUTER关键字是可选的。LEFT关键字表示保留左侧表中的行,RIGHT关键字表示保留右边表中的行,FULL关键字表示左侧和右侧表中的行都保留。外部联接的第三个罗辑查询处理阶段识别保留表中基于ON谓词未能与另一个表匹配的行,此阶段添加这些行到前两个联接阶段生成的结果表中,在这些外部行中,对于联接非保留测的的属性将使用NULL作为占位符。
select c.custid,c.companyname,o.orderid
from Sales.Customers as c
left outer join Sales.Orders as o
on c.custid=o.custid;
如果Customers表中有客户没有任何订单,输出中,来自Orders表的属性中这个客户返回的是NULL标记。
T-SQL表联接查询的更多相关文章
- SQL表连接查询(inner join、full join、left join、right join)
SQL表连接查询(inner join.full join.left join.right join) 前提条件:假设有两个表,一个是学生表,一个是学生成绩表. 表的数据有: 一.内连接-inner ...
- SQL表连接查询
SQL表连接查询(inner join.full join.left join.right join) 表的数据有: 一.内连接-inner jion : 最常见的连接查询可能是这样,查出学生的名字和 ...
- 关于SQL表联接
以SQL2008为例,Microsoft SQL Server 2008支持四种表运算符-JOIN,APPLY,PIVOT,UNPIVOT.JOIN表运算符是ANSI标准,而其他三种是T-SQL对标准 ...
- ibatis中多表联接查询
目前,我在做项目的时候,用到了spring + struts2 +ibatis 框架.平时用到的都是一张简单的表,来进行数据的增.删.改.查.而现在突然需要用到其它的一张表,或多张表进行联接查询 ...
- sql表联接
1.join: 表:erp_orders和erp_orders_products SELECT * FROM erp_orders_products AS products, erp_orders A ...
- SQL 表连接查询出现重复列,由此理清LEFT JOIN、INNER JOIN的区别
1.先创建两个临时表,并插入数据 CREATE TABLE #TEMP1( ID INT IDENTITY(1,1) PRIMARY KEY, name NVARCHAR(50)) CREATE TA ...
- SQL表连接查询(inner join(join)、full join、left join、right join、cross join)
下面列出了您可以使用的 JOIN 类型,以及它们之间的差异. JOIN: 如果表中有至少一个匹配,则返回行(join=inner join) LEFT JOIN: 即使右表中没有匹配,也从左表返回所有 ...
- SQL表连接查询inner join left join right join full join ...
一.最常见的连接查询 select s.name,m.mark from student s,mark m where s.id=m.studentid. 二.内连接-inner join sel ...
- SQL夯实基础(九)MySQL联接查询算法
书接上文<SQL夯实基础(八):联接运算符算法归类>. 这里先解释下EXPLAIN 结果中,第一行出现的表就是驱动表(Important!). 对驱动表可以直接排序,对非驱动表(的字段排序 ...
随机推荐
- 【递归】Vijos P1114 FBI树(NOIP2004普及组第三题)
题目链接: https://vijos.org/p/1114 题目大意: 把01串一分为二,左半边描述当前节点左子树,右半边描述右子树,子树全为1则为I节点,全为0则为B节点,混合则为F节点,直到当前 ...
- jQuery deferred学习笔记
简介 在jQuery1.5.0版本引入,为了实现Deferred对象,jQuery改写了ajax.是由jQuery.Deferred()方法创建的链式对象. $.Deferred在jQuery代码自身 ...
- SVN项目库错误Unsupported FS format svn: Expected FS format between '1' and '4'; found format '6'
SVN项目库错误Unsupported FS format svn: Expected FS format between '1' and '4'; found format '6' 从这里找到解决方 ...
- Sublime Text3 配置markdown插件
sublime是一个亮骚的文本编辑器,而且是跨三大平台,而markdown是一门标记语法,对于记录真是神器,具体语法百度很多,下面教你在sublime上配置markdown. 这两个神器结合起来简直好 ...
- MySQL定时事件
1.创建一个测试表 CREATE TABLE aaa (timeline TIMESTAMP); 2.创建一个事件:每秒插入一条记录到数据表 CREATE EVENT e_test_insert SE ...
- iOS UITextField 设置内边距
[self.yourTextField setValue:[NSNumber numberWithInt:5] forKey:@"_paddingTop"]; [self.your ...
- [Javascript] Refactoring: Polymorphic Functions
if-statements can add serious complexity and beg for refactoring. You can use polymorphic functions ...
- java的Comparator和Comparable
java的Comparator和Comparable 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序. ...
- iTerm2和oh-my-zsh的个性化定制
终于在某东做活动新入手了一台air,看身边小伙伴的mac的终端感觉好炫酷,于是乎准备自己也捯饬捯饬,google了一下,发现了osx平台上的终端神器iTerm2和用来代替bash的oh-my-zsh, ...
- eclipse 库 library jar包 工程 总结
引用库错误 如果在libraries中发现有小红叉,表明引用库错误 解决办法:在左侧projects中add引用到的库 如:我们的支付库引用了以下三个库 那么需要在projects中add这三个库 ...