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

本文介绍了一种有效的SQL查询语句理解方法,通过调整查询顺序,从FROM子句开始,逐步构建并筛选数据,最终实现高效的数据检索。以具体实例解析了如何通过优化查询流程,提高多关系查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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再执行)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值