您的位置:首页 > 数据库 > MySQL

MySQL多表练习案列2

2019-01-10 22:34 176 查看

员工_部门多表练习

数据准备

--完成emp和dept设计
create table dept(
deptno int primary key auto_increment,
dname varchar(14) ,
dlocation varchar(13)
) ;

create table emp(
empno int primary key auto_increment,
ename varchar(10),
JOB varchar(9),
MGR int,
HIREDATE date,
SAL int,
COMM int,
DEPTNO int not null,
foreign key (DEPTNO) references dept(deptno)
);

-- 录入相关数据
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');
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-06-13',3000,NULL,20);
INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-06-13',1100,NULL,20);
INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1983-01-23',1300,NULL,10);

需求

– 1.列出至少有4个员工的所有部门。

SELECT
t2.`dname`,
COUNT(t2.`deptno`)
FROM
emp t1,dept t2
WHERE
t1.`DEPTNO` = t2.`deptno`
GROUP BY t2.`dname`
HAVING COUNT(t2.`deptno`) > 4;

– 2.列出薪金比“SMITH”多的所有员工。

SELECT
t1.*
FROM
emp t1,dept t2
WHERE
t1.`DEPTNO` = t2.`deptno`
AND
t1.`SAL` > (SELECT t1.`SAL` FROM emp t1 WHERE t1.`ename` = 'SMITH');

– 3.列出所有员工的姓名及其直接上级的姓名。

SELECT
t1.`ename`,
t1.`empno`,
t2.`ename`,
t2.`empno`
FROM
emp t1,emp t2
WHERE
t1.`MGR` = t2.`empno`;

– 4.列出受雇日期早于其直接上级的所有员工。

SELECT
t1.`ename`,
t1.`HIREDATE`,
t2.`ename`,
t2.`HIREDATE`
FROM
emp t1,emp t2
WHERE
t1.`MGR` = t2.`empno`
AND
t1.`HIREDATE` < t2.`HIREDATE`;

– 5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。

SELECT
t2.`dname`,
t1.*
FROM
emp t1 RIGHT JOIN
dept t2
ON
t1.`DEPTNO` = t2.`deptno`;

– 6.列出所有“CLERK”(办事员)的姓名及其部门名称。

SELECT
t1.`ename`,
t1.`JOB`,
t2.`dname`
FROM
emp t1,dept t2
WHERE
t1.`DEPTNO` = t2.`deptno`
AND
t1.`JOB` = 'CLERK';

– 7.列出最低薪金大于1500的各种工作。

SELECT
t1.`JOB`,
MIN(t1.`SAL`)
FROM
emp t1,dept t2
WHERE
t1.`DEPTNO` = t2.`deptno`
GROUP BY t1.`empno`
HAVING MIN(t1.`SAL`) > 1500;

注:以上代码都是亲手手打,本人初学者,难免有一些低级错误出现,希望大佬们指正! 分享自己练习的案例,一起进步一起学习!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: