sql server 2008中的apply运算符使用方法

Apply运算符可以实现两个查询结果的全组合结果,又称为交叉集合。例如两个数据组合(A,B)、(A,B),他们的交叉集合为(AA,AB,AA,AB)。

Apply分为Cross Apply和Outer Apply两种使用方式。具体分析如下:

首先先建立两个表StudentList和ScoreInfo。脚本语言如下:


代码如下:

create table StudentList(
id int Identity(1,1) not null,
Name nvarchar(20) not null,
Sex bit not null,
Birthday date not null,
Class nvarchar(2) not null,
Grade nvarchar(2) not null,
regdate date not null,
Primary key (id));

create table ScoreInfo(
id int Identity(1,1) not null primary key,
StudentID int not null,
ClassID int not null,
Score int not null,
TestDate date not null,
regdate date not null);

其中ScoreInfo中的StudentID为StudentList中id的外键

插入数据,脚本如下


代码如下:

insert into StudentList(Name, Sex, Birthday, Class, Grade, regdate) values('张三', 1, '1988-05-28', 1, 8, '2010-05-05');

insert into StudentList(Name, Sex, Birthday, Class, Grade, regdate) values('李四', 1, '1985-09-13', 4, 4, '2010-05-05');

insert into StudentList(Name, Sex, Birthday, Class, Grade, regdate) values('王丽', 0, '1987-11-05', 1, 7, '2010-05-05');

insert into ScoreInfo(StudentID, ClassID, Score, TestDate, regdate) values(1, 1, 98, '2010-04-15', '2010-05-01');

insert into ScoreInfo(StudentID, ClassID, Score, TestDate, regdate) values(1, 2, 92, '2010-04-15', '2010-05-01');

insert into ScoreInfo(StudentID, ClassID, Score, TestDate, regdate) values(1, 3, 86, '2010-04-15', '2010-05-01');

insert into ScoreInfo(StudentID, ClassID, Score, TestDate, regdate) values(2, 1, 95, '2010-04-15', '2010-05-01');

insert into ScoreInfo(StudentID, ClassID, Score, TestDate, regdate) values(2, 2, 94, '2010-04-15', '2010-05-01');

insert into ScoreInfo(StudentID, ClassID, Score, TestDate, regdate) values(2, 3, 91, '2010-04-15', '2010-05-01');

insert into ScoreInfo(StudentID, ClassID, Score, TestDate, regdate) values(3, 1, 90, '2010-04-15', '2010-05-01');

insert into ScoreInfo(StudentID, ClassID, Score, TestDate, regdate) values(3, 2, 88, '2010-04-15', '2010-05-01');

insert into ScoreInfo(StudentID, ClassID, Score, TestDate, regdate) values(3, 3, 90, '2010-04-15', '2010-05-01');

两个表结构建立完毕,数据也成功插入进去了。为了便于讲解在StudentList表中再插入一条记录


代码如下:

insert into StudentList(Name, Sex, Birthday, Class, Grade, regdate)
values('李铭', 1, '1989-05-04', 2, 7, '2010-05-05');

输入以下语句


代码如下:

select * from StudentList a
cross apply
(select ClassID, Score from ScoreInfo where StudentID=a.id) b;

结果如下

再输入以下语句

select * from StudentList a
outer apply
(select ClassID, Score from ScoreInfo where StudentID=a.id) b;

结果如下

可以看出Cross Apply和Outer Apply的区别

Cross Apply把语句两边的两个Select查询结果进行交叉配对,将所有结果展示出来。Cross Apply查询确保在查询两个子集数据的交集时,只有有效信息的集合才被列出来。

OuterApply查询是把两个子集的所有组合列了出来,不管数据是否有交叉,全部显示要配对的数据。

(0)

