数据库的基本查询
- 数据表的基本查询:
最基本的查询语句是由 SELECT
和 FROM
关键字组成的。
SELECT * FROM 数据表名称; #查询表中所有的字段
SELECT 字段1,字段2,... FROM 数据表名称; #查询表中指定的字段
SELECT
语句屏蔽了物理层的操作,用户不必关心数据的真实存储,交由数据库高效的查找数据。
通常情况下,SELECT
子句中使用了表达式,name这列的名称就默认为表达式,因此需要一种对列名重命名的机制。
SELECT
字段1,
字段2 AS '别名',
...
FROM 数据表名称;
查询语句的子句执行顺序:
词法分析与优化
↓
FROM 选择数据来源
↓
SELECT 选择输出内容
- 数据分页:
如果结果集的记录很多,则可以使用 LIMIT
关键字限定结果集的数量。
SELECT * FROM 数据表名称 LIMIT 起始位置,偏移量; #查询表中所有的字段,并分页
SELECT 字段1,字段2,... FROM 数据表名称 LIMIT 起始位置,偏移量; #查询表中指定的字段,并分页
如果 LIMIT
子句只有一个参数,它表示的是偏移量,起始值默认为 0。
SELECT 字段1,字段2,... FROM 数据表名称 LIMIT 偏移量;
等价于
SELECT 字段1,字段2,... FROM 数据表名称 LIMIT 0,偏移量;
数据分页的查询语句的子句执行顺序:
词法分析与优化
↓
FROM 选择数据来源
↓
SELECT 选择输出内容
↓
LIMIT 限定结果集数量
- 结果集排序:
查询语句默认不会对结果集进行排序。如果想让结果集按照某种顺序排列,必须使用 ORDER BY
子句。
其中 ASC
表示升序排列,DESC
表示降序排列,默认是升序排列。
SELECT * FROM 数据表名称 ORDER BY 字段名 [ASC|DESC]; #查询表中所有的字段,并排序
SELECT 字段1,字段2,... FROM 数据表名称 ORDER BY 字段名 [ASC|DESC]; #查询表中指定的字段,并排序
如果排序字段是数字类型,就按照数字大小排序。如果是日期类型,就按照日期大小排序。如果是字符串,就按照字符集排序。如果两条数据排序字段内容相同,此时就会按照主键大小进行排序。
还可以使用 ORDER BY
指定首要排序字段和次要排序字段。数据库会先按照首要排序字段进行排序,如果首要排序字段内容相同,那么就会启用次要排序字段继续排序。如果指定的所有排序字段的内容都相同,那么就会按照主键大小进行排序。
SELECT * FROM 数据表名称 ORDER BY 字段1 [ASC|DESC], 字段2 [ASC|DESC],...; #查询表中所有的字段,并启用多个排序字段
SELECT 字段1,字段2,... FROM 数据表名称 ORDER BY 字段1 [ASC|DESC], 字段2 [ASC|DESC],...; #查询表中指定的字段,并启用多个排序字段
在同时排序和分页时,ORDER BY
子句书写的时候,应放在 LIMIT
子句的前面。
SELECT * FROM 数据表名称 ORDER BY 字段1 [ASC|DESC], 字段2 [ASC|DESC],... LIMIT 起始位置,偏移量; #查询表中所有的字段,并排序和分页
SELECT 字段1,字段2,... FROM 数据表名称 ORDER BY 字段1 [ASC|DESC], 字段2 [ASC|DESC],... LIMIT 起始位置,偏移量; #查询表中指定的字段,并排序和分页
排序和分页的查询语句的子句执行顺序:
词法分析与优化
↓
FROM 选择数据来源
↓
SELECT 选择输出内容
↓
ORDER BY 结果集排序
↓
LIMIT 限定结果集数量
- 去除重复记录:
如果需要去除结果集中的重复数据,可以使用 DISTINCT
关键字来实现。
SELECT DISTINCT 字段 FROM 数据表名称; #查询表中指定的字段,并去除重复记录
使用 DISTINCT
的 SELECT
子句只能查询一列数据,如果查询多列,去除重复记录就会失效。而且,DISTINCT
关键字只能在 SELECT
子句中使用一次。
- 条件查询:
如果需要查询能够满足某一种或某几种条件的记录,可以使用 WHERE
子句来实现。
SELECT * FROM 数据表名称 WHERE 条件1 [AND|OR] 条件2 ...; #查询表中满足条件的字段,显示所有字段
SELECT 字段1,字段2,... FROM 数据表名称 WHERE 条件1 [AND|OR] 条件2 ...; #查询表中满足条件的字段,显示指定字段
其中 AND
表示逻辑与,OR
表示逻辑或,NOT
表示逻辑非,XOR
表示逻辑异或。
WHERE
语句中的条件运算会用到以下 4 种运算符:
数学运算符:+、-、*、/、%
比较运算符:>、>=、<、<=、=、!=、IN、IS NULL、IS NOT NULL、BETWEEN AND、LIKE、REGEXP
逻辑运算符:AND、OR、NOT、XOR
按位运算符:&、|、~、^、<<、>>
按位运算符中,&、|、~、^
分别表示逻辑与、逻辑或、逻辑非、逻辑异或。mysql 中,按位运算符一般用于二进制按位运算。
WHERE
字句中,条件执行的顺序是从左至右的。因此,应该把索引条件、筛选掉记录最多的条件写在最左侧。
条件查询语句的子句执行顺序:
词法分析与优化
↓
FROM 选择数据来源
↓
WHERE 筛选满足条件的记录
↓
SELECT 选择输出内容
↓
ORDER BY 结果集排序
↓
LIMIT 限定结果集数量