Task02:SQL基础查询与排序
一、SELECT语句基础
1.1 从表中选取数据
SELECT语句
1.2从表中选取符合条件的数据
WHERE语句
1.3 相关法则
星号(*)代表全部列的意思。SQL中可以随意使用换行符,不影响语句执行(但不可插入空行)。设定汉语别名时需要使用双引号(")括起来。在SELECT语句中使用DISTINCT可以删除重复行。注释是SQL语句中用来标识说明或者注意事项的部分。分为1行注释"-- "和多行注释两种"/* */"。
二、算术运算符和比较运算符
2.1 算术运算符
2.2 比较运算符
2.3 常用法则
SELECT子句中可以使用常数或者表达式。使用比较运算符时一定要注意不等号和等号的位置。字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆。希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符。希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL运算符。
三、逻辑运算符
3.1 NOT运算符
3.2 AND运算符和OR运算符
3.3 通过括号优先处理
3.4 真值表
3.5 含有NULL时的真值
NULL的真值结果既不为真,也不为假,因为并不知道这样一个值。
那该如何表示呢?
这时真值是除真假之外的第三种值——不确定(UNKNOWN)。一般的逻辑运算并不存在这第三种值。SQL 之外的语言也基本上只使用真和假这两种真值。与通常的逻辑运算被称为二值逻辑相对,只有 SQL 中的逻辑运算被称为三值逻辑。
三值逻辑下的AND和OR真值表为:
四、对表进行聚合查询
4.1 聚合函数
SQL中用于汇总的函数叫做聚合函数。以下五个是最常用的聚合函数:
COUNT:计算表中的记录数(行数)SUM:计算表中数值列中数据的合计值AVG:计算表中数值列中数据的平均值MAX:求出表中任意列中数据的最大值MIN:求出表中任意列中数据的最小值
4.2 使用聚合函数删除重复值
4.3 常用法则
COUNT函数的结果根据参数的不同而不同。COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数。聚合函数会将NULL排除在外。但COUNT(*)例外,并不会排除NULL。MAX/MIN函数几乎适用于所有数据类型的列。SUM/AVG函数只适用于数值类型的列。想要计算值的种类时,可以在COUNT函数的参数中使用DISTINCT。在聚合函数的参数中使用DISTINCT,可以删除重复数据。
五、对表进行分组
5.1 GROUP BY语句
在 GROUP BY 子句中指定的列称为聚合键或者分组列。
5.2 聚合键中包含NULL时
5.3 GROUP BY书写位置
5.4 在WHERE子句中使用GROUP BY
5.5 常见错误
在使用聚合函数及GROUP BY子句时,经常出现的错误有:
在聚合函数的SELECT子句中写了聚合健以外的列 使用COUNT等聚合函数时,SELECT子句中如果出现列名,只能是GROUP BY子句中指定的列名(也就是聚合键)。在GROUP BY子句中使用列的别名 SELECT子句中可以通过AS来指定别名,但在GROUP BY中不能使用别名。因为在DBMS中 ,SELECT子句在GROUP BY子句后执行。在WHERE中使用聚合函数 原因是聚合函数的使用前提是结果集已经确定,而WHERE还处于确定结果集的过程中,所以相互矛盾会引发错误。 如果想指定条件,可以在SELECT,HAVING(下面马上会讲)以及ORDER BY子句中使用聚合函数。
六、为聚合结果指定条件
6.1 用HAVING得到特定分组
6.2 HAVING特点
七、对查询结果进行排序
7.1 ORDER BY
默认为升序排列,降序排列为DESC
7.2 ORDER BY中列名可使用别名
前文讲GROUP BY中提到,GROUP BY 子句中不能使用SELECT 子句中定义的别名,但是在 ORDER BY 子句中却可以使用别名。为什么在GROUP BY中不可以而在ORDER BY中可以呢?
这是因为SQL在使用 HAVING 子句时 SELECT 语句的执行****顺序为:
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
其中SELECT的执行顺序在 GROUP BY 子句之后,ORDER BY 子句之前。也就是说,当在ORDER BY中使用别名时,已经知道了SELECT设置的别名存在,但是在GROUP BY中使用别名时还不知道别名的存在,所以在ORDER BY中可以使用别名,但是在GROUP BY中不能使用别名****。