CREATE DATABASE db6;
USE db6;
/*
emp 员工表(empno 员工号/ename 员工姓名/job 工作/mgr 上级编号/hiredate 受雇日期/sal 薪金/comm 佣金/deptno 部门编号)dept 部门表(deptno 部门编号/dname 部门名称/loc 地点)
工资 = 薪金 + 佣金
*/-- 第一步:建表:
CREATE TABLE dept(deptno INT PRIMARY KEY,dname VARCHAR(30),loc VARCHAR(30)
);CREATE TABLE emp(empno INT PRIMARY KEY,ename VARCHAR(30),job VARCHAR(30),mgr INT,hiredate INT,sal DOUBLE(10,2),comm DOUBLE(10,2),deptno INT,FOREIGN KEY(deptno) REFERENCES dept(deptno)
);-- drop table emp,dept;-- 第二步:向各表中插入数据:
INSERT INTO dept VALUES(1, '技术部' ,'南泥湾');
INSERT INTO dept VALUES(2, 'SALES' ,'深圳市');
INSERT INTO dept VALUES(3, '事业部' ,'北京市');
INSERT INTO dept VALUES(4, '服务部' ,'延安');
INSERT INTO dept VALUES(5, '生产部' ,'南京市');
INSERT INTO dept VALUES(6, '宣传部' ,'上海市');
INSERT INTO dept VALUES(7, '打杂部' ,'广州市');
INSERT INTO dept VALUES(8, '司令部' ,'重庆市');
INSERT INTO dept VALUES(9, '卫生部' ,'长沙市');
INSERT INTO dept VALUES(10, '文化部' ,'武冈市');
INSERT INTO dept VALUES(11, '娱乐部' ,'纽约');
INSERT INTO dept VALUES(12, '管理部' ,'伦敦');
INSERT INTO dept VALUES(13, '行政部' ,'天津市');INSERT INTO emp VALUES(1, '关羽羽', 'CLERK' ,3, 20011109, 2000, 1000, 3);
INSERT INTO emp VALUES(2, 'SMITH', 'CLERK' ,3, 20120101, 2000, 800, 6);
INSERT INTO emp VALUES(3, '刘备备', 'MANAGER' ,8, 20080808, 9000, 4000, 3);
INSERT INTO emp VALUES(4, 'TOM', 'ENGINEER' ,5, 20050612, 3000, 1000, 1);
INSERT INTO emp VALUES(5, 'Steve', 'MANAGER' ,8, 20110323, 80000, 9000, 1);
INSERT INTO emp VALUES(6, '张飞飞', 'CLERK' ,3, 20101010, 2000, 1000, 3);
INSERT INTO emp VALUES(7, 'SCOTT', 'CLERK' ,3, 20071204, 2000, 1000, 3);
INSERT INTO emp VALUES(8, '宋祖英', 'Boss' ,NULL, 20060603, 2000, 1000, 8);
INSERT INTO emp VALUES(9, '曹仁人', 'SALESMAN' ,10, 20120130, 2000, 1000, 2);
INSERT INTO emp VALUES(10, '曹操操', 'MANAGER' ,8,20090815, 2000, 1000, 2);
INSERT INTO emp VALUES(11, '酱油哥', 'HAPI' ,5,20090215, 3, 1, 2);SELECT * FROM dept;
SELECT * FROM emp;-- 1、列出至少有一个员工的所有部门。
SELECT deptno ,COUNT(*) FROM emp GROUP BY deptno;
SELECT dept.dname FROM dept,(SELECT deptno ,COUNT(*) FROM emp GROUP BY deptno) t1 WHERE dept.deptno = t1.deptno;
-- 2、列出薪金比“SMITH”多的所有员工。(大于最大薪水SMITH员工)
SELECT sal FROM emp WHERE ename = 'SMITH';
SELECT ename FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename = 'SMITH');
-- 3、列出所有员工的姓名及其直接上级的姓名。
SELECT empno , ename FROM emp ;SELECTemp.ename,t2.ename
FROMemp ,(SELECT empno, ename FROM emp) t2
WHEREemp.mgr = t2.empno;SELECT t1.ename , t2.ename FROM emp t1,emp t2 WHERE t1.mgr = t2.empno ;
-- 4、列出受雇日期早于其直接上级的所有员工。
SELECT empno , ename FROM emp;SELECTemp.ename
FROMemp,(SELECTempno,ename,hiredateFROMemp) t2
WHEREemp.mgr = t2.empno
AND emp.hiredate < t2.hiredate;
-- 5、 列出部门名称和这些部门的员工信息,包括那些没有员工的部门。
SELECT * FROM dept LEFT JOIN emp ON dept.deptno= emp.deptno ORDER BY dept.deptno ASC;
-- 6、 列出所有job为“CLERK”(办事员)的姓名及其部门名称。
SELECT emp.ename,dept.dname FROM emp , dept where emp.deptno = dept.deptno and emp.job='CLERK';
-- 7、 列出最低薪金大于1500的各种工作。
SELECT job FROM emp GROUP BY job HAVING MIN(sal)>1500;
-- 8、 列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
SELECT deptno FROM dept where dname = 'SALES';
SELECT emp.ename FROM emp WHERE emp.deptno = (SELECT deptno FROM dept where dname = 'SALES');
-- 9、 列出薪金高于公司平均薪金的所有员工。
SELECT ename FROM emp WHERE sal > (SELECT AVG(sal) FROM emp);
-- 10、列出与“SCOTT”从事相同工作的所有员工。
SELECT ename FROM emp WHERE job = (SELECT job FROM emp WHERE ename = 'SCOTT');
-- 11、列出薪金等于部门3中员工的薪金的所有员工的姓名和薪金。
SELECT DISTINCT emp.sal FROM emp where emp.deptno = 3;
SELECT emp.ename, emp.sal FROM emp,(SELECT DISTINCT emp.sal FROM emp where emp.deptno = 3) t1 WHERE emp.sal = t1.sal;
-- 12、列出薪金高于在部门3工作的所有员工的薪金的员工姓名和薪金。
SELECT ename ,sal FROM emp WHERE emp.sal > (SELECT MAX(sal) FROM emp WHERE emp.deptno = 3);
-- 13、列出在每个部门工作的员工数量、平均工资。
SELECT COUNT(*),AVG(sal) FROM emp GROUP BY emp.deptno;
-- 14、列出所有员工的姓名、部门名称和工资。
SELECT emp.ename , dept.dname,emp.sal FROM emp, dept WHERE emp.deptno = dept.deptno;
-- 15、列出所有部门的详细信息和部门人数。
SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;
SELECT dept.*,t1.count FROM dept LEFT JOIN (SELECT deptno,COUNT(*) count FROM emp GROUP BY deptno) t1 ON dept.deptno = t1.deptno;
-- 16、列出各种工作的最低工资。
SELECT deptno ,MIN(sal) FROM emp GROUP BY deptno;
SELECT dept.dname , min FROM dept , (SELECT deptno ,MIN(sal) min FROM emp GROUP BY deptno) t1 WHERE dept.deptno = t1.deptno;
-- 17、列出各个部门的MANAGER(经理)的最低薪金(job为MANAGER)。
SELECT * FROM emp WHERE job = 'MANAGER' GROUP BY deptno;
SELECT MIN(t1.sal) FROM (SELECT * FROM emp WHERE job = 'MANAGER' GROUP BY deptno) t1 ;
-- 18、列出所有员工的年工资,按年薪从低到高排序。
SELECT ename,sal + comm year FROM emp;
SELECT t1.ename,t1.year FROM (SELECT ename,sal + comm year FROM emp) t1 ORDER BY t1.year DESC;

