由于实践不足,总是忘记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表联接查询的更多相关文章

  1. SQL表连接查询(inner join、full join、left join、right join)

    SQL表连接查询(inner join.full join.left join.right join) 前提条件:假设有两个表,一个是学生表,一个是学生成绩表. 表的数据有: 一.内连接-inner ...

  2. SQL表连接查询

    SQL表连接查询(inner join.full join.left join.right join) 表的数据有: 一.内连接-inner jion : 最常见的连接查询可能是这样,查出学生的名字和 ...

  3. 关于SQL表联接

    以SQL2008为例,Microsoft SQL Server 2008支持四种表运算符-JOIN,APPLY,PIVOT,UNPIVOT.JOIN表运算符是ANSI标准,而其他三种是T-SQL对标准 ...

  4. ibatis中多表联接查询

     目前,我在做项目的时候,用到了spring + struts2 +ibatis 框架.平时用到的都是一张简单的表,来进行数据的增.删.改.查.而现在突然需要用到其它的一张表,或多张表进行联接查询 ...

  5. sql表联接

    1.join: 表:erp_orders和erp_orders_products SELECT * FROM erp_orders_products AS products, erp_orders A ...

  6. SQL 表连接查询出现重复列,由此理清LEFT JOIN、INNER JOIN的区别

    1.先创建两个临时表,并插入数据 CREATE TABLE #TEMP1( ID INT IDENTITY(1,1) PRIMARY KEY, name NVARCHAR(50)) CREATE TA ...

  7. SQL表连接查询(inner join(join)、full join、left join、right join、cross join)

    下面列出了您可以使用的 JOIN 类型,以及它们之间的差异. JOIN: 如果表中有至少一个匹配,则返回行(join=inner join) LEFT JOIN: 即使右表中没有匹配,也从左表返回所有 ...

  8. 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 ...

  9. SQL夯实基础(九)MySQL联接查询算法

    书接上文<SQL夯实基础(八):联接运算符算法归类>. 这里先解释下EXPLAIN 结果中,第一行出现的表就是驱动表(Important!). 对驱动表可以直接排序,对非驱动表(的字段排序 ...

随机推荐

  1. SQL SELECT INTO 语句

    SQL SELECT INTO 语句可用于创建表的备份复件. SELECT INTO 语句 SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用 ...

  2. js接收后台时间数据变成秒处理为正常格式

    在做项目时,后台数据json传到前台ajax,数据中包含DateTime格式的数据,前台js操作时间数据的时候却发现日期变成了秒格式 js能对日期操作的那些方法均不能使用了,例如getDay()等等, ...

  3. Javascript校验含中文的字符串长度

    原文地址:http://sozai.wlling.com/html/Tutorial/JavaScript/2009/0214/2936.html /** * 得到字符串的字符长度(一个汉字占两个字符 ...

  4. [Design Pattern] DAO Pattern 简单案例

    Data Access Object Pattern, or DAO Pattern, 即 DAO 模式,用于分离底层的数据访问接口,已经上层的业务逻辑. 下面是 Dao 模式的一个简单的案例. St ...

  5. Gradle构建Java Web应用(转)

    转自:http://www.blogjava.net/jiangshachina/archive/2014/02/03/409285.html 本文是发布在java.net上的一篇摘自于<Gra ...

  6. requirejs2读书笔记

    If you want to do require() calls in the HTML page, then it is best to not use data-main. data-main ...

  7. SpringMVC框架图解析

    Spring框架提供了构造Web应用程序的全能MVC模块.Spring MVC分离了控制器.模型对象.分派器以及处理程序对象的角色,这种分离让它们更容易进行制定.是一个标准的MVC框架. 那你猜一猜哪 ...

  8. android performClick使用

    performClick 是使用代码主动去调用控件的点击事件(模拟人手去触摸控件) ----------------------------------------- boolean android. ...

  9. [转] DAG算法在hadoop中的应用

    http://jiezhu2007.iteye.com/blog/2041422 大学里面数据结构里面有专门的一章图论,可惜当年没有认真学习,现在不得不再次捡 起来.真是少壮不努力,老大徒伤悲呀!什么 ...

  10. sql 处理以字符隔开的字符串(类似split)

    sql 处理以字符隔开的字符串(类似split)的处理方法. CREATE PROCEDURE dbo.Vip_SendMails @userids varchar(MAX), ), ), @c va ...