1. 查询表中的所有数据
select * from [表名];
注意:
这种方式仅限于在测试环境中使用,千万不能在生产环境的服务器上执行这样的SQL,因为生产环境的服务器压力本来就很大,生产环境的服务器(数据库)数据量非常大,一旦执行 select * 操作,可能就会导致服务器死记或宕机
2. 查询表一行中 N 个列数据的和
select [列名1] + [列名2] + ... + [列名n] from [表名];
3. 给查询出来的列取一个别名
select [列名] as from [表名];
4. 查询出来的列进行去重
select distinct [列名] from exam_result [表名];
去重查找,得到的结果表的行数和原来的可能是不一样的,select 得到的结果相当于是一张表(MySQL 构造的一个临时表),去重操作也能指定多列来去重,但是要多列都完全一样才能被去重
使用 distinct 的时候必须要把对应的列都放到 distinct 后面
5. 排序操作
order by 指定针对哪个列进行排序
select * from [表名] order by [列名] ; //升序排列
select * from [表名] order by [列名] asc; //升序排列
select * from [表名] order by [列名] desc; //降序排列
对总成绩进行降序排序
利用别名来查询
如果有 null 的时候默认为最小值
6. 条件查询(比较复杂的查询,也比较常见)
借助 where 来实现
条件查询中涉及的运算符
> >= < <=:没有特殊含义
=:表示比较相等,而不是赋值(update 中的 = 相当于赋值)
< = > :比较相等,能够针对 null 进行比较【如果表达式 null = null => 相当于条件不成立,如果 null <=> null 相当于 条件成立】
!= :不等于
between x and y : 表示在 [x,y] 闭区间内都是满足条件
in (若干个选项):当前值在 ()中的若干个选项里匹配任意一个都是满足条件
is null:判断为空的
is not null:专门用于判定值是否为 null
like :模糊匹配
and:逻辑与
or:逻辑或
not:逻取反
查找列中为null的行
查找数学不及格的同学信息(数字< 60)
查找所有同学中 语文 > 英语 的同学信息
查找总分在 200 分以下的同学
注意,这是一个错误写法,where 里面不支持 别名
正确写法:
查询语文成绩大于 60 并且 英语成绩也大于 60 的同学
查询语文成绩大于 80 或者 英语成绩大于 80 的同学
只需要把上一个代码中的 and 换成 or 即可
查询语文成绩在 [60,70] 之间的同学
查询数学成绩是 80 或者 88.9 的同学
7. 模糊查询
借助 % 或者 _ 来代替任意字符
用 like 表示模糊查询
select * from [表名] where name like '%[字符串]%'; //匹配任意多个
select * from [表名] where name like '[字符串]_'; //匹配严格的一个任意字符,_的个数代表字符的数量
查询名字中带孙的同学
查询名字为 孙xx 的同学信息
如果只用一个下划线那么就找不到匹配的,因为我的表中姓孙的同学名字都是两个字
like 不仅仅能针对字符串进行匹配,也能针对数字进行匹配
查找语文成绩带 9 的同学
查找数学成绩 8 开头的同学
进行复杂条件查询的时候,存在一个“最左原则”
当我再添加一个同学信息到表中后
查找同学中姓孙并且数学成绩大于 60 的同学
可以看到我这两种写法查询到的结果是一样的,此时两个条件先后熟悉怒不影响最终的结果,但是我们建议把 name like 放在左边,也就是第一种方法为推荐写法,因为第一种写法会先过滤出姓孙的同学,也就是数据只剩下两条了,但是先计算 math > 60 的情况,过滤还剩下五条,效率就比较低。
最左原则就是真毒第一个条件遍历表中的所有记录,再遍历第二个条件进行遍历;所以多个条件再一起联合生效的时候,一般要求哪个条件能过滤掉的数据多(剩下的数据少),则把该条件放到左侧
8. 分页查询
借助 limit 操作来实现
上面说过,select * 这个操作步能在生产环境下使用,同时,上面介绍的除了条件查询之外都是不能直接在生产环境下使用的,条件查找也不保险,此时我们就要借助到分页查询,这是最保险的方式,相当于把查找结果只选取其中的一小部分来作为结果
查找同学信息中总成绩的前三名
查找同学信息中总分最高的 4~6 名
offset 当成下标,从 3 开始后面的 3 个同学
如果 limit 太大,超出记录的数目,返回结果不会有任何错误
如果 offset 过大,得到的结果可能是一个空的结果