【练习】多表查询练习相关推荐

  1. MySQL查询进阶之多表查询

    一.多表查询 1.引出 2.笛卡尔积 3. 笛卡尔积的解决方法 二.多表查询分类 1.等值连接和非等值连接 2.自连接和非自连接 3.内连接和外连接 SQL92:使用(+)创建连接 SQL99语法实现 ...

  2. Spring Hibernate JPA 联表查询 复杂查询

    (转自:http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html) 今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的 ...

  3. (转)MySQL联表查询

    资料源于网络 一.内联结.外联结.左联结.右联结的含义及区别 在SQL标准中规划的(Join)联结大致分为下面四种: 1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结. ...

  4. case when 子查询_Oracle数据库-单表查询

    本章涉及单张表中的查询语句,包含常用的条件查询.范围查询.模糊查询等,跨表查询后续将会介绍. 1.基本查询语句 格式:SELECT[DISTINCT] column_name,-|* FROM tab ...

  5. 顺序表应用6:有序顺序表查询

    顺序表应用6:有序顺序表查询 Time Limit: 7MS Memory Limit: 700KB Submit Statistic Problem Description 顺序表内按照由小到大的次 ...

  6. Mybatis入门:4(多表查询操作)

    多表查询操作 Mybatis的多表操作 表之间的关系有几种:一对多.一对一.多对一.多对多 举例: 用户和订单就是一对多--一个用户可以下多个订单 订单和用户就是多对一--多个订单属于同一个用户 人和 ...

  7. 使用mysql内连接查询年龄_Mysql的连表查询

    若一个查询同时涉及到两个以上的表,称为连表查询 准备表 create table department( id int auto_increment PRIMARY KEY, name varchar ...

  8. 让人又爱又恨的Mysql多表查询

    在SQL开发当中,多表联查是绝对绕不开的一种技能.同样的查询结果不同的写法其运行效率也是千差万别.在实际开发当中,我见过(好像还写过~)不少又长又臭的查询SQL,数据量一上来查个十几分钟那是家常便饭. ...

  9. 3.4.1 单表查询

    3.4.1 单表查询 一.选择表中 若干列 1 查询 全体学生的  学号  和 姓名 select   sno,  sname from student 3 查询全体学生的   详细记录 select ...

  10. 多表查询事务DCL权限管理

    多表查询: * 查询语法:select列名列表from表名列表where.... * 准备sql# 创建部门表CREATE TABLE dept(id INT PRIMARY KEY AUTO_INC ...

最新文章

  1. Scrapyd部署Scrapy框架项目
  2. 求数组当中子数组最大和
  3. MATLAB知识点1
  4. MATLAB实战系列(十四)-如何通过YALMIP和CPLEX求解小规模(CVRP)路径调度问题(附MATLAB代码)
  5. 在2008 server上部署域
  6. π里包含了所有可能的数字组合吗?
  7. Java 动态代理解析
  8. mysql的建表语句
  9. windows部署iBase4J
  10. Mike and Cellphone
  11. 低功耗验证 (二)UPF,低功耗流程,VCS NLP
  12. r语言基本操作及数据处理(超详细)
  13. 计算机网络四个阶段特点,计算机网络的发展分哪四个阶段,特点?
  14. Android中ail的作用和使用说明
  15. 前端JavaScript-面向对象
  16. 深入浅出内存马(一)
  17. JS字符串截取方法 JS字符串查找指定字符方法 JS字符串替换指定字符方法 JS字符串插入指定位置方法 JS字符串删除指定字符方法
  18. [bzoj5473] 仙人掌
  19. Monitor 采集方式
  20. 我的物联网项目初建团队

热门文章

  1. c语言之判断if语句
  2. JavaScript用法------判断二维数组
  3. 软硬链接、引号符号、逻辑符号、系统通配符
  4. 随笔篇----比特的传输
  5. FoxNFT创世品牌娘卡包预售6月15日正式开启!五位姑娘正式与大家见面
  6. 微信小程序的所有scene场景值 2020-10-21
  7. 字节跳动实习面试:三面无修改公开,看看他到底通过了吗?
  8. 阿里巴巴的店铺有何运营技巧
  9. 各大搜索引擎蜘蛛名称大全
  10. 抖音:技术优化打造最佳创作体验