关联查询是两个(两个以上)的关系进行连接查询。很多人感觉单个关系查询很简单,但关联查询很复杂,实际上关联查询处理过程分两步,首先是将多个关系通过等值连接转换为单个关系,然后再对新生成的单个关系进行查询。

关系操作结果还是关系

需要理解关系的操作的结果还是关系,即通过连接、选择、投影、除、交、叉、并等操作得到是一个新的关系。

查询语句的执行过程

sql server join关联查询性能 sql关联查询语句_数据库


每一步都是对新关系的选择、投影等操作

1.通过等值连接(左连接或右连接)形成一个新的关系A;

2.执行where子句的选择条件,做行操作,得到新关系B;

3. 执行分组语句,进行聚集运算,得到新关系C;

4. 通过having对得到的元祖再次进行行操作,得到新关系D;

5. 对关系D做投影操作,选择目标列;

6. 根据order by完成排序输出;

注:from(join)后为准确的说是关系,而不是表或视图

select s.Sno,s.Sname,a.Cname 
 from S  left join (select Sno,Cname from SC,C where c.Cno=SC.Cno ) a 
 on (s.Sno = a.Sno)

即:left join后 (select Sno,Cname from SC,C where c.Cno=SC.Cno )是一个新的关系

关系的连接(等值)

关联查询的核心是通过关系的连接将多个关系转换为一个关系,再复杂的连接都转换为经过多次的简单两个关系连接得到

1. 连接

  1. 在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组
  2. 表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组
  3. 重复上述操作,直到表1中的全部元组都处理完毕
    例:两个关系S和SC做等值连接

    得到新关系

    左外连接(右外连接)
    做等值连接时,如果没有匹配的记录,则将左(右)边元祖取出,右(左)边关系的值置空;
    如: FROM student LEFT JOIN sc ON A.SNO = B.SNO ,得到新关系
  4. 选择
    对连接后形成的新关系B做选择操作得到新的关系C,如:没有分组查询或排序,执行投影操作。
  5. 分组查询
    如果有分组查询,则在新关系C的基础上做分组查询得到新的关系D,如果显示所有对分组的结果,如果还需要对分组的结果进行选择,则使用having+选择条件生成新关系E;若没有排序,在关系D或E上做投影操作。
  6. 排序
    对最后形成的新关系进行排序
    5.投影
    输出查询结果