day 35 mysql ②

原文链接: https://blog.csdn.net/fightingXia/article/details/82726331

##sql语句中的表达式

在做查找,修改,删除操作时往往需要where条件,在条件语句中需要有大于,小于,and,or等运算符,带有运算符的sql语句称为表达式。

表达式分为算法表达式和逻辑表达式。具体如下:

注:in后面的元素不能超过1000个。当元素太多时in的效率会很低,可以使用exist语句替代。
 

一,like的详细使用
like是模糊查询的关键词。使用情况有如下三种:

--必须以张三开头
select * from person where name like '张三%';
--必须以张三结尾
select * from person where name like '%张三';
--必须包含张三,且张与三紧挨着
select * from person where name like '%张三%';
--必须包含张三,且张在三的前面
select * from person where name like '%张%三%';
--必须以张三开头,且只能包含三个字
select * from person where name like '张三_';
 

##排序
排序的关键词是order by。使用示例如下:

select * from person order by age
得到结果样式如下:

此时我们看出,以age排序后,age依次增大。

默认的排序是升序。降叙排列使用关键词desc,如下:

select * from person order by age desc
结果样式如下:

注:升序排序也可以加关键词asc,是ascending的缩写,但关键词asc常常省略不写。降叙desc是Descending单词的缩写。

扫描二维码关注公众号,回复: 7583687 查看本文章

注:排序可以同时指定两个关键词,如下:

select * from person order by age desc,name asc
说明:

两个关键词以第一个为准,第一个字段相同时则按第二个排序。
不同字段需要分别指定升序还是降序。


##分页
分页使用关键词limit。示例如下:

select * from person limit 1,2
结果如下:

说明:

1的意思是从1开始,但不包括1。2的意思是取两条。所以此时取出的是第2和第3条数据。
如果limit2,3则取出的是第3,第4和第5条。
第一个数可以省略。limit 2 表示从0开始,取出两条,即第1和第2条。
注:分页与排序同时使用时,必须先排序,后分页,如下:

select * from person order by age limit 1,2


##聚合函数
sql语句中提供了一些聚合函数,如下:sum()求和,count()统计数量,max()求最大值,avg()求平均值.具体使用如下:

1,sum()求和

--一般使用
select sum(age) from person ;
--添加where条件
select sum(age) from person WHERE id > 2;
注:sum的意思是求和,即通过select age  from person语句得到的所有age相加之和。sum方法和可以这么使用:

select sum(1) from person
注:这个意思是使用select 1 from person语句获取的所有数据相加,此时person有4条数据,sum(1)就是4,这种方式可以统计数量。

2,count()统计

--
select count(*) from person
--
select count(1) from person
--
select count('a') from person
--
select count(age) from person
--使用where条件
select count(*) from person where id >2
注:count的意思是统计数据,即是通过select * from person得到的数据的个数。所以count的小括号内可以放任意值。

注:统计数量是最好用count(1)。

3,max()获取最大值

select max(age) from person 
注:max的意思与sum类似,获取所有age,然后取最大值。sql语句后台同样可以添加where条件语句。

4,min()获取最小值

select min(age) from person 
5,avg()获取平均值

select avg(age) from person 


##分组
一,基本使用
分组使用关键词order by

原表数据如下:

分组sql语句如下:

select age from person group by age
查询结果如下:

说明:原表中有两个age是16,通过age分组只得到一个16.

注:group by后面可以跟多个字段,如下:

select name,age from person group by name,age
说明:此时name和age同时相同时才会被分为一组。

二,组合 自动去重
分组的作用:分组常常与聚合函数一起使用,比如获取各个年龄的人数,如下:

select age ,count(1) from person group by age
sql执行结果如下:

说明:此时可以看到各个年龄的人数。

三,分组统计
需求:统计表中年龄的个数,即有几个年龄数。sql如下:

select count(1) from (select age from person group by age) temp
这是一种多表操作,先使用select age from person group by age得到一个临时表,然后再查数量。

四,分组获取最大值
需求:统计各个年龄的最大id。sql如下:

select max(id),age from person group by age
 

五,分组最易范错误
如下面语句:

select name,age from person group by age
执行会报下面异常:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xia.person.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

说明:异常意思是说name不是分组的列。表中guoxiang,zhaomin的age都是16,所以不可能获取到一个name,但可以这么用:

select max(name),age from person group by age


六,having的使用
where不能与group by一起使用,所以此时出现了having。用法示例如下:

--
select age from person group by age having age >2
--
select count(1), age from person group by age having count(1) >1
--
select age from person group by age having count(1) >1
说明:having后面并不是所有字段都可以作为判断条件,必须是可以放在select 和from之间的字段才能作为判断条件。
 

猜你喜欢

转载自blog.csdn.net/gaosong0623/article/details/102408211