1:DISTINCT 用于去重,但是需要注意的是,它是用于所有列的,也就是说,除非指定的列全部相同,否则所有的行都会被检索出来。
2:ORDER BY 用于排序,但是应该注意的是,它因该是 SELECT 语句中出现的最后一条字句,如果不是,则报错。
3:在 WHERE 字句中出现多个 AND 和 OR 时候应该特别注意,因为和大多数语言一样,因为优先级不同(AND更大),所以在使用中 应该使用 ()来包住你需要的筛选条件。
4:IN 可以使用 WHERE / OR 实现,但是最大的不同是,IN 中可以包含 WHERE 字句。
5:当使用 AS 重新命名之后,必须使用命名之后的名称。
SELECT `user.name` FROM `name` AS n; // 报错,没有此字段
SELECT `n.name` FROM `name` AS n; // 正常,包括 WHERE 字句中也是如此
6:WHERE 和 HAVING 的区别
- HAVING 的删选条件只能是之前已经筛选出来的字段
- WHERE 的使用是表中具体存在的字段
- 例如
1:having 和 where 都可以使用
select id,name form user where id = 1; // 正常
select id,name form user having id = 1; // 正常,因为having的字段是之前已经 select 的字段
2:只有where可以使用
select name form user having id = 1; // 报错,因为having的字段并没有select出来
3:只有having可以使用
group by 字句后面
聚合函数只有having能用
select count(*) as count from users where count > 0 group by id; // 错误,count并不是表字段,而是算出来的值,where不认识
select count(*) as count from users group by id where count > 0 ; // 正确
- 总结来说
where 可以使用的,是表里的具体字段,而聚合函数count(`field`)/avg(`field`)等等,它们算出来的都不是表里的字段,当然不能使用。
而 having 的过滤条件是之前已经检索出来的数据。