SQL基础笔记(4)- 如何提升 SELECT 查询效率
基础查询
下图为表ums_admin
表的数据例子
1. SELECT基础查询
-- 查询用户名和邮箱
SELECT username,email FROM ums_admin;
-- 查询表中所有数据,在生产环境中不建议这样使用
SELECT * FROM ums_admin
-- 查询时定义别名
SELECT username AS user,password AS pwd,email FROM ums_admin;
2. DISTINCT的使用
- DISTINCT 需要放到所有列名的前面,如果写成
SELECT username, DISTINCT password FROM ums_admin
会报错。 - DISTINCT 其实是对后面所有列名的组合进行去重,所以
SELECT DISTINCT username, icon
和SELECT DISTINCT icon
,返回的结果是不一样
-- 去除重复行
SELECT DISTINCT username, icon FROM ums_admin;
3. ORDER BY排序
- 排序的列名:ORDER BY 后面可以有一个或多个列名,如果是多个列名进行排序,会按照后面第一个列先进行排序,当第一列的值相同的时候,再按照第二列进行排序,以此类推。
- 排序的顺序:ORDER BY 后面可以注明排序规则,ASC 代表递增排序,DESC 代表递减排序。如果没有注明排序规则,默认情况下是按照 ASC 递增排序。我们很容易理解 ORDER BY 对数值类型字段的排序规则,但如果排序字段类型为文本数据,就需要参考数据库的设置方式了,这样才能判断 A 是在 B 之前,还是在 B 之后。比如使用 MySQL 在创建字段的时候设置为 BINARY 属性,就代表区分大小写。
- 非选择列排序:ORDER BY 可以使用非选择列进行排序,所以即使在 SELECT 后面没有这个列名,你同样可以放到 ORDER BY 后面进行排序。
- ORDER BY 的位置:ORDER BY 通常位于 SELECT 语句的最后一条子句,否则会报错。
SELECT DISTINCT username, email FROM ums_admin ORDER BY username DESC ,email ASC;
4. LIMIT约束返回结果数量
- MYSQL, 使用
LIMIT 3
- SQL Server 和 Access, 使用
TOP 3
- DB2,使用
FETCH FIRST 3 ROWS ONLY
- Oracle,使用
ROWNUM <=3
SELECT DISTINCT username, email FROM ums_admin ORDER BY username DESC ,email ASC LIMIT 2;
5. SELECT执行顺序
关键字的顺序
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
语句的执行顺序
FROM > WHERE > GROUP BY > HAVING > SELECT 的字段 > DISTINCT > ORDER BY > LIMIT
6. where数据过滤
比较运算符
逻辑运算符
通配符
%
代表0个或多个字符_
代表一个字符
在实际操作过程中,建议你尽量少用通配符,
因为它需要消耗数据库更长的时间来进行匹配。即使你对 LIKE 检索的字段进行了索引,索引的价值也可能会失效。
如果要让索引生效,那么 LIKE 后面就不能以(%)开头,否则会对全表进行扫描