sql作业

一.

创建一个员工表和部门表的交叉连接。

select e.empno, e.ename, d.dname 
from emp e cross join dept d;

二.

使用自然连接,显示入职日期在80年5月1日之后的员工姓名,部门名称,入职日期

select e.ename, d.dname,e.hiredate 
from emp e natural join dept d 
where 
e.hiredate>'1980-05-21';

三.

使用左连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。

select e.ename,m.ename 
from emp e left outer join emp m on(e.mgr = m.empno);

四.

使用右连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来

select e.ename,m.ename 
from emp e right outer join emp m on(e.mgr = m.empno);

五.

显示员工SMITH的姓名,部门名称,直接上级名称

select e.ename 员工姓名 ,d.dname 部门名称 ,m.ename 上级经理
from emp e,emp m,dept d 
where e.mgr = m.empno and e.deptno=d.deptno and e.ename='SMITH';

六.

显示员工姓名,部门名称,工资,工资级别,要求工资级别大于4级。

select e.ename 员工姓名, e.sal 工资 , s.grade 工资等级 ,d.dname  部门
from emp e, salgrade s,dept d 
where  e.deptno=d.deptno and e.sal between s.losal and s.hisal and s.grade>4;

七.

显示员工KING和FORD管理的员工姓名及其经理姓名。

mysql> select e.ename 员工,m.ename 领导
from emp e,emp m 
where m.empno=e.mgr and m.ename in('FORD','KING');

八.

显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加时间比经理早。

select e.ename 员工,e.hiredate 参加工作时间 ,m.ename 经理,m.hiredate 参加工作时间
 from emp e,emp m 
where m.empno=e.mgr and e.hiredate>m.hiredate;

九.

查询入职日期比10部门任意一个员工晚的员工姓名、入职日期,不包括10部门员工

SELECT
    ename,
    HIREDATE
FROM
    emp
WHERE
    HIREDATE > ANY (
        SELECT
            HIREDATE
        FROM
            emp
        WHERE
            DEPTNO = 10
    )
AND DEPTNO <> 10;

十.

查询入职日期比10部门所有员工晚的员工姓名、入职日期,不包括10部门员工

SELECT
    ename,
    HIREDATE
FROM
    emp
WHERE
    HIREDATE > ALL (
        SELECT
            HIREDATE
        FROM
            emp
        WHERE
            DEPTNO = 10
    )
AND DEPTNO <> 10;

十一.

查询职位和10部门任意一个员工职位相同的员工姓名,职位,不包括10部门员

SELECT
    ename,
    JOB
FROM
    emp
WHERE
    JOB = ANY (
        SELECT
            JOB
        FROM
            emp
        WHERE
            DEPTNO = 10
    )
AND DEPTNO <> 10;

十二.

查询部门平均工资在2500元以上的部门名称及平均工资。

SELECT
    d.dname,
    avg(sal)
FROM
    emp e,
    dept d
WHERE
    e.DEPTNO = d.DEPTNO
GROUP BY
    e.DEPTNO
HAVING
    avg(sal) > 2500;

十三.

查询员工岗位中不是以“SA”开头并且平均工资在2500元以上的岗位及平均工资,并按平均工资降序排序。

SELECT
    job,
    avg(sal)
FROM
    emp
WHERE
    JOB NOT LIKE 'SA%'
GROUP BY
    JOB
HAVING
    avg(sal) > 2500
ORDER BY
    avg(sal);

十四.

查询部门人数在2人以上的部门名称、最低工资、最高工资。

SELECT
    d.dname,
    min(e.sal),
    max(e.sal),
    COUNT(*)
FROM
    emp e,
    dept d
WHERE
    d.deptno = e.deptno
GROUP BY
    d.dname
HAVING
    COUNT(*) > 2;

十五.

查询岗位不为SALESMAN,工资和大于等于2500的岗位及每种岗位的工资和。

SELECT
    job,
    sum(sal)
FROM
    emp
WHERE
    job <> 'SALESMAN'
GROUP BY
    job
HAVING
    sum(sal) >= 2500;

十六.

显示经理号码和经理姓名,这个经理所管理员工的最低工资,没有经理的KING也要显示,不包括最低工资小于3000的,按最低工资由高到低排序

SELECT
    e.mgr 经理号码,
    m.ename 经理姓名,
    MIN(e.sal) 管理员工最低工资
FROM
    emp e
LEFT JOIN emp m ON (e.mgr = m.empno)
GROUP BY
    e.mgr,
    m.ename
HAVING
    MIN(e.sal) >= 3000
ORDER BY
    MIN(m.sal) DESC;

SELECT
    mgr
FROM
    emp
GROUP BY
    mgr;

十七.

查询工资高于编号为7782的员工工资,并且和7369号员工从事相同工作的员工的编号、姓名及工资。

SELECT
    e.EMPNO,
    e.ENAME,
    e.SAL
FROM
    emp e
WHERE
    e.SAL > (
        SELECT
            SAL
        FROM
            emp
        WHERE
            EMPNO = 7782
    )
AND (
    SELECT
        JOB
    FROM
        emp
    WHERE
        EMPNO = 7369

十八.

查询工资最高的员工姓名和工资。

SELECT
    ename,
    SAL
FROM
    emp
WHERE
    SAL = (SELECT MAX(SAL) FROM emp);

十九.

查询部门最低工资高于10号部门最低工资的部门的编号、名称及部门最低工资。

SELECT
    e.DEPTNO,
    d.dname,
    MIN(e.SAL)
FROM
    emp e,
    dept d
WHERE
    e.DEPTNO = d.deptno
GROUP BY
    e.DEPTNO,
    d.dname
HAVING
    MIN(e.SAL) > (
        SELECT
            MIN(SAL)
        FROM
            emp
        WHERE
            DEPTNO = 10
        GROUP BY
            DEPTNO
    );

二十.

查询员工工资为其部门最低工资的员工的编号和姓名及工资。

SELECT
    EMPNO,
    ENAME,
    SAL
FROM
    emp
WHERE
    sal = ANY (
        SELECT
            MIN(SAL)
        FROM
            emp
        GROUP BY
            DEPTNO
    );

二十一.

显示经理是KING的员工姓名,工资。

SELECT
    ENAME,
    SAL
FROM
    emp
WHERE
    MGR = (
        SELECT
            EMPNO
        FROM
            emp
        WHERE
            ENAME = 'KING'
    );

二十二.

显示比员工SMITH参加工作时间晚的员工姓名,工资,参加工作时间。

SELECT
    ENAME,
    SAL,
    HIREDATE
FROM
    emp
WHERE
    HIREDATE > ANY (
        SELECT
            HIREDATE
        FROM
            emp
        WHERE
            ENAME = 'SMITH'
    );

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。