基本语法
对于一个: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 | 测试是否存在结果集重复元组。 |