刚开始学数据库,只会写 SELECT *?本文将带你全面掌握 MySQL 基础查询!从语法规范到别名设置,并提示了全表查询和深分页可能产生的性能问题。文末还揭秘了"为什么单行注释 -- 后必须加空格"的有趣细节。
文章目录
-
- [一、 SQL 语法基础:规则与规范](#一、 SQL 语法基础:规则与规范)
-
- [1.1 大小写](#1.1 大小写)
- [1.2 语句终止符 (Semicolon,分号)](#1.2 语句终止符 (Semicolon,分号))
- [1.3 备注](#1.3 备注)
- [二、 查询数据](#二、 查询数据)
-
- [2.1 全表查询](#2.1 全表查询)
- [2.2 查询指定列](#2.2 查询指定列)
- [三、 结果集优化:去重与限制](#三、 结果集优化:去重与限制)
-
- [3.1 数据去重 (DISTINCT)](#3.1 数据去重 (DISTINCT))
- [3.2 限制结果集数量 (LIMIT)](#3.2 限制结果集数量 (LIMIT))
- 为什么单行注释,双横线后必须要有空格?
一、 SQL 语法基础:规则与规范
SQL 是由英文术语组成的指令集,这些术语叫做关键字。其中SELECT 是最频繁使用的关键字,用于从表中提取信息,基础语法是 SELECT ... FROM ...;。
1.1 大小写
- SQL 语句不区分大小写 (
SELECT等于select等于Select),你可以将关键字大写,表名/列名小写,以提升代码可读性,全部小写也行(SQL美化工具通常会自动对关键字大写)。
1.2 语句终止符 (Semicolon,分号)
- 当SQL编辑区存在多个 SQL 语句并列时,语句间必须用分号
;分隔,而单条 SQL 末尾可以不加分号。但我还是建议统一规则:单条查询也以分号结尾。
1.3 备注
备注是我们为SQL添加的一些说明,解释器会忽略所有备注。
- 单行备注,通常用来对SQL逻辑进行简短解释:
- 标准 SQL 格式(-- ):使用两个短横线加一个空格,缺失空格会导致语法报错(可以试着想一下为什么?文末有答案)。
- MySQL特有格式:使用#,后续可以不加空格。
- 多行备注,适用于解释复杂的业务逻辑、存储过程描述,或者暂时屏蔽一段代码块:
- 语法:以 /* 开始,以 */ 结束

二、 查询数据
2.1 全表查询
即查询某张表的全部数据,主要快速查看小表数据,如果表数据量很大,会带来很大的I/O压力(生产环境慎用),MySQL Workbench默认限制只查询1000条数据,你也可以解除此限制:
- 语句 :
SELECT * FROM tbl_name;,*代表查询表中的所有字段,tbl_name代表当前数据库下的某张表名。如果跨库查询,需要用 db_name.tbl_name的方式指定。 - 极简方式 (MySQL 8.0+) :
TABLE tbl_name;,这是SELECT *的简写语法,是MySQL特有的写法,有一定限制(无法使用过滤条件)。

2.2 查询指定列
和全表查询类似,唯一的区别是你必须在 SELECT 关键字之后指定多个列名,并且必须用逗号分隔这些列。
- 语法:
SELECT column_names FROM tbl_name; - 可以使用 desc tbl_name; 查看表有哪些列
- 别名:查询时可以为每个字段设置别名,语法是 "字段名 as 别名",其中as关键字可省略

三、 结果集优化:去重与限制
3.1 数据去重 (DISTINCT)
- 语法:
SELECT DISTINCT column_name FROM tbl_name; - 注意 :
DISTINCT作用于后面所有列的组合,而不仅仅是紧随其后的第一个字段,即所有字段的组合去重。

3.2 限制结果集数量 (LIMIT)
当我们不需要全量结果集时,可以使用limit关键字仅返回部分数据。
- 基础截取 :
LIMIT n;,返回前 n 行。 - 范围偏移 :
LIMIT offset, n;,从第 offset 行开始,取 n 行(即丢弃前offset行),这也是MySQL中一种查询分页方法。 - 性能预警:LIMIT offset, n; 分页时,offset丢掉的数据也是占资源的(查询出来后再丢弃),如果offset非常大,可能导致严重的性能问题。此时要进行优化,不能用简单的limit语法。

为什么单行注释,双横线后必须要有空格?
对于SQL:SELECT 1--1,结果是什么?
- 可能性 A(减法): 把 --1 看作是"减去负 1"。按照数学法则 1- (-1),结果应该是 2。
- 可能性 B(注释): 把 --1 看作注释开始。那么 1 及其后面的内容都被忽略,结果应该是 1。
为了消除这种歧义,MySQL 规定:如果不加空格,-- 就优先被视为减法和负数符号的组合。只有加了空格,它才被确认为注释 ,因此 1--1 在MySQL中运行结果是2。
