⚙️查
?️简单查询语法
-- 查询列
SELECT <列名>,……
FROM <表名>;
-- 查询全部
SELECT *
FROM <表名>;
?️设置别名
AS
关键字设置别名
-- 设置别名
SELECT product_id AS id,
product_name AS name,
purchase_price AS price
FROM Product;
?️去重
DISTINCT
关键字实现去重,DISTINCT 关键字只能用在第一个列名之前
SELECT
DISTINCT product_type
,regist_date
FROM Product;
?️查询条件设置
WHERE 子句
来指定查询数据的条件。
执行顺序:
-
首先通过WHERE子句查询出符合条件的记录
-
然后再SELECT语句指定列
SELECT <列名>, ……
FROM <表名>
WHERE <条件表达式>;
⚙️运算符
?算数运算符
加 (+)、减(-)、乘(*)、除(/)和取模(%)运算。
另:
-
除:DIV
-
取模:MOV
-
非数字型字符串,运算时当作0来处理
-
加法两边做数值运算,会把字符串转为数字
-
求模后的结果符号与被模数符号相同(第一个数字)
-
所有包含
NULL
的计算,结果肯定是NULL
。select -12 % -5 from dual -- -2 select 12 % -5 from dual -- 2
?比较运算符
等号运算符 =
- 判断两个值,字符串和表达式是否相等。
- 不能用来比较
NULL
- 两边都是字符串,则按 ANSI码来比较。
- 相等则为1 不相等为0
安全等于运算符 <=>
- 可以比较null
- 相等则为1 不相等为0
不等于 <>
- 不能用来比较
NULL
判空 IS NULL、 IS NOT NULL
?逻辑运算符
AND
:与
OR
:或
AND运算符的优先级高于OR运算符。
()
可以提高优先级
真值
众所周知,真值有true和false两种,但是在SQL中还有一种UNKNOWN
的情况。前者是二值逻辑,后者是三值逻辑。
在值为NULL
时,真值为UNKNOWN
⚙️聚合
用于汇总的函数称为聚合函数或聚集函数。聚合,就是将多行混为一行。
只有**SELECT
子句、HAVING
子句、** 以及**ORDER BY
子句**中才能使用聚合函数。
聚合函数会将NULL排除在外,但是,COUNT(*)除外。
常见的聚合函数:
COUNT | 计算表中的行数 |
---|---|
SUM | 合计 |
AVG | 平均值 |
MAX | 最大值 |
MIN | 最小值 |
-
COUNT
SELECT COUNT(*) FROM Product;
注意:当表中含有null时,COUNT(*)和COUNT(<列名>)结果不同。
COUNT(*)
会得到包含NULL的数据行数,COUNT(<列名>)
会得到NULL之外的数据行数。
-
SUM
求和
SELECT SUM(sale_price) FROM Product;
-
AVG
平均值
SELECT AVG(sale_price) FROM Product;
-
MAX、MIN
最值
SELECT MAX(sale_price), MIN(purchase_price) FROM Product;
使用聚合函数删除重复值
先去重,再进行聚合
SELECT COUNT(DISTINCT product_type)
FROM Product;
⚙️分组 GROUP BY
决定表的切分方式
GROUP BY
子句中指定的列称为聚合键或者分组列。
聚合键为NULL时,结果呈现 空
SELECT <列名1>, <列名2>, <列名3>, ……
FROM <表名>
WHERE
GROUP BY <列名1>, <列名2>, <列名3>, ……;
执行顺序:FROM → WHERE → GROUP BY → SELECT
?给聚合结果指定条件 HAVING
group by 给结果分好组,having指定要查询的组的条件。
SELECT <列名1>, <列名2>, <列名3>, ……
FROM <表名>
GROUP BY <列名1>, <列名2>, <列名3>, ……
HAVING <分组结果对应的条件>
执行顺序:SELECT → FROM → WHERE → GROUP BY → HAVING
例子:
SELECT PROD,COUNT(*)
FROM myTable
GROUP BY PROD
HAVING COUNT(*) = 8
HAVING子句只能包含:
- 常数
- 聚合函数
- GROUP BY 中指定的列名
? 聚合键所对应的条件应该书写在 WHERE 子句之中
⚙️排序
?规则
ORDER BY 子句对查询结果进行排序。
如果存在空置NULL,空置会汇集在开头或者末尾
允许使用别名
SELECT <列名1>, <列名2>, <列名3>, ……
FROM <表名>
ORDER BY <排序基准列1>, <排序基准列2>, ……
?排序顺序:
升序:ASC(默认)
降序:DESC
多个排序键:
优先使用左侧的键,如果该列存在相同值的话,再接着参考右侧的键
执行顺序: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
ORDER BY子句包含:
- 存在表中(包括不在SELECT子句中)的列
- 聚合函数