| 订阅 | 在线投稿
分享
 
 
当前位置: 王朝网络 >> mssql >> SQL Server数据库连接查询的种类及其应用
 

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

2008-07-10 05:54:08 编辑來源:互联网 繁體版 评论
 
 
  在数据库开发方面,通过单表所表现的实现,有时候需要组合查询来找到我们需要的记录集,这时候我们就会用到连接查询。

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

  内连接

  内连接一般是我们最常使用的,也叫自然连接,是用比较运算符比较要联接列的值的联接。它是通过(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
 
 
 
 
上一篇《两种与SQL Server数据库交换数据的方法》
下一篇《SQL server 2008邮件故障排除:发送测试电子邮件》
 
 
 
 
 
 
 
 
 
日版宠物情人插曲《Winding Road》歌词

日版宠物情人2017的插曲,很带节奏感,日语的,女生唱的。 最后听见是在第8集的时候女主手割伤了,然后男主用嘴帮她吸了一下,插曲就出来了。 歌手:Def...

兄弟共妻,我成了他们夜里的美食

老钟家的两个儿子很特别,就是跟其他的人不太一样,魔一般的执着。兄弟俩都到了要结婚的年龄了,不管自家老爹怎么磨破嘴皮子,兄弟俩说不娶就不娶,老父母为兄弟两操碎了心...

如何磨出破洞牛仔裤?牛仔裤怎么剪破洞?

把牛仔裤磨出有线的破洞 1、具体工具就是磨脚石,下面垫一个硬物,然后用磨脚石一直磨一直磨,到把那块磨薄了,用手撕开就好了。出来的洞啊很自然的。需要猫须的话调几...

我就是扫描下图得到了敬业福和爱国福

先来看下敬业福和爱国福 今年春节,支付宝再次推出了“五福红包”活动,表示要“把欠大家的敬业福都还给大家”。 今天该活动正式启动,和去年一样,需要收集“五福”...

冰箱异味产生的原因和臭味去除的方法

有时候我们打开冰箱就会闻到一股异味,冰箱里的这种异味是因为一些物质发出的气味的混合体,闻起来让人恶心。 产生这些异味的主要原因有以下几点。 1、很多人有这种习...

 
 
 
在数据库开发方面,通过单表所表现的实现,有时候需要组合查询来找到我们需要的记录集,这时候我们就会用到连接查询。 连接查询主要包括以下几个方面: 内连接 内连接一般是我们最常使用的,也叫自然连接,是用比较运算符比较要联接列的值的联接。它是通过(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
󰈣󰈤
 
 
 
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
越来越漂亮的楚楚(7)
越来越漂亮的楚楚(6)
越来越漂亮的楚楚(5)
越来越漂亮的楚楚(4)
共长一色
水中莲
峰林晚照
远离喧嚣——山村小景
 
>>返回首页<<
 为你推荐
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 热帖排行
 
 
 
 
©2005- 王朝网络 版权所有