1.查询简介
2.比较,逻辑运算
书写范式
SELECT <列名1>,<列名2>, <列名3>, ……
FROM <表名>
GROUP BY <列名1>, <列名2>, <列名3>, ……;
其中
SELECT <列名1>,<列名2>, <列名3>中的列名可与加减乘除运算配合使用
加减乘法运算,举例如下:
SELECT (sale_price-purchase_price) as '利润',
(sale_price*0.8-purchase_price) as '打八折后利润',
(sale_price-purchase_price)/purchase_price as '利润率'
FROM product;
2.1 比较符号
比较符号与C语言相比,只有两处不一样,如下
- 和…相等,一个等号 =,不是==
- 和…不相等,为<>,不是 !=
举例
SELECT product_type,regist_date from product
where regist_date <> '2009-01-08' ;-- 查询登记日期不为2009-01-08的产品类型
2.2 逻辑运算符
- 符号,词义,数学意义
- and,和,交集
- or,或者,合集
- not,不是,取反
逻辑符号,and,举例
SELECT product_type,regist_date from product-- 查询2009-01-08到2009-06-08登记的产品类型
where regist_date > '2009-01-08' and regist_date < '2009-06-08';
逻辑符号,or,举例
SELECT product_type,regist_date from product-- 查询2009-01-08之前 或者 2009-06-08之后登记的产品类型
where regist_date < '2009-01-08' or regist_date > '2009-06-08' ;
逻辑符号,not,举例
SELECT product_name, product_type, sale_price
FROM product
WHERE NOT sale_price >= 1000;
-- 等同于
SELECT product_name, product_type, sale_price
FROM product
WHERE sale_price < 1000;
3.聚合函数
-count:统计表中某记录的行数,不统计null所在行
- sum:计算某属性(列)数据的总和,只适合数值类型
- avg:计算某属性(列)数据的平均值,只适合数值类型
- max/min:计算某属性(列)数据的最值,只适合数值类型
- 注意可剔除重复数据再计算,distinct,如 sum(distinct sale_price)
-- 计算全部数据的行数(包含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;
4. 分组,排序
最重要的是,明白 select 的执行顺序:
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
明白这顺序后就可以了解,group by中不能使用select中所命名的别名,因为还没执行到select,电脑还没读取子句中的别名信息。而order by就可以使用别名,因为此时电脑已经执行了select。
举例,查询销售单价( sale_price 列)合计值大于进货单价( purchase_price 列)合计值1.5倍的商品种类,并以销售单价( sale_price 列)为标准作降序排列。
书写顺序如下
select product_type, sum(sale_price) as '销售单价和',sum(purchase_price)
from product
group by product_type
having sum(sale_price) > sum(purchase_price) *1.5
order by '销售单价和' desc;
按照执行
from product
(where)
group by product_type
having sum(sale_price) > sum(purchase_price) *1.5
select product_type, sum(sale_price) as '销售单价和',sum(purchase_price)
order by '销售单价和' desc;
翻译一下:先找到表product,where无内容即无对表数据的过滤筛选的条件,以product_type为统计分组目标,并对分组作出要求:销售单价和 大于 进货单价和,查询中要显示的属性是product_type, sum(sale_price) as ,sum(purchase_price) ,最终显示的项目以’销售单价和’为标准作降序处理。
4.1 分组 group by
举例
SELECT purchase_price, COUNT(*)
FROM product
WHERE product_type = '衣服'
GROUP BY purchase_price;
其中使用having对分组的信息进行筛选,这个功能相当于where,不同的地方在于作用的对象不同。having,分组信息;where,未分组的表数据
4.2 排序 order by
desc 下降,asc 上升
举例
select * from product
order by regist_date desc,sale_price asc;