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

本文通过具体实例介绍了SQL的基本操作,包括创建表、插入数据以及复杂的查询语句等。涵盖了部门和员工信息管理,如按部门查询最低薪资、计算年薪并排序、找出特定条件下的员工等。

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

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);
MySQL查询是指在查询中同时涉及到的操作。查询可以更加方便地获取到需要的数据,提供了更加灵活的查询方式。 在进行查询之前,我们首先需要对之间的关系进行了解和分析。常见的查询方式包括联接查询、子查询以及级嵌套查询等。 联接查询是最常见且常用的查询方式之一。通过联接查询,我们可以根据两个或之间的关联字段,将它们连接在一起进行查询。 例如,我们有两个A和B,它们通过一个共同的字段关联起来。我们可以使用联接查询语句如下: SELECT A.field1, B.field2 FROM A INNER JOIN B ON A.common_field = B.common_field; 在这个查询中,我们使用了INNER JOIN关键字将A和B连接起来,其中common_field是两个之间的关联字段。通过这个联接查询,我们可以同时获取到A和B中的相关信息。 除了联接查询之外,我们还可以使用子查询级嵌套查询进行查询。 子查询是指在查询语句中嵌套了另一个查询语句。通过子查询,我们可以在一个查询中引用另一个查询的结果作为条件进行查询级嵌套查询是指在一个查询语句中嵌套了个子查询。通过级嵌套查询,我们可以按照一定的顺序和逻辑进行复杂的查询操作。 综上所述,MySQL查询是一种可以同时涉及进行查询的操作。通过联接查询、子查询级嵌套查询等方式,我们可以更加灵活地获取到需要的数据。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值