理解SQL查询语句的含义,更快的分析该语句

select from where

有时候理解这个语句时会很慢,尤其是多关系查询时。书本中提到一种理解思路,可以让人分析这句查询语句的速度更快

  1. from where select 这个顺序去分析查询语句
  2. from子句,先取出这个表,若是多关系自然连接,取出几个表的笛卡尔积组成新的表
  3. where子句,根据条件筛选 2 中取出的表,再组成新的表
  4. select子句,在 3 中取出的表,再取出需要的属性再组成最终的表

例子

找出满足下面条件的所有教师的名字,他们的工资至少比Biology系某一个教师的工资要高

select distinct T.name
from instructor as T, instructor as S
where T.salary > S.salary and S.dept_name = 'Biology';

当时我理解这个查询语句时,没有按照上述的理解思路,思路就很混乱,总是理解不通 where 子句的条件怎么成立的。
之后我按照上述的思路,进行理解:

  1. 从from子句中看出,这是要比较同一个关系中的元组,当它们重命名为 TS,即当作两个不同的关系组成笛卡尔积,组成新的表
    表中属性有T.name, T.salary, T.dept_name, T.name, S.name, S.salary, S.dept_name, S.name
  2. 此时就可以根据where子句的条件筛选1中的表,在形成新的表
  3. 再根据select子句取出需要的属性组成最终的表

GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。HAVING语句必须在ORDER BY子句之后。(where先执行,再groupby分组;groupby先分组,having再执行)

posted @ 2020-04-01 11:14  肥斯大只仔  阅读(539)  评论(0编辑  收藏  举报