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;
注:以上代码都是亲手手打,本人初学者,难免有一些低级错误出现,希望大佬们指正! 分享自己练习的案例,一起进步一起学习!
相关文章推荐
- MySQL多表练习案列3
- MySQL 多表查询练习
- MySQL之多表查询练习
- mysql 多表查询练习
- MySQL左外连接where条件包含多表写法
- MySql练习 多对多表练习-用户角色权限表
- MYSQL-练习(student_score)
- MySQL-5.5之基础操作练习
- mysql 语句练习
- sql语句练习50题(Mysql版)
- 我最近练习的 mysql 语句
- node.js学习笔记——练习使用mysql
- mysql存储的练习及vs2005调用(附函数表)
- MySql一般查询练习
- mysql练习
- MySQL多表查询练习题
- MySQL语句练习
- mysql 查询练习
- JSP实现数据库(MySQL)查询——Java Web练习(二)
- MySQL语法练习一