数据库学习笔记之SQL查询的基本语法结构

时间:2022-01-29 00:47:48

基本语法

对于一个:select * from R where P 的查询,SQL先构造from子句中关系的笛卡尔积,根据where子句中的谓词P进行关系代数的选择运算,然后将结果投影到select子句中属性上。实践中,SQL也许会将该表达式转化成等价但执行效率更高的形式

语法 解释
select 对应关系代数中的投影运算,用来列出查询结果中所要的属性。默认是不去除重复的,因为操作费时。可在select后加distinct去除重复。”*”代表所有属性。可带-,+,×,/算术表达式。
where 对应关系代数中的选择谓词。可使用 and,or,not逻辑连接词。提供between比较运算符
from 对应关系代数中的笛卡尔乘积,列出表达式求值中需扫描的关系
as 对应关系代数中的更名运算,用于select和from中。
order by 让查询结果按排列顺序显示。默认asc(升序),desc(降序)。开销较大

集合运算

集合运算要求参加运算的关系必须相容,即必须含有相同的属性集

语法 解释
union 并运算。自动去除重复。可加all不去除重复
intersect 交运算。自动去除重复。可加all不去除重复
except 差运算。自动去除重复。可加all不去除重复

聚集函数

聚集函数是以值的一个集合为输入,返回单个值的函数。

  • 平均值:avg
  • 最小值:min
  • 最大值:max
  • 总和:sum
  • 计数:count

空值(null)处理:除了count(*)之外的所有聚集函数都忽略输入集合中的空值。

语法 解释
group by 分组查询,一般配合聚集函数使用。
having 对分组限定条件,可使用聚集函数。

嵌套子查询

SQL允许一个查询语句嵌套在另一个查询语句中。
一般子查询的使用是为了对集合的成员资格,集合的比较以及集合的基数进行检查。
例:select a from A where exists(select * from B where A.a=B.b)

语法 解释
in 检查集合成员资格。对子查询的结果集逐个进行成员资格检查,是则返回true
exists 测试是否为空关系。测试一个子查询的结果中是否有元组
unique 测试是否存在结果集重复元组。