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:

MySql之select的具体用法示例_sum 

2、去重查询

用distinct关键字, 如果结果中有完全相同的行,就去除重复行

eg:

MySql之select的具体用法示例_sum _02

3、select语句中进行运算

eg:查询学生总成绩

select id,name,(chinese+math+english) from student;

MySql之select的具体用法示例_group by _03

4、起别名:as

eg:查询所有学生总成绩并起别名‘总成绩’。

MySql之select的具体用法示例_sum _04


eg:查询所有姓李同学的总成绩。

MySql之select的具体用法示例_sum _05


eg:将所有姓唐的学生总成绩增加60%。

MySql之select的具体用法示例_group by _06

5、where查询过滤

在where子句中有很多经常使用的运算符,如下:

MySql之select的具体用法示例_order  by  _07


我们对其中几个进行举例应用,如下:

(1)查询所有英语成绩大于90的同学成绩:

MySql之select的具体用法示例_sum _08


(2)查询所有总分大于200分的同学

MySql之select的具体用法示例_升序_09


由图可知,并没有查找出来,这是因为

where子句后不能用别名

因为数据库中先执行where子句,再执行select子句。

如下:

MySql之select的具体用法示例_order  by  _10


(3)查询姓李并且id大于6的学生信息

MySql之select的具体用法示例_升序_11


(4)查询英语成绩大于语文成绩的同学

MySql之select的具体用法示例_order  by  _12


(5)查询所有总分大于200并且数学成绩小于语文成绩的姓刘的学生信息

MySql之select的具体用法示例_升序_13


(6)查询所有英语成绩在80到90分的同学

方法一:

MySql之select的具体用法示例_order  by  _14


方法二:

MySql之select的具体用法示例_group by _15

注意:between是闭区间

(7)查询数学成绩为89,90,91的同学信息

or:

MySql之select的具体用法示例_max/min        _16


in:

MySql之select的具体用法示例_升序_17

6、order by排序语句

asc升序(默认),desc降序

order by 子句应该位于select语句的结尾

eg:对数学成绩进行排序

默认升序:

MySql之select的具体用法示例_order  by  _18


降序:

MySql之select的具体用法示例_group by _19


eg:对所有姓李的学生按成绩进行倒序排序

MySql之select的具体用法示例_group by _20


eg:对总分进行从高到低输出

MySql之select的具体用法示例_升序_21

7、常用函数

(1)count()

count(*)统计null值 count(列名)排除null值

eg :统计当前student表中一共有多少学生

MySql之select的具体用法示例_升序_22


我们这里也可以起别名:

MySql之select的具体用法示例_升序_23


PS:为了测试count(*)与coun(列名)的区别,我们这里插入一个数学成绩为空的学生信息。

MySql之select的具体用法示例_max/min        _24


看查询结果:

MySql之select的具体用法示例_group by _25


(2)sum()

eg:统计一个班数学总成绩

MySql之select的具体用法示例_max/min        _26

(3)平均值:avg()

求平均值算不算成绩为空的人呢?

我们可以用如下方法:

MySql之select的具体用法示例_max/min        _27


我们看一下avg函数的结果:

MySql之select的具体用法示例_升序_28


所以avg是去除null后求平均数, 只对数值型列起作用

(4)max()/min()

eg:求一个班级最高分和最低分的学生信息

MySql之select的具体用法示例_max/min        _29

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;