SELECT语句
基础版本:
SELECT <列名>,
FROM <表名>;
条件查询:
SELECT <列名1>,<列名2>,<列名3>……
FROM <表名>
WHERE <条件表达式>;
SELECT product_name,product_type
FROM product
WHERE product_type = '衣服';
SELECT product_name
FROM product
WHERE product_type = '衣服';
#查询所有列:
#SELECT * FROM <表名>;
#为列取别名:(AS 别名)
SELECT product_id AS id,
product_name AS name,
purchase_price AS "进货价"
FROM product;
#删除重复行数据:
SELECT DISTINCT product_type
FROM product;
#查询特定的行记录:
SELECT product_name,product_type
FROM product
WHERE sale_price=500;
!!!注意不等关系的表达式: <>
使用运算表达式:
SELECT product_name,sale_price,sale_price*2 AS "sale_price*2"
FROM product;
SELECT product_name,sale_price,purchase_price
FROM product
WHERE sale_price-purchase_price>=500;
SELECT product_name,purchase_price
FROM product
WHERE purchase_price IS NULL;
逻辑运算符
NOT,AND,OR运算符
!!!AND运算符要优先于OR运算符,可利用()改变运算符优先级
SELECT product_name,product_type,sa;e_price
FROM product
WHERE sale_price >=1000;
SELECT product_name,product_type,sa;e_price
FROM product
WHERE NOT sale_price >=1000;
SELECT product_name,product_type,regist_date
FROM product
WHERE product_type="办公用品"
AND(regist_date='2009-09-11'
OR regist_data='2009-09020');
对于NULL的值,视为不确定(UNKNOWN),在逻辑运算中:
- AND运算中,都为真才为真,只要有一个是假,结果就是假,否则为不确定
- OR运算中,都为假才为假,只要有一个真就是真,否则为不确定
练习题 第一部分
#练习题第一部分
#2.1
SELECT product_name,regist_date
FROM product
WHERE regist_date > '2009-04-28';
#2.2 对于NULL的判别 要用 IS(NOT)NULL
#空记录
SELECT *
FROM product
WHERE purchase_price=NULL;
#全部购买价格非空的记录
SELECT *
FROM product
WHERE purchase_price IS NOT NULL;
#输出为空记录
SELECT *
FROM product
WHERE purchase_price <>NULL;
#输出为空
SELECT *
FROM product
WHERE purchase_price > NULL;
#2.3
SELECT product_name,sale_price,purchase_price
FROM product
WHERE sale_price-purchase_price >=500;
SELECT product_name,sale_price,purchase_price
FROM product
WHERE NOT sale_price-purchase_price <500;
#2.4
SELECT product_name,product_type,sale_price*0.9-purchase_price AS profit
FROM product
WHERE (sale_price*0.9-purchase_price > 100
AND (product_type ='办公用品' OR product_type='厨房用具'));
2.4截图
聚合查询
SQL中用于汇总的函数叫做聚合函数,例如:
- COUNT:计算表中的记录数(行数)
- SUM:计算表中数值列中数据的合计值
- AVG:平均值(同SUM)
- MAX:求出表中任意列中数据的最大值
- MIN:最小值(同MAX)
#统计行数
SELECT COUNT(*)
FROM product;
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;
使用聚合函数删除重复值
SELECT COUNT(DISTINCT product_type)
FROM product;
SELECT SUM(sale_price),SUM(DISTINCT sale_price)
FROM product;
对表进行分组
GROUP BY语句
上述的聚合函数是在整个表进行数据处理和统计,使用GROUP BY可以对数据集进行按列汇总统计。类似EXCEL中的“筛选”
SELECT <列名1>,<列名2>,<列名3>
FROM <表名>
GROUP BY <列名1>,<列名2>,<列名3>;
在GROUP BY 子句中指定的列称为聚合键或者分组列
SELECT product_type,COUNT(*)
FROM product
GROUP BY product_type;
SELECT product_type,COUNT(*)
FROM product
聚合键中包含NULL时,会将其作为特殊的一组数据进行处理
SELECT purchase_price,COUNT(*)
FROM product
GROUP BY purchase_price;
GROUP BY书写位置
GROUP BY的⼦句书写顺序有严格要求:
1 SELECT → 2. FROM → 3. WHERE → 4. GROUP BY
其中前三项⽤于筛选数据,GROUP BY对筛选出的数据进⾏处理
常见错误
为聚合结果指定条件
HAVING 子句用于对分组进行过滤,可以使用数字、聚合函数和GROUP BY中指定的列名(聚合键)
SELECT product_type,COUNT(*)
FROM product
GROUP BY product_type
HAVING COUNT(*) = 2;
对查询结果进行排序
ORDER BY —默认为升序排序,降序为DESC
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 列名可使用别名
SQL在使⽤ HAVING ⼦句时 SELECT 语句的顺序为:
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。
其中SELECT的执⾏顺序在 GROUP BY ⼦句之后,ORDER BY ⼦句之前。也就是说,当在ORDER BY中使⽤别名时,已经知道了SELECT设置的别名存在,但是在GROUP BY中使⽤别名时还不知道别名的存在,所以不能在ORDER BY中可以使⽤别名,但是在GROUP BY中不能使⽤别名
练习题-第二部分
#----------task2 第二部分练习题
#2.5
#顺序错误:SELECT-FROM-WHERE-GROUP BY
#列名错误:GROUP BY 中出现的列名为product_type,SELECT中聚合函数不能够对product_name,进行检索
#聚合函数操作对象错误:SUM只能用于数值列,而product_name是字符串字段
#改正:
SELECT product_id,product_name
FROM product
WHERE regist_date > '2009-09-01'
GROUP BY product_type;
#2.6
SELECT product_type,SUM(sale_price) AS sum,SUM(purchase_price) AS sum
FROM product
GROUP BY product_type
HAVING SUM(sale_price)>=1.5*SUM(purchase_price)
ORDER BY sum DESC;
#2.7
SELECT *
FROM product
ORDER BY regist_date DESC,sale_price,product_id DESC;
2.6截图
2.7截图(运动T恤在最后)
参考资料
DataWhale:SQL编程语言