-
ch02: 基础查询与排序
分成小节分别讲了:
- select 语句 - 从表中选取数据 【 select <列名> from <表名>;】
- where 语句 - 从表中选取符合条件的数据【 select <列名> from <表名> where <条件表达式>;】
- 四种主要算术运算符【+ - * /】
- 常见比较运算符【= <> <= >= < >】
- 逻辑运算符【not and or,优先级 not > and > or】
- 用真值表来梳理条件复杂语句的逻辑关系
- 五个常用聚合函数【sum avg max min count】
- 使用 distinct 进行删除重复值的聚合运算 【select count(distinct <列名>) from <表名> 】
- group by 语句 - 对表进行分组 【 SELECT <列名1>,<列名2>, <列名3>, …… FROM <表名> GROUP BY <列名1>, <列名2>, <列名3>, ……;】【子句书写顺序 1.SELECT ➡️ 2. FROM ➡️ 3. WHERE ➡️ 4. GROUP BY】
- having 语句 - 为聚合结果指定条件,得到特定分组 【HAVING 子句必须与 GROUP BY 子句配合使用,且限定的是分组聚合结果,WHERE 子句是限定数据行(包括分组列)】
- order by - 对查询结果进行排序【SELECT <列名1>, <列名2>, <列名3>, ……FROM <表名> ORDER BY <排序基准列1> [ASC, DESC], <排序基准列2> [ASC, DESC], ……】【参数 ASC 表示升序排列,DESC 表示降序排列,默认为升序】
- null值 - 【MySQL中,
NULL
值被认为比任何非NULL
值低】【对于数字或者日期类型,可以在排序字段前添加一个负号(minus)来得到反向排序】【is null / isnull()】【!isnull()、COALESCE
函数】
- 练习题
2.1
select product_name , regist_date
from product
where regist_date > '2009-04-28';
2.2
结果都是返回六个列并且值都为N/A
2.3
/*已知结果,直接按照产品名字筛选*/
select product_name , sale_price , purchase_price
from product
where product_name = 'T恤' or product_name = '运动T恤' or product_name = '高压锅';
/*换种运算方式*/
select product_name , sale_price , purchase_price
from product
where purchase_price + 500 <= sale_price ;
2.4
select product_name , product_type , sale_price * 0.9 - purchase_price as "profit"
from product;
2.5
(1)WHERE子句写在了GROUP BY后面;
(2)在聚合函数的SELECT子句中写了聚合键以外的列使用COUNT等聚合函数时,SELECT子句中如果出现列名,只能是GROUP BY子句中指定的列名
2.6
select product_type , sum(sale_price) , sum(purchase_price)
from product
group by product_type
having sum(sale_price) > sum(purchase_price) * 1.5;
2.7
/*找规律,首先 regist_date 列null值在首行,其余按降序,则可能为 order by -regist_date ASC ;
date相同的情况下,sale_price 列升序,则可能为 order by -regist_date ASC , sale_price ASC ;
*/
select *
from product
order by -regist_date ASC , sale_price ASC ;