连接是两元运算,可以对两个或多个表进行查询,结果通常是含有参加连接运算的两个表或多个表的指定列的表。

在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表连接的更多相关文章

  1. SQLServer 表连接种类

    SQLServer 有3种物理连接:Nested Loop(嵌套循环).Merge Join(合并联接).Hash Join(哈希联接). T-SQL中的inner/left/right/full j ...

  2. SQLServer 表连接时使用top 1 去除重复数据

    left join SM_SOLine soline on soline.SO=so.ID and soline.DocLineNo=(select MAX(DocLineNo) from SM_SO ...

  3. 【SqlServer系列】表连接

    1   概述 1.1  已发布[SqlServer系列]文章 [SqlServer系列]MYSQL安装教程 [SqlServer系列]数据库三大范式 [SqlServer系列]表单查询 1.2  本篇 ...

  4. SqlServer 多表连接、聚合函数、模糊查询、分组查询应用总结(回归基础)

    --exists 结合 if else 以及 where 条件来使用判断是否有数据满足条件 select * from Class where Name like '%[1-3]班' if (not ...

  5. 010.简单查询、分组统计查询、多表连接查询(sql实例)

    -------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SEL ...

  6. SQL多表连接查询(详细实例)

    转载博客:joeleo博客(http://www.xker.com/page/e2012/0708/117368.html) 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:stud ...

  7. 关于Oracle表连接

    表连接注意left join on与where的区别: select * from dept; select * from emp; select * from emp a right outer j ...

  8. SQL多表连接查询

    SQL多表连接查询 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际 ...

  9. oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图

        多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所 ...

随机推荐

  1. 你好,C++(22) 排排坐,吃果果——4.3.3 for循环:某个范围内…每个都…

    4.3.3  for循环:某个范围内…每个都… 既然while语句和do…while…语句都已经可以满足我们表达循环现象的需要,那为什么C++还要专门提供for语句来表达循环现象呢?在现实世界中,常常 ...

  2. Oracle数据库之PL/SQL异常处理

    Oracle数据库之PL/SQL异常处理 异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的. PL/SQL程序设计过程中,即使是写得最好的程序也可能会遇到错误或未预料 ...

  3. python实现中文图片文字识别--OCR about chinese text--tesseract

    0.我的环境: win7 32bits python 3.5 pycharm 5.0 1.相关库 安装pillow: pip install pillow 安装tesseract: tesseract ...

  4. Python入门100例题

    原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/11/05/2755107.html 无论学习哪门计算机语言,只要把100例中绝大部分题目都做一遍, ...

  5. install pip3 for python 3.x

    前言: 我目前使用的服务器为centos6.x 系统自带的python的版本为2.6.x,但是目前无论是学习还是使用python,python3都是首选,那么问题来了.---如何安装python3环境 ...

  6. linux2.6.32 内核源码树解析与整理

    一 系统最核心组件目录: 1 arch目录该目录中的每个子目录中都与某种体系结构相对应,用于存放体系结构相关代码,向平台无关的系统核心模块提供所需的功能接口.每个体系结构对应的子目录下通常至少包含以下 ...

  7. python简介与基本操作

    一.python的历史 python的创始人Guido van Rossum,现就职于Dropbox公司. 1989年12月份诞生了python1.0 2000年10月16日发布了python2.0 ...

  8. JSP与Servlet之间传值

    Jsp与Servlet之间的传值有两种,一种是Jsp传值给Sevlet,另一种是Servlet传值给Jsp:使用request.response对象完成传值,具体实现如下: 1.JSP传值给Servl ...

  9. Windows下安装Emacs+Sbcl+Slime

    前言 其实网上已经有很多类似的文章了,我也是按照上面的来做.在做的过程中会遇到几个很坑的地方,我自己也是折腾了好久才弄好.所以现在写出来希望能对大家有所帮助. 正文 下载和安装Emacs http:/ ...

  10. new Date参数问题

    new Date支持的参数: MDN:   new Date();   new Date(value);   new Date(dateString);   new Date(year, month, ...