引言
本节主要介绍了SQL查询语句的用法,并介绍了算术运算符和逻辑运算符,其中多个逻辑运算时要注意先后顺序,之后介绍了聚合函数,主要是Count、Sum、Max、Min等,然后介绍了分组操作以及制定分组操作,最后介绍了排序查询。
文本连接
Task02:SQL基础查询与排序-天池龙珠计划SQL训练营
Select语句
SELECT <列名>, ……
FROM <表名>
WHERE <条件表达式>;
SELECT product_name, product_type FROM `product`
WHERE `product_type` = '衣服';
一些运算符
注意: 选取NULL记录时,需要在条件表达式中使用IS NULL运算符。希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL运算符。
-- WHERE子句的条件表达式中也可以使用计算表达式
SELECT product_name, sale_price, purchase_price FROM `product`
WHERE `sale_price` - `purchase_price` >= 500;
-- 选取NULL的记录
SELECT product_name, purchase_price FROM `product`
WHERE `purchase_price` IS NULL ;
-- 选取不为NULL的记录
SELECT product_name, purchase_price FROM `product`
WHERE `purchase_price` IS NOT NULL ;
逻辑运算符:与 或 非
注意: 在使用多个逻辑符号时,注意运算顺序,用括号标记优先运算
-- 通过使用括号让OR运算符先于AND运算符执行
SELECT product_name, product_type, regist_date
FROM product
WHERE product_type = '办公用品'
AND ( regist_date = '2009-09-11'
OR regist_date = '2009-09-20');
含有NULL时的真值表
聚合查询
COUNT:计算表中的记录数(行数)
SUM:计算表中数值列中数据的合计值
AVG:计算表中数值列中数据的平均值
MAX:求出表中任意列中数据的最大值
MIN:求出表中任意列中数据的最小值
-- 计算全部数据的行数(包含NULL)
SELECT COUNT(*)
FROM product;
-- 计算NULL以外数据的行数
SELECT COUNT(purchase_price)
FROM product;
-- 计算销售单价和进货单价的合计值
SELECT SUM(sale_price), SUM(purchase_price)
FROM product;
-- 计算销售单价和进货单价的平均值
SELECT AVG(sale_price), AVG(purchase_price)
FROM product;
-- MAX和MIN也可用于非数值型数据
SELECT MAX(regist_date), MIN(regist_date)
FROM product;
使用 DISTINCT 可以获得去除重复值后的数据
SELECT COUNT(DISTINCT product_type)
FROM product;
分组操作
SELECT <列名1>,<列名2>, <列名3>, ……
FROM <表名>
GROUP BY <列名1>, <列名2>, <列名3>, ……;
SELECT product_type, COUNT(*)
FROM product
GROUP BY product_type;
GROUP BY书写位置
1.SELECT → 2. FROM → 3. WHERE → 4. GROUP BY
SELECT purchase_price, COUNT(*)
FROM product
WHERE product_type = '衣服'
GROUP BY purchase_price;
注意
- 在聚合函数的SELECT子句中写了聚合健以外的列 使用COUNT等聚合函数时,SELECT子句中如果出现列名,只能是GROUP BY子句中指定的列名(也就是聚合键)。
- 在GROUP BY子句中使用列的别名 SELECT子句中可以通过AS来指定别名,但在GROUP BY中不能使用别名。因为在DBMS中 ,SELECT子句在GROUP BY子句后执行。
- 在WHERE中使用聚合函数 原因是聚合函数的使用前提是结果集已经确定,而WHERE还处于确定结果集的过程中,所以相互矛盾会引发错误。 如果想指定条件,可以在SELECT,HAVING(下面马上会讲)以及ORDER BY子句中使用聚合函数。
Having:用于对分组后的数据再筛选出特定分组
SELECT product_type, COUNT(*)
FROM product
GROUP BY product_type
HAVING COUNT(*) = 2;
对查询结果进行排序
SELECT <列名1>, <列名2>, <列名3>, ……
FROM <表名>
ORDER BY <排序基准列1>, <排序基准列2>, ……
-- 降序排列
SELECT product_id, product_name, sale_price, purchase_price
FROM product
ORDER BY sale_price DESC;
-- 多个排序键
SELECT product_id, product_name, sale_price, purchase_price
FROM product
ORDER BY sale_price, product_id;
ORDER BY运行顺序
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
注意: 在ORDER BY中可以使用别名,但是在GROUP BY中不能使用别名