SQLSERVER表联结(INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN,CROSS JOIN,CROSS APPLY,OUTER APPLY)
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)的更多相关文章
- CROSS JOIN连接用于生成两张表的笛卡尔集
将两张表的情况全部列举出来 结果表: 列= 原表列数相加 行= 原表行数相乘 CROSS JOIN连接用于生成两张表的笛卡尔集. 在sql中cross join的使用: 1.返回的记录数为两个 ...
- 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>先创建 ...
- SQL表连接查询(inner join(join)、full join、left join、right join、cross join)
下面列出了您可以使用的 JOIN 类型,以及它们之间的差异. JOIN: 如果表中有至少一个匹配,则返回行(join=inner join) LEFT JOIN: 即使右表中没有匹配,也从左表返回所有 ...
- 还需要注册的是我们还有一个是“交差集” cross join, 这种Join没有办法用文式图表示,因为其就是把表A和表B的数据进行一个N*M的组合,即笛卡尔积。表达式如下:
还需要注册的是我们还有一个是"交差集" cross join, 这种Join没有办法用文式图表示,因为其就是把表A和表B的数据进行一个N*M的组合,即笛卡尔积.表 ...
- MySql的join(连接)查询 (三表 left join 写法)
1.内连接:将两个表中存在连结关系的字段符合连接条件的记录形成记录集 Select A.name,B.name from A inner join B on A.id=B.id和 Select A.n ...
- SQLServer表变量对IO及内存影响测试
原文:SQLServer表变量对IO及内存影响测试 1. 测试创建表变量对IO的影响 测试创建表变量前后,tempdb的空间大小,目前使用sp_spaceused得到大小,也可以使用视图sys.dm_ ...
- SQL Server信息偏差影响表联结方式统计
SQL Server统计信息偏差影响表联结方式案例浅析 我们知道数据库中的统计信息的准确性是非常重要的.它会影响执行计划.一直想写一篇关于统计信息影响执行计划的相关博客,但是都卡在如何构造一个合适 ...
- inner join(inner可省) 与 left join 之间的区别
关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在inner join 上了. 需求是从数据库查数据,在前端以 ...
- Bat脚本备份sqlserver 表结构、存储过程、函数、指定表数据
Bat脚本备份sqlserver 表结构.存储过程.指定表数据: @echo off cd /d %~dp0 ::备份表结构.存储过程和部分配置表的数据 set LogFile=report.log ...
随机推荐
- DotNETCore 学习笔记 依赖注入和多环境
Dependency Injection ------------------------------------------------------------------------ ASP.NE ...
- Linux内核同步机制之(四):spin lock【转】
转自:http://www.wowotech.net/kernel_synchronization/spinlock.html 一.前言 在linux kernel的实现中,经常会遇到这样的场景:共享 ...
- 2.shell变量
shell的变量的介绍 shell的变量分为系统变量和用户自定义变量系统变量:$HOME, $PWD, $SHELL, $USER等等,这些变量系统已经定义好了,我们可以直接拿来用用户自定义变量:我们 ...
- golang进行加密
crc64加密 package main import ( "fmt" "hash/crc64" ) func main(){ s:="打死udhan ...
- [ 总结 ] nginx 编译参数中文详解
贴出来,方便查找和学习. nginx 编译参数: --prefix=PATH 指向安装目录--sbin-path=PATH 指向(执行)程序文件--conf-path=PATH 指向 ...
- [ nginx ] 代理后端tomcat 无法显示图片报错:ERR_CONTENT_LENGTH_MISMATCH
问题日志如下:
- C# 日期格式化{0:yyyy-MM-dd HH:mm:ss.fff}和{0:yyyy-MM-dd hh:mm:ss.fff}的区别(转)
日期格式化{0:yyyy-MM-dd HH:mm:ss.fff}和{0:yyyy-MM-dd hh:mm:ss.fff}的区别http://www.cnblogs.com/jhxk/articles/ ...
- PHP的普通传值与引用传值以及unset
首先,要理解变量名存储在内存栈中,它是指向堆中具体内存的地址,通过变量名查找堆中的内存; 普通传值,传值以后,是不同的地址名称,指向不同的内存实体; 引用传值,传引用后,是不同的地址名称,但都指向同一 ...
- JavaScript防止重复提交表单
往往有些用户网络慢或者其他问题,在提交表单的时候使劲点击保存提交按钮,在提交表单的时候加上下面的代码,即可以限制在一定时间内,只有一次点击是有效的. <script> var mypret ...
- XSS && CRLF && property&attribute
XSS cross-site scripting 跨站点脚本,为了避免与css冲突,命名为XSS.它是将恶意代码作为一个网页内容,这些恶意代码会注入到用户的浏览器中并执行,从而使用户受到攻击,常见的有 ...