天天看点

【Mysql】详解Mysql单表查询

文章目录

        • 简单查询
        • 带in关键字的查询
        • 带between and的范围查询
        • 带like的字符串匹配查询
        • 空值查询
        • 带and的多条件查询
        • 带or的多条件查询
        • DISTINCT查询结果不重复
        • 对查询结果进行排序
        • 分组查询
        • 用limit限制查询结果的数量
        • 集合查询语句

简单查询

查询student表中的所有行和所有列

select * 
from student;
           

查询student表中sex为women的name列和score列。

select name,score 	//确定列
from student 		//确定表
where sex='woman';	//查询条件
           

查询student表中score大于80的所有行。

select *
from student 	//确定表
where score>80;	//查询条件
           

带in关键字的查询

查询student表中id为1001,1002,1003的行

select *
from student 
where id 
in(1001,1002,1003);
           

查询student表中id不为1001,1002,1003的行

select *
from student 
where id 
not in(1001,1002,1003);
           
【Mysql】详解Mysql单表查询

带between and的范围查询

查询student表中id在1001到1005范围之间的所有行

select *
from student 
where id 
between 1001 and 1005;
           
【Mysql】详解Mysql单表查询

查询student表中id不在1001到1005范围之间的所有行

select *
from student 
where id 
not between 1001 and 1005;
           

带like的字符串匹配查询

【1】%通配符:可以匹配任意长度的字符串

查询student表中name中姓张的人的信息

select *
from student 
where name like "张%";
           

查询student表中name中有昭字的人的信息

select *
from student 
where name like "%昭%";
           

查询student表中name中有姓J以F字结束的人的信息

select *
from student 
where name like "J%F";
           
【Mysql】详解Mysql单表查询

查找student表中name中有%的信息

select *
from student 
where name like "%\%%";
//其中前后两个%代表通配符,中间的\%将%转义成普通字符
           
【Mysql】详解Mysql单表查询

【2】_通配符:一个_只能匹配一个字符

查询student表中name中名字为两个字姓张的人的信息

select *
from student 
where name like "张_";
           

查询student表中name中名字为三个字且第二个字为W的人的信息

select *
from student 
where name like "_W_";
           
【Mysql】详解Mysql单表查询

空值查询

查询student表中score字段为空的记录

select *
from student 
where score is null;
           

查询student表中score字段不为空的记录

select *
from student 
where score is not null;
           

带and的多条件查询

查询student表中sex为women且score大于80的记录

select * 
from student 
where sex='women' 
and socre >80;
           

查询student表中sex为man且score大于80且age大于20的记录

select * 
from student
where sex='man' 
and score>80 
and age>20;
           
【Mysql】详解Mysql单表查询

带or的多条件查询

只要满足条件中的一个这条记录就会被查出来

查询student表中age大于20或者score大于80的记录

select * 
from student 
where age>20 
or score >80;
           
【Mysql】详解Mysql单表查询

or和and可以混合使用,and的优先级比or的优先级高

查询student表中age大于20或者score大于80且sex为man的记录

select * 
from student 
where age>20 
or score >80 
and sex='man';
           

相当于

select * 
from student 
where age>20 
or (score >80 and sex='man');
           
【Mysql】详解Mysql单表查询

DISTINCT查询结果不重复

查询student表,消除id字段中重复的记录。

select distinct id 
from student;
           

对查询结果进行排序

查询student表中sex为man的记录 并按score的降序排列。

select * 
from student 
where sex='man' 
order by score DESC;
           

查询student表中sex为man的记录 并按score的升序排列。

select * 
from student 
where sex='man' 
order by score ASC;
           
【Mysql】详解Mysql单表查询

注意:如果不指定ASC或者DESC的话,默认是升序排列。

分组查询

group by关键字可以将查询结果按某个字段或者多个字段进行分组,字段中值相同的为一组。

group by通常与集合函数在一起使用。

集合函数包括:count(), sum(), avg(), max(), min()(下文马上讲到)

【1】单独使用group by查询结果只显示结果分组的一条记录。

select *
from student 
group by sex;
           

查询结果只显示两条记录

这两条记录的sex值分别为一个男的和一个女的。

这说明group by单独使用的时候 只会显示每个分组的一条记录,意义不大

因此,group by 函数只有和集合函数结合起来使用才能发挥出来作用。

【2】group by和group_concat()结合使用

select sex,
group_concat(name) 
from student 
group by sex;
           
【Mysql】详解Mysql单表查询

结果显示,查询结果分为了两组,sex值为 ‘女’ 的分为了一组,值为 ‘男’ 的分为了一组。而且每一组中所有人的名字都被列了出来,达到了我们想要的结果。

【3】group by和having子句的使用

having子句通常与group by 子句一起使用,在完成对分组结果统计后,可以使用having子句对分组的结果做进一步的筛选。如果不使用group by 子句,having子句的功能与where子句一样。

having子句和where子句的相似之处就是都定义搜索条件,但是和where子句不同,having子句与组有关,而where子句与单个的行有关。

【Mysql】详解Mysql单表查询

【4】group by 和集合函数一起使用

select sex,
count(sex) 
from student 
group by sex;
           
【Mysql】详解Mysql单表查询
select sex,
sum(score) 
from student 
group by sex;
           
【Mysql】详解Mysql单表查询
select 
id,
avg(score) 
from student 
group by name;
           
【Mysql】详解Mysql单表查询

用limit限制查询结果的数量

只显示查询的五条记录

select * 
from student 
limit 5;
           
【Mysql】详解Mysql单表查询

设置初始查询位置和要查询的条数.

select * 
from student 
limit 0,6;
           

从第0条记录开始查询六条。

【Mysql】详解Mysql单表查询
select * 
from student 
limit 2,2;
           

从第2条记录开始查询两条。

【Mysql】详解Mysql单表查询

集合查询语句

集合函数包括:

count():求参数的个数的总和

sum():求参数的值的总和

avg():求参数的值的平均值

max():求参数的值的最大值

min():求参数的值的最小值

select 
count(name) 
from student;
           
【Mysql】详解Mysql单表查询
select 
sum(score) 
from student;
           
【Mysql】详解Mysql单表查询
select 
avg(score) 
from student;
           
【Mysql】详解Mysql单表查询
select id,
name,
max(score) 
from student;
           
【Mysql】详解Mysql单表查询
select id,
name,
min(score) 
from student;
           
【Mysql】详解Mysql单表查询

继续阅读