MySQL【3】多表查询(练习2)

查看所有数据库、使用指定数据库、查看所有表

SHOW DATABASES;

USE DB1;

SHOW TABLES;

部门表

CREATE TABLE DEPT(
    DEPTNO INT PRIMARY KEY,
    DNAME VARCHAR(14), -- 部门名称
    LOC VARCHAR(13)-- 部门地址
) ; 

INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');

员工表

CREATE TABLE EMP(
    EMPNO INT  PRIMARY KEY, -- 员工编号
    ENAME VARCHAR(10), -- 员工姓名
    JOB VARCHAR(9), -- 员工工作
    MGR INT, -- 员工直属领导编号
    HIREDATE DATE, -- 入职时间
    SAL DOUBLE, -- 工资
    COMM DOUBLE, -- 奖金
    DEPTNO INT,  -- 所在部门
    FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO));  -- 关联dept表  

-- 插入数据
INSERT INTO EMP VALUES(7369,'SMITH','职员',7566,"1980-12-17",800,NULL,20);
INSERT INTO EMP VALUES(7499,'ALLEN','销售员',7698,'1981-02-20',1600,300,30);
INSERT INTO EMP VALUES(7521,'WARD','销售员',7698,'1981-02-22',1250,500,30);
INSERT INTO EMP VALUES(7566,'JONES','经理',7839,'1981-04-02',2975,NULL,20);
INSERT INTO EMP VALUES(7654,'MARTIN','销售员',7698,'1981-09-28',1250,1400,30);
INSERT INTO EMP VALUES(7698,'BLAKE','经理',7839,'1981-05-01',2850,NULL,30);
INSERT INTO EMP VALUES(7782,'CLARK','经理',7839,'1981-06-09',2450,NULL,10);
INSERT INTO EMP VALUES(7788,'SCOTT','职员',7566,'1987-07-03',3000,2000,20);
INSERT INTO EMP VALUES(7839,'KING','董事长',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO EMP VALUES(7844,'TURNERS','销售员',7698,'1981-09-08',1500,50,30);
INSERT INTO EMP VALUES(7876,'ADAMS','职员',7566,'1987-07-13',1100,NULL,20);
INSERT INTO EMP VALUES(7900,'JAMES','职员',7698,'1981-12-03',1250,NULL,30);
INSERT INTO EMP VALUES(7902,'FORD','销售员',7566,'1981-12-03',3000,NULL,20);
INSERT INTO EMP VALUES(7934,'MILLER','职员',7782,'1981-01-23',1300,NULL,10);

工资等级表

CREATE TABLE SALGRADE( 
    GRADE INT,-- 等级
    LOSAL DOUBLE, -- 最低工资
    HISAL DOUBLE ); -- 最高工资

INSERT INTO SALGRADE VALUES (1,500,1000);
INSERT INTO SALGRADE VALUES (2,1001,1500);
INSERT INTO SALGRADE VALUES (3,1501,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);

1、返回部门号及其本部门的最低工资。DEPTNO

SELECT 
        DEPTNO,
        MIN(SAL)

FROM
        EMP
GROUP BY
        DEPTNO;

2、计算出员工的年薪,并且以年薪排序。

SELECT 
        *,
        SAL*12 A 
FROM
        EMP
ORDER BY
        A ASC;

3、返回员工工作及其从事此工作的最低工资。 JOB SAL(MIN)

SELECT 
        JOB,
        MIN(SAL)
FROM
        EMP
GROUP BY
        JOB;

4、查找和scott从事相同工作的员工信息

SELECT * FROM
        EMP
WHERE
        JOB
IN(SELECT 
        EMP.`JOB`
FROM
        EMP
WHERE
        EMP.`ENAME`='SCOTT');

5、工资水平多于james的员工信息。

SELECT * FROM
        EMP
WHERE

SAL>(SELECT 
        SAL
FROM
        EMP
WHERE
        ENAME='JAMES');

6、返回工资大于平均工资的员工信息。

SELECT * FROM 
        EMP
WHERE       
SAL>(
SELECT
    SUM(SAL)/
    COUNT(JOB)
FROM
    EMP);

7、返回销售部(sales)所有员工的姓名。

SELECT 
    *
FROM
    EMP T1,
    DEPT T2
WHERE
    T1.`DEPTNO`=T2.`DEPTNO`
AND 
    T2.`DNAME`='SALES';
    SELECT deptno FROM dept WHERE dname='sales';

8、返回工资高于30部门所有员工工资水平的员工信息。

SELECT * FROM
        EMP
WHERE       SAL>(

SELECT 
        MAX(SAL)
FROM
        EMP
WHERE   
        DEPTNO=30);

        EMP.`DEPTNO`=30;

9、返回查找最高工资和最低工资的职员信息

SELECT * FROM
        EMP
WHERE
        SAL
IN((SELECT MIN(SAL) FROM EMP),(SELECT MAX(SAL) FROM EMP))
AND JOB='职员';
;

10、返回拥有员工的部门名、部门号。

SELECT 
DISTINCT
        T1.`DNAME`,
        T2.`DEPTNO`
FROM
        DEPT T1,
        EMP T2
WHERE
        T2.`DEPTNO`=T1.`DEPTNO`;

11、返回员工的姓名、所在部门名及其工资。emp

SELECT 
        T1.`ENAME`,
        T1.`SAL`,
        T2.`DNAME`
FROM
        EMP T1,
        DEPT T2

WHERE
        T2.`DEPTNO`=T1.`DEPTNO`;

12、返回从事职员工作的员工姓名和所在部门名称。

SELECT 
        T1.`ENAME`,
        T2.`DNAME`
FROM
        EMP T1,
        DEPT T2
WHERE
        T2.`DEPTNO`=T1.`DEPTNO`
AND
        T1.`JOB`='职员';

13、返回部门号、部门名、部门所在位置及其每个部门的员工总数。

SELECT
        T1.`DEPTNO`,
        T2.`DNAME`,
        T2.`LOC`,
        COUNT(*)
FROM
        EMP T1,
        DEPT T2
WHERE
        T2.`DEPTNO`=T1.`DEPTNO`
GROUP BY 
        T2.`DEPTNO`;

14、返回员工(职员或者销售员)和所属经理的姓名。

SELECT 
    T1.`ENAME`,
    T2.`ENAME`  
FROM
    EMP T1,
(SELECT 
    EMP.`ENAME`,
    EMP.`EMPNO` 
FROM
    EMP 
WHERE
    EMP.`JOB`='经理'
) T2    
WHERE
    T1.`MGR`=T2.EMPNO;

15、返回员工(职员或者销售员)的入职日期早于其经理入职日期的员工及其经理姓名。

SELECT 
    T1.`ENAME`,
    T2.ENAME
FROM
    EMP T1,
(SELECT 
    EMP.`ENAME`,
    EMP.`EMPNO`,
    EMP.`HIREDATE`
FROM
    EMP
WHERE
    EMP.`JOB`='经理') T2
WHERE
    T2.`EMPNO`=T1.`MGR`
AND
    T2.HIREDATE>T1.`HIREDATE`;

16、返回工资处于第四级别的员工的姓名和工资。

SELECT 
    T2.`ENAME`,
    T2.`SAL`
FROM
    EMP T2
WHERE
    T2.SAL>(
SELECT 
    T3.LOSAL

FROM

    SALGRADE T3
WHERE
    T3.GRADE=4)
AND
T2.SAL<(
SELECT 
    T3.HISAL    
FROM
    SALGRADE T3
WHERE
    T3.GRADE=4);

猜你喜欢

转载自blog.csdn.net/bianh9527/article/details/82429841