相关推荐

  • sql server 2008中的apply运算符使用方法

    Apply运算符可以实现两个查询结果的全组合结果,又称为交叉集合.例如两个数据组合(A,B).(A,B),他们的交叉集合为(AA,AB,AA,AB). Apply分为Cross Apply和Outer Apply两种使用方式.具体分析如下: 首先先建立两个表StudentList和ScoreInfo.脚本语言如下: 复制代码 代码如下: create table StudentList(id int Identity(1,1) not null,Name nvarchar(20) not nul

  • SQL Server 2008中的FileStream介绍

    很多朋友并不知道FileStream 这个功能.因为FileStream 一般在安装的时候默认是不启用的,在SQL Server 2008中,引入了Filestream,使用它可以将非机构化大型数据(如文本文档.图像和视频)等以varbinary(max)的形式存储在文件系统中.使用数据库的备份还原功能可以将这些数据一起备份还原. 在选择数据库文件路径那个窗口,有一个标签是"FileStream".如果在安装的时候你没有启用,安装后可以通过以下设置来开启FileStream 功能. 1

  • SQL Server 2008中的数据表压缩功能详细介绍

    SQL Server 2005 SP2为我们带来了vardecimal功能,当时针对decimail和numeric数据类型推出了新的存储格式--vardecimal.vardecimal存储格式允许 decimal和numeric数据类型的存储作为一个可变长度列. 这项功能使得原来定长的decimal数据在数据文件中以可变长的格式存储,据称这项功能可以为典型的数据仓库节省30%的空间,而SQL Server 2008在这一基础上又进一步增强了数据压缩功能.SQL Server 2008现在支持

  • SQL Server 2008中的代码安全(三) 通过PassPhrase加密

    前言: 在SQL Server 2005和SQL Server 2008之前.如果希望加密敏感数据,如财务信息.工资或身份证号,必须借助外部应用程序或算法.SQL Server 2005引入内建数据加密的能力,使用证书.密钥和系统函数的组合来完成. 与数字证书类似.SQL Server 证书包括公钥和私钥这一对密钥,它们都用来加密和解密数据.SQL Server也拥有创建非对称密钥和对称密钥对象的能力.非对称密钥(asymmetric key)与证书相似,公钥用来加密数据库,私钥用来解密数据.非

  • SQL server 2008 更改登录验证方式的方法

    前言:之前在敲学生的时候也遇到过这个问题,但是当时没有能及时总结,导致这次遇到问题还要重新去查,所以今天就做个总结,方便自己也帮助他人! 如果在安装过程中选择"Windows 身份验证模式",则 sa 登录名将被禁用.如果稍后将身份验证模式更改为"SQL Server 和 Windows 身份验证模式",则 sa 登录名仍处于禁用状态.若要启用 sa 登录帐户,请使用 ALTER LOGIN 语句. 安全说明: sa 帐户是一个广为人知的 SQL Server 帐户

  • SQL SERVER 2008 r2 数据压缩的两种方法

    在压缩数据之前建议大家看下这篇文章:http://www.jb51.net/article/136522.htm 一般情况下不建议压缩数据,如果压缩数据建议先备份 第一种方法:通过sql server management studio 首先我们要下载能操作 2008的工具 sql server management studio 这个工具在sql server 2008 r2 安装后就会有! 一起安装妥当,我们就可以开始选择了看图! 所有的都是单击右键,凡在你需要压缩的表上面,依次选择到数据库

  • SQL SERVER 2008 r2 数据压缩的两种方法第1/2页

    有时候sql server 2008 数据库日志文件太大,需要收缩释放硬盘内存.如果ldb文件过大会导致数据库运行缓慢,甚至系统都会卡住. 1.登陆项目平台数据库服务器.双击SQL Server Management Studio打开数据库管理.登陆数据库 2.如下图,打开数据库属性窗口 3.如下图,更改数据库恢复模式 4.如下图,收缩数据库日志 到这里已经完成了,数据库的日志收缩 5.如下图,数据库恢复模式修改为完整 经过我们小编测试,完美解决,我们成功的把一个84G的文件,压缩到1M. 下面

  • SQL Server 2008 R2登录失败的解决方法

    为大家分享SQL Server 2008 R2登录失败的解决方法 1.启动SQL Server 2008 Management Studio,会看到 2.里面有一个 身份验证.这个 身份验证 的下拉列表里面有两个选项: Windows 身份验证 和 SQL Server 身份验证. 它们有什么区别: Windows 身份验证是指:你可以使用你电脑Windows系统的用户名和密码进行登入.如果你的电脑没有设置密码,那么就不需要输入用户名和密码,直接点击连接就可以登入. 我们一般使用第二种身份验证:

  • SQL Server 2008中的代码安全(二) DDL触发器与登录触发器

    本文主要 涉及DDL触发器和登录触发器的应用实例. MicrosoftSQL Server 提供两种主要机制来强制使用业务规则和数据完整性:约束和触发器.触发器为特殊类型的存储过程,可在执行语言事件时自动生效.SQL Server 包括三种常规类型的触发器:DML 触发器.DDL 触发器和登录触发器. 1.当数据库中发生数据操作语言 (DML) 事件时将调用 DML 触发器.DML 事件包括在指定表或视图中修改数据的 INSERT 语句.UPDATE 语句或 DELETE 语句.DML 触发器可

  • SQL Server 2008中的代码安全(八)透明加密(TDE)

    当一个用户数据库可用且已启用TDE时,在写入到磁盘时在页级实现加密.在数据页读入内存时解密.如果数据库文件或数据库备份被盗,没有用来加密的原始证书将无法访问.这几乎是SQL Server2008安全选项中最激动人心的功能了,有了它,我们至少可以将一些初级的恶意窥视拒之见外. 下面的两个例子将展示如何启用和维护透明数据加密. 示例一.启用透明加密(TDE) /********************TDE**************** 3w@live.cn ****************/ U

随机推荐