SQL-基础到高级练习

– (1) 查询10号部门的所有员工信息。
select * from emp where deptno =10
– (2) 查询所有职位编号为“SAlESMAN”的员工的员工号、员工名和部门号。
select empno,ename,deptno from emp where job =’SAlESMAN’
– (3) 查询每个员工的员工号、工资、奖金以及工资与奖金的和。
select empno,sal,comm ,sal+ifnull(comm,0) from emp;
– (4) 查询10号部门中职位编号为“ANALYST”和30号部门中职位编号为“clerk”的员工的信息。
select * from emp where (deptno=10 and job =’ANALYST’) or (deptno=30 and job =’clerk’ )
– (5) 查询所有职位名称不是“manager”且工资大于或等于2000的员工的详细信息。

      select * from emp where job !='manager' and sal>=2000 

– (6) 查询有奖金的员工的不同职位和名称。
select job ,ename,comm from emp where ifnull(comm,0)!=0;

  select job ,ename,comm from emp where comm is not null;

– 查询没有奖金或奖金低于100元的员工信息。
select * from emp where comm is null or comm <100;
– 7) 查询员工名()中不包含字母“S”的员工。
select * from emp where ename not like ‘%S%’;
– (8) 查询员工的姓名和入职日期,并按入职日期从先到后进行排序。
select ename,hiredate from emp order by hiredate asc;

– (9) 显示所有员工的姓名、职位、工资和奖金,按职位降序排序,
– 若职位相同则按工资升序排序。

select   ename,job,sal,comm from emp order by job desc ,sal asc;

– (10) 查询所有员工的姓名及其直接上级的姓名。
select y.ename 员工名, l.ename 领导名 from emp y,emp l
where y.mgr = l.empno;
– 查询各个部门号、部门名称、部门所在地以及部门领导的姓名 MANAGER。
select * from emp order by deptno;
select * from dept ;
select p.deptno,dname,loc,ename
from emp p,dept d
where p.deptno = d.deptno
and job =’manager’;
– (11) 查询所有部门及其员工信息,包括那些没有员工的部门
select * from emp p RIGHT join dept d on p.deptno = d.deptno
– (12) 查询所有员工及其部门信息,包括那些还不属于任何部门的员工。
select * from emp p left join dept d on p.deptno = d.deptno

– (13) 查询所有员工的员工号、员工名、部门名称、职位名称、工资和奖金
select empno,ename,job,sal,comm ,dname from emp p left join dept d on p.deptno = d.deptno
– (14) 查询至少有一个员工的部门信息。
select * from dept;
select * from emp;

        select * from dept d 
        where d.deptno in (select DISTINCT e.deptno from emp e);
  -- (15)   查询工资比7902号员工工资高的所有员工信息
    select sal from emp where empno = '7902';
    select * from emp where sal > (select sal from emp where empno = '7902')
    -- (16) 查询工资高于公司平均工资的所有员工信息。
 select avg(sal) from emp ;  -- max min sum count avg 
  select * from emp where sal > (select avg(sal) from emp )
       -- (17)  查询各个部门中不同职位的最高工资
      select max(sal),job,deptno from emp group by deptno ,job;
    -- (18) 查询各个部门的人数及平均工资
         select count(*),avg(sal) from emp group by deptno;
    -- (19) 统计各个职位的员工人数与平均工资。
        select count(*),avg(sal) ,job from emp group by job;
   -- (20)  统计每个部门中各职位的人数与平均工资。
           select count(*),avg(sal) ,job from emp group by deptno,job;
       -- (21)  查询平均工资低于2000元的部门及其员工信息。
            select * from emp where deptno in (
            select deptno from  emp group by deptno 
            having avg(sal) <2000  )
       -- 查询在销售部工作的员工的姓名信息。
          select * from emp where deptno 
           =  (select deptno from dept where dname ='SALES');

 -- (22)    查询与7902号员工从事相同工作的所有员工信息
         select * from emp where job = (
               select job from emp where empno = 7902)
                    and empno !=7902;
 -- (23)    查询工资高于7902号部门中所有员工的员工姓名和工资。

                select * from emp 
                where sal >(select max(sal) from emp 
                where deptno =(select deptno from emp where empno = 7902)
                )
-- (24) 查询每个部门中的员工数量、平均工资
-- 五个聚合函数 sum count max min avg  5遍
             select deptno,count(*),avg(sal) from emp group by deptno; 
      -- (25)   查询人数最多的部门信息。
        select deptno,count(*) from emp group by deptno order by count(*) desc limit 0,1; 
   -- (26)  查询所有员工中工资排序在5~10名之间的员工信息
        select * from emp order by sal limit 4,5

– (27)查询员工信息,要求以首字母大写的方式显示所有员工名。
select concat (UPPER(substring(ename,1,1)) , LOWER(substring(ename,2,length(ename)-1))), ename from emp;
– UPPER 转大写 lower 转小写
– (28) 查询员工名 正好为6个字符的员工的信息。
select * from emp where ename like ‘__
– (29) 查询员工名(first_name)的第2个字母为“M”的员工信息。
select * from emp where ename like ‘_M%’
– (30) 查询所有员工名,如果包含字母“s”,则用“S”替换。
select ename,REPLACE(ename,’S’,’XX’) from emp where ename like ‘%s%’;
– (31) 查询在2月份入职的所有员工信息。
select * from emp where MONTHNAME(hiredate)= ‘February’;
– 找出每个月倒数第三天受雇的员工
select LAST_DAY(hiredate) from emp;
– 查询和部门10的工作相同的工作的雇员的名字,岗位,工资,部门号
select ename,job ,sal ,deptno
from emp
where job in (select job from emp where deptno = 10)
;

– 找出每个月倒数第三天受雇的员工(如:2009-5-29)
select * from emp where day(hiredate) = day(LAST_DAY(hiredate)) - 2
– 找出25年前雇的员工
select year(now()) - year(hiredate) from emp where year(now()) - year(hiredate) >=25
– 选择工资大于所有 JOB = ‘SALESMAN’的员工的工资的员工的 name, job, salary
select ename,job,sal from emp
where sal> all(

select sal from emp where job = 'SALESMAN')

– 所有员工名字前加上Dear ,并且名字首字母大写
select concat(‘Dear’,UPPER(SUBSTR(ename,1,1)), lower(SUBSTR(ename,2,length(ename)-1))) from emp;
– 返回比本部门平均工资高的员工的 last_name, department_id, salary 及平均工资
select deptno,avg(sal) from emp group by deptno; – 子查询 将查询结果作为表
select * from emp order by deptno;
select ename,p.deptno,sal,d.asal from emp p ,(select deptno,avg(sal) asal from emp group by deptno) d
where p.deptno = d.deptno
and p.sal > d.asal;

– 查询员工的 empno,ename, 要求按照员工的 dname 排序
select * from dept order by dname ;
– case when then else end : 相当于 多重if.
– – deptno=1的loc显示中国 其他显示外国
select loc,(
CASE
when deptno=1 then ‘中国’
when deptno=10 then ‘日本’
else ‘外国’
END
) from dept;

 select empno,ename,d.dname from emp p, (select * from dept order by dname) d
    where p.deptno = d.deptno;

– – sal <2K 发3倍 2-3之间 1.3倍 3K以上原本发 ENAME,sal
select ename,sal,(
CASE
when sal<=2000 then sal*3
when sal>2000 and sal<=3000 then sal*1.3
else sal
END
)当月工资
from emp ;

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值