目录
select
全列查询
特定列查询
用表达式查询
(as) + 名字
distinct 去重
where子句
比较运算符
列数据之间的比较
编辑
别名不能参与比较
null查询
between and
in ( ... , ...)
模糊匹配
逻辑运算符
order by子句
可以使用别名
总结mysql执行顺序
筛选分页
示例
select
全列查询
select * from +表名
- 相当于遍历了一遍表数据
- 如果数据量大,最好不要这样做
特定列查询
select + 列名(,列名1,列名2...) + from 表名
- 可以查某列/多列数据,按照指定的列顺序显示数据
- ''
用表达式查询
select + 常数/表达式 + from 表名
- 会将常数/表达式的结果与每行拼接在一起
可以用于计算表中数据,然后将结果显示出来:
(as) + 名字
select 列1+列2... as + 名字 + from 表名
- 可以为查询结果重命名
- as可加可不加
- 属于显示范畴
distinct 去重
select distinct+列名/表达式
为某列去重:
为表达式的运算结果去重:
where子句
比较运算符
列数据之间的比较
别名不能参与比较
这是mysql的执行顺序导致的
- 首先确定数据从哪来 -- 某张表
- 然后带着筛选条件去所选数据中寻找 -- where子句,而不是先拿到所有数据,再去筛选
- 最后将找到的数据按照给定的显示方式,显示出来
所以,where子句在先,他就无法识别sum是什么
null查询
不安全指的是,null无法参与比较
- 所以返回的是null,而不是1/0
!=和<>也是null不安全的:
所以,一般如果需要和null进行比较,会使用is (not) null
between and
in ( ... , ...)
可以将列数据与()内所给数据匹配的行显示出来:
模糊匹配
分为两种匹配方式:匹配任意字符%,匹配一个字符_
其实,mysql是不区分' '和" "的,习惯哪种就用哪种:
逻辑运算符
相当于我们代码中的&&,||,!
非常好理解的
比如:找到数学成绩>60,英语成绩大于90的学生:
order by子句
order by + 列名 asc(升序)/desc(降序)
可以将某列数据按升序或降序排列显示
- 默认是升序
也可以将多列进行排序,当第一列是相同数据时,按照第二个给出的顺序排列
null会被看作是最小值
可以使用别名
order by子句中可以使用查询列时使用的别名
- 因为如果想要排序,就得先拿到所有找到的数据,也就是说,它的顺序在显示范畴之后
总结mysql执行顺序
所以,再次总结一下mysql执行的顺序:
- 首先确定是操作哪张表
- 如果有where子句,说明我们只需要表中的一部分数据,如果不先筛选掉,在之后的处理中,就会处理无效数据(没必要)
- 所以,我们先执行where子句,拿到有效数据(筛选行)
- 然后根据需要显示的列,拿到相应的列数据(筛选列)
- 最后,将我们拿到的完全有效的数据,进行排序,显示给我们
筛选分页
limit + m,n / limit n offset m
- 用于在数据量大的时候使用,防止进程卡死
- m:从哪个位置开始显示(默认开始位置为0,可以看作是下标)
- n:显示行数
它比order的执行顺序还要更后
- 因为它是在数据已经准备好了的情况下,决定显示哪几条的
示例
这样就可以显示出从第二个位置(下标为1)的一条数据:
(注意,这里两次打印中,sum相同时,名字顺序不同,是因为:我们不能相信不经过排序的列数据顺序,他很可能是随机的)
如果要分页显示:
只需要要每次变化m的值即可(m+=n)