SQL从入门到放弃系列——数据检索[五]

2019年6月25日23:31:34 发表评论 72
摘要

SELECT查询基础语法。
排序检索数据。
提升SELECT查询效率。

SELECT 查询的基础语法

查询列

SQL:SELECT * FROM heros

起别名

SQL:SELECT name AS n, hp_max AS hm, mp_max AS mm, attack_max AS am, defense_max AS dm FROM heros

查询常数

增加一个虚拟列

SQL:SELECT '王者荣耀' as platform, name FROM heros

去除重复行

SQL:SELECT DISTINCT attack_range FROM heros

distinct需要放到所有列的前面,否则会报错。

 

如何排序检索数据

SQL:SELECT name, hp_max FROM heros ORDER BY hp_max DESC

排序的列名可以有一个或多个,以第一个为优先排序。

ASC递增(正序),DESC递减(倒序)。

order by位于最后一个子句否则报错。

order by的字段不一定在select后,也可以使用非选择列排序。

 

约束返回结果的数量

其实就是分页,通过约束返回结果的数量可以减少数据表的网络传输量,也可以提升查询效率。如果知道返回结果的数量只有一条,就可以使用LIMIT 1,告诉SELECT语句只需要返回一条记录即可。不需要扫描完整的表,只需要检索到一条符合条件的记录即可返回。

MySQL、PostgreSQL、MariaDB、SQLite中使用关键字LIMIT进行分页

SQL:SELECT name, hp_max FROM heros ORDER BY hp_max DESC LIMIT 5

SQLServer和Access使用TOP关键字

SQL:SELECT TOP 5 name, hp_max FROM heros ORDER BY hp_max DESC

DB2使用FETCH FIRST 5 ROWS ONLY关键字

SQL:SELECT name, hp_max FROM heros ORDER BY hp_max DESC FETCH FIRST 5 ROWS ONLY

Oracle使用ROWNUM统计行数

SQL:SELECT name, hp_max FROM heros WHERE ROWNUM <=5 ORDER BY hp_max DESC

 

SELECT的执行顺序

关键字顺序

SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...

SELECT的执行顺序

FROM > WHERE > GROUP BY > HAVING > SELECT 的字段 > DISTINCT > ORDER BY > LIMIT

例如

SELECT DISTINCT player_id, player_name, count(*) as num # 顺序 5
FROM player JOIN team ON player.team_id = team.team_id # 顺序 1
WHERE height > 1.80 # 顺序 2
GROUP BY player.team_id # 顺序 3
HAVING num > 2 # 顺序 4
ORDER BY num DESC # 顺序 6
LIMIT 2 # 顺序 7

 

补充

SELECT COUNT(*) > SELECT COUNT(1) > SELECT COUNT(具体字段)之前看到的,好像Mysql对count(*)做了单独的优化?

SQL从入门到放弃系列——数据检索[五]

(本文完)

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
  • A+
所属分类:SQL

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: