摘要:连接查询是通过连接运算符实现多表查询的一种数据检索方式,连接查询是关系数据库的主要特点。在关系数据库管理系统中,常把一个实体的所有信息存放在一个数据表中,当检索数据信息时,通过连接查询取出存放在多个表中的不同实体信息,这样的应用方式给用户带来了很大的灵活性。
关键词:连接查询数据库
中图分类号:G434 文献标识码: A文章编号:1672-1578(2009)11-0095-01
在SQL SERVER数据库中,连接类型可以分为三种:交叉连接、内连接、外连接和自连接。
1 交叉连接
交叉连接又称非限制连接,它将两个表不加任何约束地组合在一起,也就是将第一个表的所有记录分别与第二个表的每条记录组成新记录,连接结果返回第一个数据表中符合查询条件的数据行乘以第二个数据表中符合查询条件的数据行数。交叉连接有两种语法格式:
格式1:select 列名列表 from 表名1 cross join 表名2;
格式2:select 列名列表 from 表名1,表名2。
例如:t1表中有四条记录,t2表中有三条记录,交叉连接的结果中有12条记录,进行交叉连接的语法为:
Select * from t1 cross join t2,或select * from t1,t2。
在实际应用中使用交叉连接产生的结果集一般没有什么意义,但在数据库的数据模式上有重要作用。
2 内连接
内连接也称自然连接,使用比较运算符进行表间列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。内连接就是将交叉连接产生的结果集经过连接条件过滤后得到的,它是将两个表中满足条件的记录组合在一起,通常采用“on 主键=外键”的形式,通常有两种语法格式:
格式1:select 列名列表 from 表名1[inner]join 表名2 on 表名1.列名=表名2.列名。
格式2:select 列名列表 from 表名1,表名2where 表名1.列名=表名2.列名。
内连接根据所使用的比较方式的不同,又分为等值连接、不等值连接和自然连接
2.1等值连接
等值连接是指在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
例如:查询teacher数据库的class_info表中所有课程的选课信息,Select * from class_info as a inner join student_choose as b on a.课程编号=b.课程编号。
2.2不等值连接
不等值连接是指在连接条件使用除等于运算符外的其他比较运算符比较被连接列的列值。这些运算符包括>、>=、<=、<、
!>、!<和<>。
例如:查询teacher数据库的class_info表中所有课程的选课信息,Select * from class_info as a inner join student_choose as b on a.课程编号<>b.课程编号。
2.3自然连接
自然连接只有在两个表有相同名称的列且列的含义相似时才能使用,将在同名列上进行相等连接。自然连接是指在连接条件中使用(=)运算符比较被连接的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中重复的列。
例如:查询学生信息和成绩信息,要求连接的列只显示一次,Select student_info.*,student_grade.* from stusent_info as a inner join student_grade as b on a.学号=b.学号。
3 外连接
外连接分左外连接、右外连接和全外连接三种。外连接除生成内连接生成的结果集外,还可以使一个表(左外连接、右外连接)或两个(全外连接)中不满连接条件的记录也出现在结果集中。
3.1左外连接
左外连接就是将左表的所有记录分别与右表的每条记录进行连接组合,结果集中除返回内部连接的记录外,还在查询结果中显示出左表中不符合条件的记录并在右表的相应列中添上NULL值,语法格式为:
Select 列名列表 from 表名1 left [outer] join 表名2 on 表名1.列名=表名2.列名。
例如:查询Teacher数据库中的student_info表中所有没有成绩的学生信息,Select * from stuent_info as a left join student_grade as b on a.学号=b.学号。
3.2右外连接
右外连接就是将左表的所有记录分别与右表的每一条记录进行连接组合,结果集中除返回内部连接的记录外,还在查询结果集中显示出右表中不符合条件的记录并在左表的相应列中添上NULL值。其语法格式为:
Select 列名列表 from 表名1 right [outer] join 表名2 on 表名1.列名=表名2.列名。
例如:查询teacher数据库中student_info表中所有有成绩的学生信息,Select * from student_info as a right join student_grade as b on a.学号=b.学号。
3.3全外连接
全外连接就是将左边数据表的所有数据分别与右边数据表的每条数据进行连接组合,返回的结果除内连接的数据外,还有两个表中不符合条件的数据,并在左表或右表的相应列中填上NULL值,其语法格式为:
Select 列名列表 from 表名1 full [outer] join 表名2 on 表名1.列名=表名2.列名。
例如:查询Teacher数据库中的student_info表中所有有成绩和没有成绩的学生信息,Select * from student_info as a full join student_grade as b on a.学号=b.学号。
4 自连接查询
自连接就是一张表的两个副本之间的内连接,使用它可以将同一个表的不同行连接起来。使用自连接时,必须为表指定两个不同的别名,使之在逻辑上成为两个表。
例如:查询学生档案中毕业院校相同的学生信息,Select a.* from student_info as a,student_info as b where a.毕业院校=b.毕业院校 and a.学号<>b.学号。
参考文献:
[1]耿文兰,王庆建等编著.SQL Server 2000数据库管理与开发[M].电子工业出版社.
[2]刘桂林,谢尧等编著.SQL Server 数据库应用技术[M].
作者简介:邢文端(1975-),女,本科学历,计算机及其应用专业,职称:讲师。