目录
8.8 判断空和非空 is null、is not null
一、查询(retrieve)
1.1 查询数据的方式概述
查询方式 | 简单说明 |
全列查询 | 查询表中所有数据; |
指定列查询 | 查询表中指定列的数据; |
表达式查询 | 根据表达式查询相关列并运算,打印运算结果; |
查询结果指定别名(as) | 为查询结果中的列指定别名,打印的列名为该别名; |
去重查询(distinct) | 查询结果为去重后的结果; |
排序查询(order by) | 对查询的结果进行排序; |
条件查询(where) | 使用运算符,设置查询规则,根据查询规则查询数据; |
分页查询(limit) | 指定查询的数据的打印行数,类似分页的效果; |
上述查询方式,是 MySQL 中基础的查询方式。
查询方式并非每次只能使用一种,而是可以根据使用者的需求,将查询方式搭配组合,以查询到所需的数据。
所有的查询结果都是一张 “临时表” ,执行查询操作不会改变数据库中的原始数据。
现有表格 student ,表格所有数据如下:
二、全列查询
2.1 语法
语法: | select * from 表名; |
解释: | 根据指定的数据表,查询表中所有数据;(‘ * ’ 号为通配符) |
2.2 操作演示
2.3 全列查询需要慎重使用
数据量过大时,用全列查询的方式查询数据,可能导致硬盘或网络带宽开销过大,在查询操作完成之前,服务器无法正常响应其他的的客户端请求。
可能影响索引的使用。
除非数据量小,通常情况下不建议执行全列查询操作。
三、指定列查询
3.1 语法
语法: | select 列名...... from 表名; |
解释: | 指定数据表中的某一列或多列,查询指定列的所有数据。 |
一个数据表中常会有多列,指定列查询的方式减少了查询的数据量。但仍可能出现数据量过大的情况,因此指定列查询也需要慎重使用。
3.2 操作演示
四、表达式查询
4.1 语法
语法: | select 表达式...... from 表名; |
解释: | 指定数据表,根据表达式按列对数据表中的数据进行计算。 每个表达式为一列,将表达式结果打印。 |
4.2 操作演示
4.3 null 参与表达式计算
应注意,当 null 参与计算时,结果必然为 null 。
4.3 表达式查询存的缺陷
表达式将作为列名进行打印。可以从上图看到,如果表达式非常长,那么这一列的列名也将非常长,可读性差,不利于阅读和理解该列含义。下文使用的“查询结果指定别名”可以解决这个问题。
4.4 临时表中列的类型
所有的查询结果都是一个临时表。
临时表中的数据类型不再受限于原始表。
可以从上图看到,经过表达式计算后,数据格式已经不合法,但该查询操作仍可以执行。
五、查询结果指定别名(as)
5.1 语法
语法: | select 表达式 as 别名 from 表名; |
解释: | 指定数据表,根据表达式按列对数据表中的数据进行计算。 每个表达式为一列,以别名作为表达式的运算结果的列名,将表达式结果打印。 |
5.2 操作演示
六、去重查询(distinct)
6.1 语法
语法: | select distinct 列名...... from 表名; |
解释: | 指定数据表中的某一列或多列,除数据重复的行之外,打印查询结果。 |
如果指定多列进行去重查询,此时需要每一列的数据都重复,才会认为数据行是重复的。
6.2 操作演示
七、排序查询(order by)
7.1 排序规则
如果一个查询操作没有使用 order by 关键字,那么这个查询操作得到的结果集数据之间的相互顺序是不可预测的,不能被认为是有序的。 |
关键字 asc 表示升序,desc 表示降序。如果不指定升降序,则默认升序 asc 。(注意关键字升序 desc 和 关键字描述 desc 重复,使用时注意区分) |
null 数据会被认为是最小值。 |
字符串也可以比较大小,一般按照字典序进行排序。中文也是按照字典序进行排序,不是按照拼音首字母或笔画顺序,一般没有意义。 |
7.2 语法
语法: | select 列名...... from 表名 order by 列名 asc/desc; |
解释: | select 后的列名,是指需要打印的列名。 order by 后的列名,是指排序的依据,这里的列名并不一定需要被打印。 order by 后的列名,可以选择升序排列(使用 asc 或 不写),或选择降序(使用 desc )。 |
语法: | select 表达式 as 别名...... from 表名 order by 别名 asc/desc; |
解释: | 与其他查询一样,可以在 select 后指定一列或多列,可以替换为表达式,可以指定别名。 指定别名后,order by 可以根据别名的数据进行排序。 |
语法: | select 表达式 as 别名...... from 表名 order by 别名 asc/desc, 列名 asc/desc......; |
解释: | 优先级排序:order by 后的列名,是指排序的依据,可以指定多列作为排序的依据,列与列之间排序的优先级根据书写的先后顺序决定。 |
7.3 操作演示
八、条件查询(where)
8.1 语法
查询时,指定筛选条件,符合条件将被打印,不符合条件的不会打印。
语法: | select 列名...... from 表名 where 条件表达式; |
解释: | 根据指定条件表达式筛选数据,打印指定列中符合条件的数据。 |
语法: | select 表达式 as 别名...... from 表名 where 条件表达式; |
解释: | 与其他查询一样,可以在 select 后指定一列或多列,可以替换为表达式,可以指定别名 |
8.2 运算符简介
运算符列表 | |
> >= < <= | 大于、大于等于、小于、小于等于 |
= <=> | 等于 |
!= <> | 不等于 |
between A and B | 范围匹配 |
in (option, ......) | 选择匹配 |
is null、is not null | 判断空 |
like | 模糊匹配 |
and、or、not | 与、或、非 |
阅读指针 -> 《SQL中的比较运算符和逻辑运算符简介》
8.3 运算符 > >= < <=
8.4 运算符 = <=>
8.5 运算符 != <>
8.6 范围匹配 between A and B
8.7 选择匹配 in (option, ......)
8.8 判断空和非空 is null、is not null
8.9 模糊匹配运算符 like
8.10 运算符 与and、或or、非not
8.11 where 后的条件表达式中不能使用别名
select 表达式 as 别名 from 表名 where 别名 + 10; |
where 后的条件表达式中,不能使用别名。 上述语句指定了 “别名 + 10” 作为 where 后的条件表达式,执行该语句将报错,因为在 where 后的条件表达式中使用了别名。 |
where后不使用别名则可以正常打印:
8.12 条件查询中的 SQL 语句的执行顺序
根据指定的表,取出一行记录。 |
将该行记录代入条件表达式,判断是否满足条件。 |
如果条件满足,则将 select 后指定的列取出并打印;如果 select 后是表达式,则根据表达式计算后再进行打印。 |
九、分页查询(limit)
9.1 语法
语法: | select * from 表名 limit 数量; |
解释: | 指定数据表,limit 指定需要打印多少行。 |
语法: | select * from 表名 limit 数量 offset 行数; |
解释: | 指定数据表,limit 指定需要打印多少行,offset 指定从哪一行开始打印。 |
9.2 分页查询的优点
分页查询可以限制查询数据每次的打印数量和从哪个位置开始打印。
查询数据时,可能由于查询数据量过大,而导致服务器阻塞,一直在执行数据查询操作,而没有办法响应其他客户端请求。使用分页查询,就能很好的解决这个问题。
9.3 操作演示