mysql多表的CRUD(2)

来源:互联网 发布:三角洲特种部队mac版 编辑:程序博客网 时间:2024/05/18 06:38
-- 查询部门表的所有信息(字段包括:DEPTNO INT PRIMARY KEY -- 部门编号 DNAME VARCHAR(14)-- 部门名称 LOC VARCHAR(13)-- 部门地址)
select * from dept;
-- 查询所有的员工信息(字段 (
        EMPNO INT  PRIMARY KEY,  -- 员工编号
    ENAME VARCHAR(10),  -- 员工名称
    JOB VARCHAR(9), -- 工作
    MGR DOUBLE, -- 直属领导编号
    HIREDATE DATE,  -- 入职时间
    SAL DOUBLE, -- 工资
    COMM DOUBLE, -- 奖金
    DEPTNO INT, -- 部门号
    FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO))
select * from emp;
-- 查询所有的薪资信息(字段包括 :GRADE INT,  -- 工资等级  LOSAL DOUBLE, -- 最低工资 HISAL DOUBLE  -- 最高工资)
select * from salgrade;
-- 1.返回拥有员工的部门名、部门号。(dept,emp)    
select distinct dept.DNAME,dept.DEPTNO from dept ,emp where emp.DEPTNO=dept.DEPTNO;

-- 2.工资多于smith的员工信息。
select SAL from emp where ENAME='SMITH';
select * from emp where SAL>(select SAL from emp where ENAME='SMITH');

-- 3.返回员工和其所属领导的姓名。(自连接)
select e.ENAME,l.ENAME from emp e,emp l where e.MGR=l.EMPNO;

-- 4.返回雇员的雇佣日期早于其领导雇佣日期的员工及其领导姓名。(在日期类型可以直接比较)
select e.ENAME ,d.ENAME from emp e,emp d where e.MGR=d.EMPNO AND e.HIREDATE<d.HIREDATE;
-- 5.返回员工姓名及其所在的部门名称。
select emp.ENAME,dept.DNAME from emp,dept where emp.DEPTNO=dept.DEPTNO;
select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;
-- 6.返回从事clerk工作的员工姓名和所在部门名称
select e.ENAME,d.DNAME from emp e,dept d where e.JOB='clerk' and e.DEPTNO=d.DEPTNO;
-- 7.返回部门号及其本部门的最低工资。
select DEPTNO ,min(sal) from emp GROUP BY DEPTNO;
-- 8.返回销售部(sales)所有员工的姓名。
select DEPTNO from dept where DNAME='sales';
select e.ENAME from emp e where e.DEPTNO=30;
select e.ENAME from emp e where e.DEPTNO=(select DEPTNO from dept where DNAME='sales');
-- 9.返回工资多于平均工资的员工。
select avg(sal) from emp;
select * from emp where SAL>(select avg(sal) from emp);
-- 10.返回与SCOTT从事相同工作的员工。
select job from emp where ENAME='SCOTT';
select * from emp where job=(select job from emp where ENAME='SCOTT') and ENAME <> 'SCOTT';
-- 11.返回与30部门员工工资相同的员工姓名与工资。
select sal from emp where DEPTNO=30;
select ENAME,sal from emp where sal in (select sal from emp where DEPTNO=30);
-- 12.返回工资高于30部门所有员工工资水平的员工信息。
select * from emp where sal>(select max(sal) from emp where DEPTNO=30);
select * from emp where sal >all(select sal from emp where deptno=30);
-- 13.返回部门号、部门名、部门所在位置及其每个部门的员工总数。

select DEPTNO,count(*) from emp GROUP BY DEPTNO;
select d.* , tmp.total from dept d,(select DEPTNO,count(*) total from emp GROUP BY DEPTNO) tmp where d.DEPTNO=tmp.DEPTNO;
select d.*,tmp.total from dept d left join (select DEPTNO,count(*) total from emp GROUP BY DEPTNO) tmp on d.DEPTNO=tmp.DEPTNO;
-- 14.返回员工的姓名、所在部门名及其工资。(使用的是内连接两种方式)
select e.ename,d.dname,e.sal from emp e,dept d where e.deptno=d.deptno;
select e.ENAME,d.DNAME ,e.sal from emp e  join dept d on e.DEPTNO=d.DEPTNO;

-- 15.返回员工的详细信息。(包括部门名)
select e.* ,d.dname from emp e,dept d where e.DEPTNO=d.DEPTNO;
select e.*,d.dname from emp e join dept d on e.deptno=d.deptno;

-- 16.返回员工工作及其从事此工作的最低工资。
select job,min(sal) from emp group by job;
-- 17.返回不同部门经理的最低工资。
select DEPTNO,MIN(sal) from emp where JOB='manager' GROUP BY DEPTNO;
-- 18.计算出员工的年薪,并且以年薪排序。
select ename,sal*12+ifnull(comm,0) yearsal from emp order by yearsal;
-- 19.返回工资处于第四级别的员工的姓名。
select e.ENAME from emp e,(select * from salgrade WHERE GRADE=4) tmp where e.SAL BETWEEN tmp.losal and tmp.hisal;
select e.ENAME from emp e,salgrade s where s.GRADE=4 and e.sal between s.losal and s.hisal;
-- 20.返回工资为二等级的职员名字、部门所在地、和二等级的最低工资和最高工资
select e.ename,d.loc,s.losal,s.hisal from emp e,salgrade s,dept d where s.grade=2 and  e.deptno=d.deptno and e.sal between s.losal and s.hisal  ;

select e.ename,d.loc,s.losal,s.hisal from emp e join salgrade s on s.grade=2 and e.sal between s.losal and s.hisal join dept d on e.deptno = d.deptno;

-- 21.工资等级多于smith的员工信息。
select s.HISAL from emp e,salgrade s where e.ENAME='smith' and e.SAL BETWEEN s.LOSAL and s.HISAL;
select * from emp where sal>(select s.HISAL from emp e,salgrade s where e.ENAME='smith' and e.SAL BETWEEN s.LOSAL and s.HISAL);