理解SQL查询语句的含义,更快的分析该语句
select from where
有时候理解这个语句时会很慢,尤其是多关系查询时。书本中提到一种理解思路,可以让人分析这句查询语句的速度更快
- 用 from where select 这个顺序去分析查询语句
- from子句,先取出这个表,若是多关系自然连接,取出几个表的笛卡尔积组成新的表
- where子句,根据条件筛选 2 中取出的表,再组成新的表
- 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 子句的条件怎么成立的。
之后我按照上述的思路,进行理解:
- 从from子句中看出,这是要比较同一个关系中的元组,当它们重命名为 T 和 S,即当作两个不同的关系组成笛卡尔积,组成新的表
表中属性有T.name, T.salary, T.dept_name, T.name, S.name, S.salary, S.dept_name, S.name - 此时就可以根据where子句的条件筛选1中的表,在形成新的表
- 再根据select子句取出需要的属性组成最终的表
GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。HAVING语句必须在ORDER BY子句之后。(where先执行,再groupby分组;groupby先分组,having再执行)