【MySQL数据库】SQL 查询封神之路:步步拆解核心操作,手把手帮你解锁高阶2
二. Retrieve简单查询
关于查询是MySQL中最为常用的一个操作,也是操作最多的一个板块,下面将对各种查询方式进行详细的介绍。
2.1 查询基础语法
- 语法:`select 查询的列名称/表达式 from 表名*。
通过select来对表中的数据进行查询,指定出要进行查询的列名称/表达式,以及哪一个表中进行查询:
如下图中,我们可以对指定的列进行查询,也可以对一些列进行运算后再进行查询。

上图中的*标识全列查询;
对于数据量很大的表,一般是不建议进行全列查询的:因为查询的列越多,意味着需要的传输数据量就越大,数据在网络中存传输的时间久,并且数据量很大我们在进行查看的时候也很不方便。
补充:在进行筛选的时候有时候我们希望进行去重操作,可以在select后面加上distinct来实现。
因此对于大文本数据,我们建议进行筛选查找,下面将详细介绍一些筛选的方法。
2.2 where子句
where子句:增加筛选条件,决定从表中拿出那些行。
where子句中有很多种判断条件,这个条件与编程语言中的if语句类似,下面进行一个详细介绍:
比较运算符:

有几个地方是需要特殊注意的:
- 在
MySQL中等于就是=,而不是==; <=>与<>的区别在于:<>能够对空NULL进行比较,而<=>不能;
2.3 结果排序
- 在
MySQL中有时候,我们希望对筛选出来的数据进行排序,此时就可以使用order by 列名字/表达式进行排序。
其中asc表示对结果进行升序排列,而desc表示对结果进行降序排列。
例如:以下对60分以上的英语成绩进行升序排列:

- 在使用
select时,我们经常会使用表达式来进行筛选,但是如果直接使用表达式进行输出,其表示的意思并不直观,比如上面的math+chinese+english,我们更希望为其起一个别名。 - 在
MySQL中,我们可以在一个表达式后面使用as 别名来进行起别名操作。
比如,我们想要输出表中总成绩>200分的成员姓名,以及总成绩:

答案是不能的,这就与select的执行顺序有关系了,下面介绍以下select的执行顺序,
以select name , math+chinese+english as total from exam_result where math+chinese+english > 200为例:
先通过from exam_result确定要进行筛选的表;
在MySQL中每一条数据是按行进行存放的,所以将数据从数据库磁盘加载到内存上时,就应该先进行判断,该行时候满足条件,如果不满足迅速释放,防止其占用内存空间;因此此时要先进行where math+chinese+english行筛选,而此时并没有进行重命名操作,因此不能使用别名;
最后再将加载到内存中满足条件的行进行列筛选。
答案是可以的,因为order by是对已经处理好的最终数据进行排序的,在这之前就已经定义了别名。
2.4 筛选分页结果
在进行筛选的时候,有时我们并不需要整张表的数据,而是需要一些特定范围或行数的数据,比如我们希望知道一个成绩单中第一名的信息,此时将整个表打印出来旧完全没有必要了。
语法:
limit n: n表示要筛选的行数;
limit a , b :进行范围筛选,筛选出从a开始步长为b的数据,即[a , a + b]行的数据,注意a的起始下标是0.、

2.5 总结select顺序
在where子句部分我们谈到关于select中进行筛选的顺序问题,此处对select中筛选顺序做一个总结:
执行from 表名,筛选确定使用哪一个表;
指定where子句,筛选出满足条件的行;
select筛选出要进行显示的列;
order by对准备好的数据进行排序;
limit对要进行显示的数据进行筛选。