检索数据

115 阅读2分钟

查询列

SELECT xxx FROM heros

一般来说我们只从一个表中查询数据,通常不需要增加一个固定的常数列,但如果我们想整合不同的数据源,用常数列作为这个表的标记,就需要查询常数。比如:


SELECT 123 as platform, name FROM heros

去重

distinct关键字,用来去除重复行,需要放到所有列名的前面,ISTINCT 其实是对后面所有列名的组合进行去重。

排序

ORDER BY 后面可以有一个或多个列名,如果是多个列名进行排序,会按照后面第一个列先进行排序,当第一列的值相同的时候,再按照第二列进行排序,以此类推。

如果没有注明排序规则,默认情况下是按照 ASC 递增排序。

ORDER BY 可以使用非选择列进行排序,所以即使在 SELECT 后面没有这个列名,你同样可以放到 ORDER BY 后面进行排序。

ORDER BY 通常位于 SELECT 语句的最后一条子句,否则会报错。

返回结果数量

在不同的 DBMS 中使用的关键字可能不同。

  • 在 MySQL、PostgreSQL、MariaDB 和 SQLite 中使用 LIMIT 关键字,而且需要放到 SELECT 语句的最后面。
select xx from xxx limit 5
  • 如果是 SQL Server 和 Access,需要使用 TOP 关键字,放在select后。
select top 5, xx from xxx
  • 如果是Oracle,需要使用rownum来统计行数,放在查询条件中。
select xx from xxx where rownum<=5

select执行顺序

  1. 关键字顺序
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
  1. 执行顺序
FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT
  1. 针对count

COUNT(*) = COUNT(1) > COUNT(字段)

如果要统计COUNT(),尽量在数据表上建立二级索引,系统会自动采用key_len小的二级索引进行扫描,这样当我们使用SELECT COUNT()的时候效率就会提升。


此文章为3月Day29学习笔记,内容来源于极客时间《SQL必知必会》