网络编程
位置:首页>> 网络编程>> 数据库>> SQL Server数据库连接查询的种类及其应用

SQL Server数据库连接查询的种类及其应用

作者:Maxwell  发布时间:2009-01-06 11:28:00 

标签:

在数据库开发方面,通过单表所表现的实现,有时候需要组合查询来找到我们需要的记录集,这时候我们就会用到连接查询。

连接查询主要包括以下几个方面:

内连接

内连接一般是我们最常使用的,也叫自然连接,是用比较运算符比较要联接列的值的联接。它是通过(INNER JOIN或者JOIN)关键字把多表进行连接。我们通过建立两个表来说明问题:

StudentID StudentName StudentAge

----------- -------------------------------------------------- -----------

1 张三 25

2 李四 26

3 王五 27

4 赵六 28

5 无名氏 27

 

以上是表Student,存放学生基本信息。

BorrowBookID BorrowBookName StudentID BorrowBookPublish

----------------------------------------------------------------------------------------------------------------------

1 马克思主义政治经济学 1 电子工业出版社

2 * 思想概论 2 高等教育出版社

3 * 理论 3 人民邮电出版社

4 大学生思想道德修养 4 中国铁道出版社

5 C语言程序设计 NULL 高等教育出版社

以上是表BorrowBook,存放学生所借的书。

以上两张表是通过StudentID进行关联,在这里先执行内联连语句:

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student

Inner Join BorrowBook

On Student.StudentID = BorrowBook.StudentID

上面这个语句也可以写成

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

FROM Student,BorrowBook

WHERE Student.StudentID = BorrowBook.StudentID

其中,Inner Join是SQL Server的缺省连接,可简写为Join。在Join后面指定具体的表作连接。On后面指定了连接的条件。

运行的结果如下:

tudentName StudentAge BorrowBookName BorrowBookPublish

--------------------------------------------------------------------------------

张三 25 马克思主义政治经济学 电子工业出版社

李四 26 * 思想概论 高等教育出版社

王五 27 * 理论 人民邮电出版社

赵六 28 大学生思想道德修养 中国铁道出版社

(所影响的行数为 4 行)

根据查询的结果来进行分析:

如果多个表要做连接,那么这些表之间必然存在着主键和外键的关系。所以需要将这些键的关系列出,就可以得出表连接的结果。在上例中,StudentID是Student表的主键,StudentID又是BorrowBook表的外键,这两个表的连接条件就是Student.StudentID = BorrowBook.StudentID,对比查询结果可以得知,内连接查询只查询出主键StudentID在另张表中存在的记录,像Student表中的第五条记录,因为在BorrowBook表中StudentID不存在,像BorrowBook表中的第五条记录StudentID为Null,对应的Student表中没有记录,所以就不会显示。所以内连接就是将参与的数据表中的每列与其它数据表的列相匹配,形成临时数据表,并将满足数据项相等的记录从临时数据表中选择出来。

内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:

1) 等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

2) 不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括> 、> =、 <=、 <、!> 、! <和 <> 。

3) 自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

例如对于用不等值连接语句:

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student

Inner Join BorrowBook

On Student.StudentID <> BorrowBook.StudentID

StudentName StudentAge BorrowBookName BorrowBookPublish

----------------------------------------------------------------------------------

李四 26 马克思主义政治经济学 电子工业出版社

王五 27 马克思主义政治经济学 电子工业出版社

赵六 28 马克思主义政治经济学 电子工业出版社

无名氏 27 马克思主义政治经济学 电子工业出版社

张三 25 * 思想概论 高等教育出版社

王五 27 * 思想概论 高等教育出版社

赵六 28 * 思想概论 高等教育出版社

无名氏 27 * 思想概论 高等教育出版社

张三 25 * 理论 人民邮电出版社

李四 26 * 理论 人民邮电出版社

赵六 28 * 理论 人民邮电出版社

无名氏 27 * 理论 人民邮电出版社

张三 25 大学生思想道德修养 中国铁道出版社

李四 26 大学生思想道德修养 中国铁道出版社

王五 27 大学生思想道德修养 中国铁道出版社

无名氏 27 大学生思想道德修养 中国铁道出版社

它就会把两表所对应不相等的记录给查询出来了。

外连接

外连接主要包括左连接、右连接和完整外部连接。

1)左连接:Left Join 或 Left Outer Join

左连接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(Null)。

我们看对应的SQL语句:

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student

Left JOIN BorrowBook

On Student.StudentID = BorrowBook.StudentID

运行的结果如下:

StudentName StudentAge BorrowBookName BorrowBookPublish

---------------------------------------------------------------------------------

张三 25 马克思主义政治经济学 电子工业出版社

李四 26 * 思想概论 高等教育出版社

王五 27 * 理论 人民邮电出版社

赵六 28 大学生思想道德修养 中国铁道出版社

无名氏 27 NULL NULL

(所影响的行数为 5 行)

可以看到的是,它查询的结果是以左表Student为主,Student对应的StudentID在右表BorrowBook如果不存在的话,就会用NULL值来代替。

2) 右连接:Right Join 或 Right Outer Join

右连接和左连接相反,它将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值(Null)。

我们看对应的SQL语句

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student

Right JOIN BorrowBook

On Student.StudentID = BorrowBook.StudentID

运行的结果如下:

StudentName StudentAge BorrowBookName BorrowBookPublish

----------------------------------------------------------------------------------------------------------------------

张三 25 马克思主义政治经济学 电子工业出版社

李四 26 * 思想概论 高等教育出版社

王五 27 * 理论 人民邮电出版社

赵六 28 大学生思想道德修养 中国铁道出版社

NULL NULL C语言程序设计 高等教育出版社

(所影响的行数为 5 行)

可以看到的是,它查询的结果是以右表BorrowBook为主,BorrowBook对应的StudentID在左表Student如果不存在的话,就会用NULL值来代替。

3) 完整外部联接:Full Join 或 Full Outer Join

完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

我们看对应的SQL语句

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student

FULL OUTER JOIN BorrowBook

On Student.StudentID = BorrowBook.StudentID

结果如下:

StudentName StudentAge BorrowBookName BorrowBookPublish ----------------------------------------------------------------------------------------------------------------------

NULL NULL C语言程序设计 高等教育出版社

张三 25 马克思主义政治经济学 电子工业出版社

李四 26 * 思想概论 高等教育出版社

王五 27 * 理论 人民邮电出版社

赵六 28 大学生思想道德修养 中国铁道出版社

无名氏 27 NULL NULL

(所影响的行数为 6 行)

可以看到的是,它查询的结果除了把相对应完全匹配的记录查出来以后,还会把左连接及右连接两种情形都包括,对应的值用NULL值来代替。

交叉连接

交叉连接(CROSS JOIN),就是指不带W H E R E子句的查询。在数学上,就是表的笛卡尔积。也就是它查询出来的记录数行为两个表的乘积,对应记录也就是为表A*表B。

我们看对应的SQL语句

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student Cross Join BorrowBook

运行的结果如下:

StudentName StudentAge BorrowBookName BorrowBookPublish

---------------------------------------------------------------------------------

张三 25 马克思主义政治经济学 电子工业出版社

李四 26 马克思主义政治经济学 电子工业出版社

王五 27 马克思主义政治经济学 电子工业出版社

赵六 28 马克思主义政治经济学 电子工业出版社

无名氏 27 马克思主义政治经济学 电子工业出版社

张三 25 * 思想概论 高等教育出版社

李四 26 * 思想概论 高等教育出版社

王五 27 * 思想概论 高等教育出版社

赵六 28 * 思想概论 高等教育出版社

无名氏 27 * 思想概论 高等教育出版社

张三 25 * 理论 人民邮电出版社

李四 26 * 理论 人民邮电出版社

王五 27 * 理论 人民邮电出版社

赵六 28 * 理论 人民邮电出版社

无名氏 27 * 理论 人民邮电出版社

张三 25 大学生思想道德修养 中国铁道出版社

李四 26 大学生思想道德修养 中国铁道出版社

王五 27 大学生思想道德修养 中国铁道出版社

