-- 查询列
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 子句
来指定查询数据的条件。
执行顺序:
1. 首先通过WHERE子句查询出符合条件的记录
2. 然后再SELECT语句指定列
SELECT <列名>, ……
FROM <表名>
WHERE <条件表达式>;
加 (+)、减(-)、乘(*)、除(/)和取模(%)运算。
另:
除:DIV
取模:MOV
非数字型字符串,运算时当作0来处理
加法两边做数值运算,会把字符串转为数字
求模后的结果符号与被模数符号相同(第一个数字)
所有包含 NULL
的计算,结果肯定是NULL
。
select -12 % -5 from dual -- -2
select 12 % -5 from dual -- 2
NULL
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
子句中指定的列称为聚合键或者分组列。
聚合键为NULL时,结果呈现 空
SELECT <列名1>, <列名2>, <列名3>, ……
FROM <表名>
WHERE
GROUP BY <列名1>, <列名2>, <列名3>, ……;
执行顺序:FROM → WHERE → GROUP BY → SELECT
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
💡 聚合键所对应的条件应该书写在 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子句包含: