1.等值连接查询与非等值连接查询 连接查询的where子句中用来连接两个表的条件称为连接条件或连接谓词,其一般格式为: 表名 列名 比较运算符 表名2 列名2 比较运算符主要有=、>=、<=、!=、>、< 等 当连接谓词为=时,称为等值连接。使用其他运算符为非等值连接。 连接谓词中的列名称为连接字段。连接条件中的各连接字段类型必须是可比的,但名字不必相同。 例子:查询所有同学的学号、姓名、选课数、总成绩 select student.sid,name,count(*),sum(score) from student,sc where student.sid=sc.sid group by sid; 嵌套循环连接算法的基本思想:首先在表Student 中找到第一个元组,然后从头开始扫描SC表,逐查找与Student第一个元组的Sno相等的SC元组,找到后就将Student 中的第个元组与该元组拼接起来, 形成结果表中一个元组。SC全部查找完后,再找Student中第二个元组,然后再从头开始扫描SC.连一查找满足连接条件的元组,找到后就将Studemt 中的第二个元组与该元组拼接起来,形成结果表中个元组,重复上述操作,直到Sudent 中的全部元组都处理完毕为止 关系数据库管理系统执行该连接操作时用到了嵌套循环连接算法的基本思想。例中,如果在SC表上建立了索引的话,就不用每次全表扫描SC表了,而是根据Sno值通过索引找到相应的SC元组。用索引查询SC中满足条件的元组一般会比全表扫描快。若在等值连接中把目标列重复的属性列去掉则为自然连接。一条SQL语句可以同时完成选择和连接查询,这是WHERE子句是由连接谓词和选择谓词组成的复合条件。2.自身连接定义 连接不仅可以在两个表之间进行,也可以是一个表与其自己进行连接,称为表的自身连接。 例子: 查询每一门课的间接先修课(即先修课的先修课) 分析:在Course表中只有每门课的直接先修课信息,要满足目的,需要将Course表与其自身连接。为此,要为Course表取两个别名,一个是FIRST,另一个是SECOND。 SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno=SECOND.Cno; 3.外连接 左外连接 表1 left outer join 表2 on 连接条件 右外连接 表1 right outer join 表2 on 连接条件 其中outer可以省略4.多表连接 连接操作出了可以是两表连接、自身连接外,还可以是两个以上的表进行连接,后者通常称为多表连接 关系数据库管理系统在执行多表连接时,通常先进行两个表的连接操作,再将其结果与第三个表进行连接。 嵌套查询 定义 在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句 或HAVING短语的条件中的查询称为嵌套查询。