需要注意 NULL
1.
运算符 | 含义 |
---|---|
= | 和~ 相等 |
<> | 和~ 不相等 |
>= | 大于等于~ |
> | 大于~ |
< | 小于~ |
<= | 小于等于~ |
2. 对字符串使用不等号时的注意事项
字符串类型的数据原则上按照字典进行排序
例如:
11 > 2
但是 '11'<'2'
3. 不能对 NULL 使用比较运算符
希望选取 NULL 记录时,需要在条件表达式中使用 IS NULL 运算符;希望选取不是 NULL 的记录时,需要在条件表达式中使用 IS NOT NULL 运算符。
1.SQL 中的逻辑运算包含对真、假和不确定进行运算的三值逻辑。
运算符 | 含义 |
---|---|
NOT | 否定某一条件 |
AND | 并且 |
OR | 或 |
2.AND 优先级高于 OR,优先执行 OR 可以使用括号。
3. 三值逻辑中的 AND 和 OR 真值表
AND
P | Q | P AND Q |
---|---|---|
真 | 真 | 真 |
真 | 假 | 假 |
真 | 不确定 | 不确定 |
假 | 真 | 假 |
假 | 假 | 假 |
假 | 不确定 | 假 |
不确定 | 真 | 不确定 |
不确定 | 假 | 假 |
不确定 | 不确定 | 不确定 |
OR
P | Q | P OR Q |
---|---|---|
真 | 真 | 真 |
真 | 假 | 真 |
真 | 不确定 | 真 |
假 | 真 | 真 |
假 | 假 | 假 |
假 | 不确定 | 不确定 |
不确定 | 真 | 真 |
不确定 | 假 | 不确定 |
不确定 | 不确定 | 不确定 |
1. 聚合函数(集合函数):计算之前已经将 NULL 排除在外。
函数 | 含义 |
---|---|
COUNT | 计算表中的记录数(行数) |
SUM | 计算表中数值列中数据的合计值 |
AVG | 计算表中数值列中数据的平均值 |
MAX | 求出表中任意列中数据的最大值 |
MIN | 求出表中任意列中数据的最小值 |
2.COUNT 函数的结果根据参数的不同而不同
COUNT(*) 包含 NULL 的数据行数
COUNT(<列名>)NULL 之外的数据行数
3.
MAX/MIN 函数几乎适用于所有数据类型的列
SUM/AVG 只适用于数值类型的列
4. 使用聚合函数删除重复值
COUNT(DISTINCT *)
1.GROUP BY 子句
SELECT <列名 1>,<列名 2>,<列名 3>,...
FROM <表明>
GROUP BY <列名 1>,<列名 2>,<列名 3>,...;
聚合键中包含 NULL 时,在结果中会以 "不确定" 行(空行)的形式表现出来。
2. 与聚合函数和 GROUP BY 子句有关的常见错误
常见错误①——在 SELECT 子句中书写了多余的列(MYSQL 支持)
使用聚合函数时,SELECT 子句只能存在以下三种元素
常见错误②——在 GROUP BY 子句中写了列的别名
下列语句会发生执行错误:
SELECT product_type AS pt,count(*)
FROM product
GROUP BY pt;
这是因为 SQL 在 DBMS 中的执行顺序造成的——SELECT 子句在 GROUP BY 子句之后执行。
常见错误③——GROUP BY 子句结果能排序吗
GROUP BY 子句结果的显示是无序的。
常见错误④——在 WHERE 子句中使用聚合函数
只有 SELECT 子句和 HAVING 子句(以及 ORDER BY 子句)中能够使用聚合函数。
1.HAVING 子句为集合(组)指定条件。
HAVING 可以使用 3 中要素:
常数
聚合函数
GROUP BY 子句中指定的列名(聚合键)
2. 相对于 HAVING 子句,更适合写在 WHERE 子句中的条件
聚合键所对应的条件不应写在 HAVING 子句当中,而应写在 WHERE 子句中。
原因:
①:WHERE 子句 = 指定行所对应的条件;
HAVING 子句 = 指定组所对应的条件
②:WHERE 执行速度快,使用 COUNT 函数等对表中数据进行聚合操作时,DBMS 内部会进行排序处理,尽可能减少排序的行数,才能增加处理速度。WHERE 在排序前过滤,减少了排序行数。HAVING 在排序之后进行过滤。
1. 使用 ORDER BY 对查询结果进行排序。
2. 在 ORDER BY 子句中列名的后面使用关键字 ASC 可以进行升序排序;使用 DESC 关键字可以进行降序排序。
3.ORDER BY 子句中可以使用多个排序键。
4. 排序键包含 NULL 时,会在开头或末尾进行汇总。
5. 在 ORDER BY 子句中可以使用 SELECT 子句中定义的别名。这是因为 SELECT 的执行顺序:
FROM——>WHERE——>GROUP BY ——>HAVING ——>SELECT ——>ORDER BY
6. 在 ORDER BY 子句中可以使用 SELECT 子句中未使用的列和聚合函数。
来源: http://www.cnblogs.com/songwenjie/p/8048051.html