SQlserver表连接
连接是两元运算,可以对两个或多个表进行查询,结果通常是含有参加连接运算的两个表或多个表的指定列的表。
在T-SQL中,连接查询有两类:
第一类:符合SQL标准的连接谓词表示形式;
第二类:T-SQL扩展的使用关键字JOIN的表示形式。
下面对这两种连接进行讲解,下面是本次实验要用到的表:
表一:学生表(学号,姓名,专业)

表二:课程表(课程号,课程名,学分)

表三:成绩表(学号,课程号,成绩)

一、第一类:符合SQL标准的连接谓词表示形式
1、可以在Select 语句的where子句中使用比较运算符给出连接条件对表进行连接。
如:将学生表和成绩表进行连接
(1)select * from XSB,CJB where XSB.StuNum=CJB.StuNum;

(2)select XSB.*,CJB.CourseNum,CJB.Chengji from XSB,CJB where XSB.StuNum=CJB.StuNum
第一个连接为等值连接:即选取属性列值相等的记录,另外:连接谓词中的比较符还可以是<、<=、=、>、>=、!=、<>(不等于)、!<、!>,当比较符为“=”时即为等值连接。
第二个连接为自然连接:即表一与表二做等值连接后,去掉重复属性列的结果。
二、第二类:T-SQL扩展的使用关键字JOIN的表示形式。
用join连接方式连接要比第一类谓词连接方式效率高。
用join关键字指定的连接有三种类型:内连接、外连接、交叉连接。
(1)内连接。Inner关键字指定连接类型,on关键字指定连接条件。内连接是系统默认的,故Inner可以省略。
例1:select * from XSB inner join CJB on XSB.StuNum=CJB.StuNum;

可以看出,所有选课的学生的信息被查询出来了,与上面等值连接结果一样。
例2:连接多个表,查询选课学生的学号、姓名、课程名、成绩
Select XSB.StuNum,Name,CourseName,Chengji
from XSB join CJB join KCB
on CJB.CourseNum = KCB.CourseNum
on XSB.StuNum=CJB.StuNum

(2)外连接。用关键字Outer指定其类型,外连接的结果不但包含满足连接条件的行,还包括相应表中的所有行。外连接有三种:
I、左外连接(left outer join),结果表中除了包括满足连接条件的行外,还包括左表中的所有行。常用。
II、右外连接(right outer join),结果表中除了包括满足连接条件的行外,还包括右表中的所有行。不常用。
III、完全外连接(full outer join),结果表中除了包括满足连接条件的行外,还包括两个表中的所有行。不常用。
I.1 左外连接例子,查询每个学生的选课数目,由于学号为“1104”的学生没有选课,故不能用内连接
Select * from XSB left outer join CJB on XSB.StuNum = CJB.StuNum

在上面等值连接的例子中,学号为“1104”的学生由于没有选课,结果集中也就没有他,在左连接中,左表的所有记录都会保留。
这种连接是有实际价值的,如要找出每个同学的选课门数,其中既包括选了课的同学,也包括没有选课的同学。其查询如下:
Select XSB.StuNum ,count(CJB.StuNum) as '选课门数'
from XSB left outer join CJB
on XSB.StuNum = CJB.StuNum
group by XSB.StuNum ,CJB.StuNum

注意到第四个同学的选课门数为零,在这里也显示了,而如果用内连接,第四个同学就会被忽略掉。
右外连接及完全外连接道理与此相同,在此不再详说。
(3)交叉连接。实际上是将两个表做笛卡尔积运算。
如:select * from XSB cross join CJB.
小弟第一次写博客,经验也不足,有什么错误请大家多多包涵!
SQlserver表连接的更多相关文章
- SQLServer 表连接种类
SQLServer 有3种物理连接:Nested Loop(嵌套循环).Merge Join(合并联接).Hash Join(哈希联接). T-SQL中的inner/left/right/full j ...
- SQLServer 表连接时使用top 1 去除重复数据
left join SM_SOLine soline on soline.SO=so.ID and soline.DocLineNo=(select MAX(DocLineNo) from SM_SO ...
- 【SqlServer系列】表连接
1 概述 1.1 已发布[SqlServer系列]文章 [SqlServer系列]MYSQL安装教程 [SqlServer系列]数据库三大范式 [SqlServer系列]表单查询 1.2 本篇 ...
- SqlServer 多表连接、聚合函数、模糊查询、分组查询应用总结(回归基础)
--exists 结合 if else 以及 where 条件来使用判断是否有数据满足条件 select * from Class where Name like '%[1-3]班' if (not ...
- 010.简单查询、分组统计查询、多表连接查询(sql实例)
-------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SEL ...
- SQL多表连接查询(详细实例)
转载博客:joeleo博客(http://www.xker.com/page/e2012/0708/117368.html) 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:stud ...
- 关于Oracle表连接
表连接注意left join on与where的区别: select * from dept; select * from emp; select * from emp a right outer j ...
- SQL多表连接查询
SQL多表连接查询 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student 截图如下: 表2:course 截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际 ...
- oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图
多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所 ...
随机推荐
- Linux(Centos)之安装tomcat并且部署Java Web项目(转)
1.准备工作 a.下载tomcat linux的包,地址:http://tomcat.apache.org/download-80.cgi,我们下载的版本是8.0,下载方式如图: b ...
- C程序设计语言练习题1-14
练习1-14 编写一个程序,打印输入中各个字符出现频度的直方图. 代码如下: #include <stdio.h> // 包含标准库的信息. int main() // 定义名为main的 ...
- 复杂事件处理引擎—Esper入门(第二弹)
说明: 以下内容,可以参考Esper官方网站<Qucik start & Tutorial >(顺序做了部分调整). PS:因为英语水平有限(大学期间刚过CET4的英语小盲童一枚) ...
- CCAN:C语言的模块仓库
实践中一门编程语言是否有用.好不好,不仅体现在语言本身,更在语言的生态系统:用的人多不多.社区是否活跃互帮互助.语言的相关库和框架质量如何,还有就是已有的模块的质量与数量. CPAN(Comprehe ...
- reaver 使用方法和技巧
reaver非常的不错,为我们ceng网带了最大的方便,使用简单,我来讲一下自己使用心得吧! 第一步,如果用虚拟机用vmware的,总会出现鼠标不灵点不到地方,换了一个 6.0.2 build-598 ...
- Top 100 English Verbs
accept allow ask believe borrow break bring buy can/be able cancel change clean comb complain cough ...
- 读取和导出下载 excel 2003,2007 资料
protected void Page_Load(object sender, EventArgs e) { //直接在bin add referece search Microsoft.Office ...
- 认识Android
安卓的特点开放性平等性无界性方便性硬件的丰富性 Android操作系统之中,一共将体系结构划分为四层:应用层(Application).应用框架层(Application Framework).系统运 ...
- 包含无数好东西的ownCloud
ownCloud 是一个来自 KDE 社区开发的免费软件,提供私人的 Web 服务.当前主要功能包括文件管理(内建文件分享).音乐.日历.联系人等等,可在PC和服务器上运行. 简单来说就是一个基于Ph ...
- 小公司生存,一般活过第一年,就能撑3年(读书笔记:成败关键,关键是你是否拥有现金流客户)good
小公司生存,一般活过第一年,就能撑3年,一般能撑过3年,到第7年遇到坎,如果第7年突破,能活过10年,是想死也不容易,等到第二个七年,可以搞搞人事地震了,因为要二次创业. -------------- ...