日期:2013-01-23 浏览次数:20410 次
在数据库开发方面,通过单表所表现的实现,有时候需求组合查询来找到我们需求的记录集,这时候我们就会用到连接查询。
连接查询次要包括以下几个方面:
内连接
内连接普通是我们最常使用的,也叫自然连接,是用比较运算符比较要联接列的值的联接。它是通过(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 邓小平理论 人民邮电出版社