一、Sql查询基本结构
SELECT <目标列名序列> FROM <数据源>
[WHERE <检索条件表达式>] [GROUP BY <分组依据列>] [HAVING <组提取条件>] [ORDER BY <排序依据列>]
其中[]代表可选项 、<>代表必须项
注意点
1.SELECT 子句中的<目标列名序列>可以是表中存在的列属性、表达式、常量或者函数
2.指定列别名:列名|表达式 [AS] 列别名
二、筛选查询
1.消除取值相同的行(重复行):DISTINCT关键字
2.查询满足条件的元组
查询条件 | 谓词 | 注意点 |
比较 | <,=,>,>=,<=,!=(或者<>) | 取反操作NOT x>=10比x<10效率要低 |
确定范围 | BETWEEN AND,NOT BETWEEN AND | 包括边界值 |
确定集合 | IN,NOT IN | |
字符匹配 | LIKE,NOT LIKE | 1.通配符含义 _:匹配任意一个字符 %:匹配0个或者多个字符 []:匹配括号中的任意一个字符 [^]:不匹配括号中的任意一个字符 2.如果列定义的数据类型为普通字符串类型,例如char[10],则系统会为该字符分配固定10个字节的空间,不够用空格填空,所以要精确匹配,可以用去尾随空格的函数(RTRIM) |
空值 | IS NULL,IS NOT NULL | |
多重条件 | AND,OR |
3.对结果进行排序:ASC升序、DESC降序,多字段依次排序
三、聚合函数
COUNT(*):统计表中元组的个数
COUNT([DISTINCT] <列名>):统计本列非空列值个数
SUM(<列名>):对数值型列进行求和
AVG(<列名>):对数值型列求平均值
MAX(<列名>)、MIN(<列名>):求最大最小值
注意点:
1.除COUNT(*)之外,其他函数计算过程中均忽略NULL值(去掉空值之后再进行计算)
2.聚合函数的使用范围可以是WHERE子句条件的记录,也可以对满足条件的组进行计算
3.聚合函数不能出现在WHERE语句中
四、对查询结果进行分组统计
注意点
1.如果使用了GROUP BY子句,那么查询列表中的每个列必须要么是分组依据列(GROUP BY后面的列),要么是聚合函数
2.GROUP BY子句中的分组依据列必须是表中存在的列名,不能是别名
3.使用带WHERE条件的GROUP BY语句,先筛选出满足WHERE条件的记录,再执行分组
4.在HAVING子句中可以使用聚合函数,但是不可以在WHERE子句中
5.建议所有在分组之前进行的搜索条件放在WHERE子句中而不是HAVING子句中,因为WHERE子句在GROUPBY之前执行,因此参与分组的数据比较少