类似与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
我们也可以称之为 一类一类,比如说查某个部门工资,这样一类一类的 举例说明
-- 查询职位对应 工资情况
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;
--查询每个部门的总人数,
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;
-- 查询员工的编号,姓名,薪水,按照薪水降序排序
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;
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;