1 常用表联结(inner join,left join,right join,full join,cross join)

if object_id(N'table1',N'U') is not null
drop table table1
if object_id(N'table2',N'U') is not null
drop table table2
create table table1(id int,name varchar(20))
insert into table1
select 1,'小明' union all
select 2,'小李' union all
select 3,'小陈' union all
select 4,'小吴' create table table2(id int,age int)
insert into table2
select 1,23 union all
select 2,24 union all
select 3,25 union all
select 5,26
--连接举例
--,
select a.*,b.* from table1 a,table2 b where b.id = a.id
--cross join 交叉联接(注:cross join后加条件只能用where,不能用on)
select * from table1 a cross join table2 b where b.id = a.id
--inner join 内连接
select * from table1 a inner join table2 b on b.id = a.id
--left join 左外连接
select * from table1 a left join table2 b on b.id = a.id
--right join 右外连接
select * from table1 a right join table2 b on b.id = a.id
--full join 全外连接
select * from table1 a full join table2 b on b.id = a.id --以下两个语句,效果相同
select * from table1 cross join table2
select * from table1,table2 --以下三个语句,效果相同
select * from table1 a,table2 b where b.id = a.id
select * from table1 a cross join table2 b where b.id = a.id
select * from table1 a inner join table2 b on b.id = a.id

2 cross apply,outer apply

(cross apply,outer apply 是SQL Server 2005 新增的)

SQL Server 2000 中有个 cross join 是用于交叉连接。

增加 cross apply 和 outer apply 是用于交叉连接表值函数。

APPLY 的两种形式:CROSS APPLY 和 OUTER APPLY。

CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行。

OUTER APPLY 既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为 NULL。

--创建表值函数 FN_TableValue
IF object_id(N'FN_TableValue',N'TF') IS NOT NULL
DROP FUNCTION FN_TableValue
GO
create function FN_TableValue(@id varchar(100))
returns @a TABLE (
id int,
name varchar(10) NULL
)
AS begin
insert into @a
select * from table2 where id = @id
return
end
go --cross apply
select *
from table1 t1
cross apply (SELECT 1 id,'test1' name UNION ALL SELECT 2,'test2') t2
where t1.id= t2.id select * from table1
select *
from table1 T1
cross apply FN_TableValue(T1.id) --outer apply
select *
from table1 T1
outer apply FN_TableValue(T1.id)

SQLSERVER表联结(INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN,CROSS JOIN,CROSS APPLY,OUTER APPLY)的更多相关文章

  1. CROSS JOIN连接用于生成两张表的笛卡尔集

    将两张表的情况全部列举出来 结果表: 列= 原表列数相加 行= 原表行数相乘     CROSS JOIN连接用于生成两张表的笛卡尔集. 在sql中cross join的使用: 1.返回的记录数为两个 ...

  2. Linq表连接大全(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)

    我们知道在SQL中一共有五种JOIN操作:INNER JOIN.LEFT OUTER JOIN.RIGHT OUTER JOIN.FULL OUTER JOIN.CROSS JOIN 1>先创建 ...

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

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

  4. 还需要注册的是我们还有一个是“交差集” cross join, 这种Join没有办法用文式图表示,因为其就是把表A和表B的数据进行一个N*M的组合,即笛卡尔积。表达式如下:

             还需要注册的是我们还有一个是"交差集" cross join, 这种Join没有办法用文式图表示,因为其就是把表A和表B的数据进行一个N*M的组合,即笛卡尔积.表 ...

  5. MySql的join(连接)查询 (三表 left join 写法)

    1.内连接:将两个表中存在连结关系的字段符合连接条件的记录形成记录集 Select A.name,B.name from A inner join B on A.id=B.id和 Select A.n ...

  6. SQLServer表变量对IO及内存影响测试

    原文:SQLServer表变量对IO及内存影响测试 1. 测试创建表变量对IO的影响 测试创建表变量前后,tempdb的空间大小,目前使用sp_spaceused得到大小,也可以使用视图sys.dm_ ...

  7. SQL Server信息偏差影响表联结方式统计

    SQL Server统计信息偏差影响表联结方式案例浅析   我们知道数据库中的统计信息的准确性是非常重要的.它会影响执行计划.一直想写一篇关于统计信息影响执行计划的相关博客,但是都卡在如何构造一个合适 ...

  8. inner join(inner可省) 与 left join 之间的区别

    关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在inner join 上了. 需求是从数据库查数据,在前端以 ...

  9. Bat脚本备份sqlserver 表结构、存储过程、函数、指定表数据

    Bat脚本备份sqlserver 表结构.存储过程.指定表数据: @echo off cd /d %~dp0 ::备份表结构.存储过程和部分配置表的数据 set LogFile=report.log ...

随机推荐

  1. [bzoj1770][Usaco2009 Nov]lights 燈——Gauss消元法

    题意 给定一个无向图,初始状态所有点均为黑,如果更改一个点,那么它和与它相邻的点全部会被更改.一个点被更改当它的颜色与之前相反. 题解 第一道Gauss消元题.所谓gauss消元,就是使用初等行列式变 ...

  2. android 调试 native 程序的方法

    一.背景 首先说需求,这个需求非常常见,就是android上需要的一个功能,linux已经有开源代码而且非常稳定,希望能直接porting过去使用,这个程序是pure c 的代码,也就是说,跟andr ...

  3. python学习笔记 操作文件和目录

    如果我们要操作文件.目录,可以在命令行下面输入操作系统提供的各种命令来完成.比如dir.cp等命令. 如果要在Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操 ...

  4. (七)计算G711语音的打包长度和RTP里timestamp的增长量

    如何计算G711语音等的打包长度和RTP里timestamp的增长量 一般对于不同的语音有不同的打包周期,而不同的打包周期又对应着不同的timestamp in RTP 那么是如何计算的呢,我们通过G ...

  5. 【 Tomcat 】后端tomcat获取真实IP

    环境: nginx + tomcat nginx.conf 配置: proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_ad ...

  6. 【python】抄写爬淘宝已买到的宝贝的代码

    教程地址:http://cuiqingcai.com/1076.html 这一篇掌握的不好.虽然代码可以跑,但是里面的很多东西都一知半解.需要有空的时候系统整理. 原代码中的正则表达式已经失效了,我自 ...

  7. java.lang.NumberFormatException: multiple points 异常

    平时使用SimpleDateFormat的时候都是在单线程的情况下使用的,今天在改写别人的代码,发现每个类中都会写大量的SimpleDateFormat实例.作为一个程序特有的洁癖开始对代码进行优化. ...

  8. 作业执行器Job Executor

    Job Executor 激活作业执行器 AsyncExecutor是一个组件,它管理线程池,来触发计时器和其他异步任务.其他实现也是可能的(例如使用消息队列,请参阅用户指南的高级部分). 默认情况下 ...

  9. python-函数(装饰器)

    装饰器 装饰器的主要功能: 在不改变函数调用方式的基础上在函数的前.后添加功能. 装饰器的固定格式: #装饰器的本质 :闭包函数 #功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能 ...

  10. request.getServletContext()的问题!

    ServletRequest的getServletContext方法是Servlet3.0添加的,这个可以看一下官方文档 http://docs.oracle.com/javaee/6/api/jav ...