1 基础查询
- SQL中可以随意使用换行符(但不可插入空行)
- 1行注释"-- “、多行注释”/* */"
- NULL的真值结果既不为真,也不为假,表不确定
- 只能是 is null 不能是 = null;is not null 同理
- 字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆
- 星号、distinct、中文需要双引号
- 比较运算符,等于号用=,不用==
- NOT
- AND、OR
- 括号
-- exam1
SELECT *
FROM <表名>;
-- exam2
SELECT DISTINCT product_id As id,
purchase_price AS "进货单价",
sale_price * 2 AS "sale_price x2"
FROM product
WHERE purchase_price IS NOT NULL
AND product_type <> '衣服'
AND NOT sale_price >= 1000
AND sale_price-purchase_price >= 500
AND ( regist_date = '2009-09-11'
OR regist_date = '2009-09-20');
- 练习
2.1
编写一条SQL语句,从product(商品)表中选取出“登记日期(regist在2009年4月28日之后”的商品,查询结果要包含product name和regist_date两列
select product_name, regist_date
from product
where regist_date > '2009-04-28;
2.2
返回的结果是? – 没结果
sale_price - purchase_price >=500,不包括500-null的
2 聚合函数和groupby
SELECT SUM(sale_price), SUM(DISTINCT sale_price)
FROM product;
- COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数
- 聚合函数会将NULL排除在外。但COUNT(*)例外,并不会排除NULL
- MAX/MIN函数几乎适用于所有数据类型的列SU,M/AVG函数只适用于数值类型的列
SELECT product_type, COUNT(*)
FROM product
GROUP BY product_type;
- select里须有groupby的列,不能写groupby之外的列
- 在 GROUP BY 子句中指定的列称为聚合键或者分组列
- 聚合建包含NULL时,此时会将NULL作为一组特殊数据进行处理
- 书写顺序(与执行顺序不同):where在groupby前
- select在groupby后,所以groupby不能用select中的as别名
- where中不能使用聚合函数,聚合函数的使用前提是结果集已经确定,而WHERE还处于确定结果集的过程中,相互矛盾会引发错误
3 执行顺序
- select在groupby后,所以groupby不能用select中的as别名
- 显然oder by可以
4 having
- 筛选聚合值
SELECT product_type, COUNT(*)
FROM product
GROUP BY product_type
HAVING COUNT(*) = 2;
5 order by
- 当用于排序的列名中含有NULL时,NULL会在开头或末尾进行汇总
SELECT <列名1>, <列名2>, <列名3>, ……
FROM <表名>
ORDER BY <排序基准列1> ASC, <排序基准列2> DESC, ……