MYSQL 数据库基础(三 流程函数的学习,多行函数相当于统计计算等等、group by的使用、goup by衍生出的having、排序关键字order by、升序ASC、降序DESC、模糊查询等)

流程函数

类似与java中的判断情况 的学习

实际应用:

-- 满足条件执行 第一个逗号后面的  否则执行第二个逗号
SELECT ename,sal,IF(sal<2500,'低于2500','高于2500') as'工资状态' from emp

-- ifnull  如果不为空 就是括号里第一个值,如果为空就是第二个值
select ename,sal,comm,sal+IFNULL(comm,0)as'到手工资=工资加津贴comm' from emp

select ename,sal,
case when sal<2500 then  '工资低于2500'
else '工资高于2500'
end  as '工资水平'
from emp

-- 多分枝判断语句
select ename ,sal,
case when sal<2000 then '工资小于2000'
when sal<2500 then '工资小于2500但是大于2000'
ELSE '工资大于2500'
end as '工资水平'
from emp

SELECT ename,max(sal)-- 最大工资人名:
from  emp

-- 最小工资人的全部信息
select *,min(sal)
from emp

-- count 是用于记录查询数据的,可以查看表中有多少记录 -----行
select count(*)
from emp

-- 平均数
SELECT avg(sal)as'平均工资'
from emp

 

多行函数通常可以与group by关键字一起使用,group by的作用就是分组

我们也可以称之为  一类一类,比如说查某个部门工资,这样一类一类的  举例说明

-- 查询职位对应 工资情况 
SELECT job,MIN(sal)
FROM emp
 GROUP BY job

 --查询每种职位的最高薪水,每种职位的人数
select job,max(sal),count(*) from emp group by job;


 --查询每个部门的最高薪水,部门总人数
select job,max(sal),count(*) from emp where deptno is not null group by deptno;

having 是搭配group by来使用了,他和where的使用方法一致,但是此时,

where是使用分组前的 列名来进行条件判断,where中只能写字段名

having 是可以使用group by之后的数据进行查询

--查询每个部门的总人数,
select  deptno,count(*) from emp where deptno is not null group by deptno;

--查询每个部门的总人数多于5人的部门
select  deptno,count(*) from emp where deptno is not null group by deptno
having count(*)>5;
--  where 是对基本表中符合条件的数据进行分组  ,where之后只能放字段(列名)
 --  having是对分组查询之后的“虚拟表”进行的条件限定,
    -- having 之后可以放分组函数,也可以放字段(列名)

select  deptno,count(*) from emp  group by deptno
having deptno is not null and count(*) >5;

最后一个关键字叫order by ,排序 ,对查询结果进行排序,升序asc和降序 desc

-- 查询员工的编号,姓名,薪水,按照薪水降序排序
select empno,ename,sal from emp ORDER BY sal desc;

-- 查询每种职位的平均薪水,按照薪水降序
select job,avg(sal) from emp group by job order by avg(sal) desc;
-- 查询每个部门的最高薪水,排序薪水小于3000的部门,按照薪水降序

select deptno, max(sal)from emp where deptno is not NULL
group by deptno having max(sal)>=3000 order by max(sal) desc;

-- 查询员工的编号,姓名,入职时间,入职时间升序
select empno,ename,hiredate from emp order by hiredate asc;

单表查询的语法为:
select ... from ..[where]....[group by]..[having] ...[order by asc/desc];

执行顺序
  from  where  group by  select   having   order by  
 

模糊查询以及一些常用的查询方式

like,between ...and...   in('  ','  ')
 

like只用于字符型
select * from emp where ename='SMITH'  -- 等值查询

-- 模糊查询,查询的结果不确定,比如说,查询姓名中含有M的员工信息
-- 需要使用通配符   %  -->代表0个或多个字符   _  -->代表一个字符
select * from emp  where ename  like '%M%';

-- 查询姓名中第一个字符是M的员工信息
select * from emp where ename like 'M%';

-- 查询姓名中第三个字符是M的员工信息
select * from emp where ename like '__M%';

还有between...and 相当于 >= and <=
--查询薪水在2000到5000之间的员工信息
select * from emp where sal>=2000 and sal<=5000 order by sal ;  -- and是逻辑运算符 “与”
select * from emp where sal>=2000 && sal<=5000 order by sal ;-- MySQL可以,oracle不可以
select * from emp where sal between 2000 and 5000 order by sal;
select * from emp where sal between 5000 and 2000 order by sal; -- 没有查到数据

--查询1980年1月1日到1985年12月31日入职的员工信息
select * from emp where hiredate>='1980-1-1' and hiredate<='1985-12-31' order by hiredate;
select * from emp where hiredate between '1980-1-1' and '1985-12-31' order by hiredate;

-- in,在指定的集合中选择其一即可,相当于or   或者
-- 查询 职位是职员,销售或者是分析师的员工信息
select * from emp where job='CLERK' OR JOB='SALESMAN' OR JOB='ANALYST' order by job;
select * from emp where job in('CLERK','SALESMAN','ANALYST')order by job;

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值