MySql之select的具体用法示例

select

select用于查询,其功能很多,我们一起来了解一下它子句及函数的用法。
建一张表用于我们测试:
create table student (
id int not null default 1,
name varchar(20) not null default ’ ‘,
chinese float not null default 0.0 comment ‘语文成绩’,
english float not null default 0.0 comment ‘英语成绩’,
);
插入如下数据:
insert into student values(1, ‘李明’, 89,78, 90);
insert into student values(2, ‘刘红’, 67,89, 56);
insert into student values(3, ‘胡刚’, 87,78, 77);
insert into student values(4, ‘唐僧’, 88,98, 90);
insert into student values(5, ‘悟空’, 82,84, 67);
insert into student values(6, ‘张三’, 55,85, 45);
insert into student values(7, ‘李四’, 75,65, 30);

1、指定查询列

eg:
这里写图片描述

2、去重查询

用distinct关键字, 如果结果中有完全相同的行,就去除重复行
eg:
这里写图片描述

3、select语句中进行运算

eg:查询学生总成绩
select id,name,(chinese+math+english) from student;
这里写图片描述

4、起别名:as

eg:查询所有学生总成绩并起别名‘总成绩’。
这里写图片描述
eg:查询所有姓李同学的总成绩。
这里写图片描述
eg:将所有姓唐的学生总成绩增加60%。
这里写图片描述

5、where查询过滤

在where子句中有很多经常使用的运算符,如下:
这里写图片描述
我们对其中几个进行举例应用,如下:
(1)查询所有英语成绩大于90的同学成绩:
这里写图片描述
(2)查询所有总分大于200分的同学
这里写图片描述
由图可知,并没有查找出来,这是因为
where子句后不能用别名
因为数据库中先执行where子句,再执行select子句。
如下:
这里写图片描述
(3)查询姓李并且id大于6的学生信息
这里写图片描述
(4)查询英语成绩大于语文成绩的同学
这里写图片描述
(5)查询所有总分大于200并且数学成绩小于语文成绩的姓刘的学生信息
这里写图片描述
(6)查询所有英语成绩在80到90分的同学
方法一:
这里写图片描述
方法二:
这里写图片描述

注意:between是闭区间
(7)查询数学成绩为89,90,91的同学信息
or:
这里写图片描述
in:
这里写图片描述

6、order by排序语句

asc升序(默认),desc降序
order by 子句应该位于select语句的结尾
eg:对数学成绩进行排序
默认升序:
这里写图片描述
降序:
这里写图片描述
eg:对所有姓李的学生按成绩进行倒序排序
这里写图片描述
eg:对总分进行从高到低输出
这里写图片描述

7、常用函数

(1)count()
count(*)统计null值 count(列名)排除null值
eg :统计当前student表中一共有多少学生
这里写图片描述
我们这里也可以起别名:
这里写图片描述
PS:为了测试count(*)与coun(列名)的区别,我们这里插入一个数学成绩为空的学生信息。
这里写图片描述
看查询结果:
这里写图片描述
(2)sum()
eg:统计一个班数学总成绩
这里写图片描述

(3)平均值:avg()
求平均值算不算成绩为空的人呢?
我们可以用如下方法:
这里写图片描述
我们看一下avg函数的结果:
这里写图片描述
所以avg是去除null后求平均数, 只对数值型列起作用
(4)max()/min()
eg:求一个班级最高分和最低分的学生信息
这里写图片描述

8、group by 子句的使用

假设有一个职工信息表,
EMP:表名 ;部门:depton;sal:工资;job:工作
我们设想:
(1)显示每个部门的平均工资和最高工资
select deptno,avg(sal),max(sal) from EMP group by deptno;
(2)显示每个部门的每种岗位的平均工资和最低工资
select avg(sal),min(sal),job, deptno from EMP group by deptno, job;
补充:首先按照deptno分组,然后各组再按照job进行分组。
(3)显示平均工资低于2000的部门和它的平均工资
解题思路:
1. 统计各个部门的平均工资
select avg(sal) from EMP group by deptno
2. having往往和group by配合使用,对group by结果进行过滤
select avg(sal) as myavg from EMP group by deptno having myavg<2000;

猜你喜欢

转载自blog.csdn.net/baidu_37964071/article/details/80463290