赵六 28 大学生思想道德修养 中国铁道出版社

无名氏 27 大学生思想道德修养 中国铁道出版社

张三 25 C语言程序设计 高等教育出版社

李四 26 C语言程序设计 高等教育出版社

王五 27 C语言程序设计 高等教育出版社

赵六 28 C语言程序设计 高等教育出版社

无名氏 27 C语言程序设计 高等教育出版社

(所影响的行数为 25 行)

可以看到的是,它把表Student中的每一行和BorrowBook中的每一条记录都进行关联,返回的记录数为5*5=25行,即笛卡尔积,它执行的语句也就等效于

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student,BorrowBook

0
投稿

猜你喜欢

  • 这篇论坛文章详细介绍了完全卸载MySQL数据库5.0的具体方法,更多内容请参考下文:数据库突然出了问题,没办法只能重装,因为事先并不知道My
  • 这种情况在Access下可以通过,但SQL则不行,在百度搜索解决方法,发现N多人出现同样问题却找不到解决办法: 代码如下:set 
  • FrontPage 2003在功能上增强了不少,下面我们一起来看看新版本中比较突出的9个新功能。1.自定义浏览器分辨率预览检查 在
  • 我需要查询从现在算起五天前的日期。按照商业习惯,这五天应该不包含星期六和星期天。专家回答:对于许多跟商业日期有关的情况,最好的解决方案是使用
  • 1069错误(由于登录失败而无法启动服务)解决方法在本版面出现这个问题的频率也算是很高的了,新手通常会比较多遇到这个问题原因很简单,安装SQ
  • 表单的验证是开发WEB应用程序中常遇到的一关。有时候我们必须保证表单的某些项必须填写、必须为数字、必须是指定的位数等等,这时候就要用到表单验
  • JScript 具有全范围的运算符,包括算术、逻辑、位、赋值以及其他某些运算符。算术运算符描述 符号 负值 - 递增 ++ 递减 ? 乘法
  • 最近使用工作需要,使用了Navicat8.2版本,发现备份数据都是默认存储在C盘,这个就比较郁闷了。重做系统忘记转移了。那不就死定了?找了一
  • 内容摘要:本文是一篇实例讲解的文章。作为一个普通的程序员,我深知,一个优秀的例程,对于正在学习编程的人是多么的有帮助。本文中使用的例程,是一
  • 在蓝色看到的几个js日历代码,整理了一下。大家可以用在blog上,或者可以用在表单的日期类型的数据选择中,方便大家填写日期。1.动感的日历,
  • 1.建立设计规范的意义        建立设计文档的根本目的
  • 昨天还和裕波沟通我没有准备ppt,想以另一种互动的方式来交流。后来想想,每个人都准备了,我不准备也不太好意思,呵呵。今天在webrebuil
  • 对于小数据量,xml文件在检索更新上于ACCESS有很多优势。我曾经测试过不用数据库,把网站的会员信息,商品数据信息,交易信息,网站定制信息
  • 我们将在下面的例子中使用这个 XML 文档。<?xml version="1.0" encod
  • 近日因为升级系统的需要,将旧mysql数据库从3.23升级到5.0.41先从mysql3.23中mysqldump出数据文件data.sql
  • MySQL 5.0.16的乱码问题可以用下面的方法解决:1.设置phpMyAdminLanguage:Chinese simplified
  • 桥接模式Bridge Pattern是什么桥接模式是一种结构型模式,它将抽象部分与实现部分分离开来,使它们可以独立地变化。在桥接模式中,我们
  • 问题:希望仅仅允许某个指定IP的计算机连接到SQL Server服务器,但不允许其他的客户端进行连接。解决方法如下:你可以直接在防火墙中做限
  • 引子编程世界里只存在两种基本元素,一个是数据,一个是代码。编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力。数据天生就是文静的
  • 1:除非你现在已经过了不惑之年了,否则你就一定要保持年轻人特有的激情!这里的激情,包含了那种说不明白的近似于冲动的东西,或者idea。也包含
手机版 网络编程 asp之家 www.aspxhome.com