由于实践不足,总是忘记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. Spark SQL Table Join(Python)

    示例   Spark SQL注册“临时表”执行“Join”(Inner Join.Left Outer Join.Right Outer Join.Full Outer Join)   代码   fr ...

  2. DateTime用法

    //今天 DateTime.Now.Date.ToShortDateString(); //昨天,也就是今天的日期减一 DateTime.Now.AddDays(-1).ToShortDateStri ...

  3. HDOJ(HDU) 2091 空心三角形

    Problem Description 把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果.在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出 ...

  4. 用Visual Studio创建gtest动态链接库工程

    Step1 创建名为gtest的Win32 Project Step2 在Application Settings中的Application type下选择DLL Step3 把gtest-all.c ...

  5. Semaphore — Windows API

    Semaphore是旗语的意思,在Windows中,Semaphore对象用来控制对资源的并发访问数.Semaphore对象具有一个计数值,当值大于0时,Semaphore被置信号,当计数值等于0时, ...

  6. POJ1505:Copying Books(区间DP)

    Description Before the invention of book-printing, it was very hard to make a copy of a book. All th ...

  7. Chrome调试大全--转载

    作为一名前端开发者,打交道最多的可能是和浏览器.市面上各种浏览器多不胜数,主流的有Chrome,Firefox,Safari,IE,Opera,非主流的如360,遨游,QQ浏览器,搜狗浏览器,据说淘宝 ...

  8. linux开关机命令

    1.reboot重启 2.shutdown -r now 立即重启 root用户使用,与reboot命令相同 3.shutdown -r 10 过10分钟后重启root用户使用 4.shutdown ...

  9. noip 2012 开车旅行

    /*考场上写的暴力 40分钟70分*/ #include<iostream> #include<cstdio> #include<cstring> #define ...

  10. 国内使用google地图的初级使用

    <!DOCTYPE html><html><head><title>Simple Map</title><meta name=&quo ...