当前位置:网站首页>MySQL的视图练习题
MySQL的视图练习题
2022-07-01 21:45:00 【火眼猊】
数据准备
CREATE TABLE dept (
deptno int NOT NULL,
dname varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
loc varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`deptno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO dept VALUES (10, '教研部', '北京');
INSERT INTO dept VALUES (20, '学工部', '上海');
INSERT INTO dept VALUES (30, '销售部', '广州');
INSERT INTO dept VALUES (40, '财务部', '武汉');
CREATE TABLE emp (
empno int NOT NULL,
ename varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
job varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
mgr int NULL DEFAULT NULL,
hiredate date NULL DEFAULT NULL,
sal decimal(7, 2) NULL DEFAULT NULL,
COMM decimal(7, 2) NULL DEFAULT NULL,
deptno int NULL DEFAULT NULL,
PRIMARY KEY (empno) USING BTREE,
INDEX fk_emp(mgr) USING BTREE,
CONSTRAINT fk_emp FOREIGN KEY (mgr) REFERENCES emp (empno) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO emp VALUES (1001, '甘宁', '文员', 1013, '2000-12-17', 8000.00, NULL, 20);
INSERT INTO emp VALUES (1002, '黛绮丝', '销售员', 1006, '2001-02-20', 16000.00, 3000.00, 30);
INSERT INTO emp VALUES (1003, '殷天正', '销售员', 1006, '2001-02-22', 12500.00, 5000.00, 30);
INSERT INTO emp VALUES (1004, '刘备', '经理', 1009, '2001-04-02', 29750.00, NULL, 20);
INSERT INTO emp VALUES (1005, '谢逊', '销售员', 1006, '2001-09-28', 12500.00, 14000.00, 30);
INSERT INTO emp VALUES (1006, '关羽', '经理', 1009, '2001-05-01', 28500.00, NULL, 30);
INSERT INTO emp VALUES (1007, '张飞', '经理', 1009, '2001-09-01', 24500.00, NULL, 10);
INSERT INTO emp VALUES (1008, '诸葛亮', '分析师', 1004, '2007-04-19', 30000.00, NULL, 20);
INSERT INTO emp VALUES (1009, '曾阿牛', '董事长', NULL, '2001-11-17', 50000.00, NULL, 10);
INSERT INTO emp VALUES (1010, '韦一笑', '销售员', 1006, '2001-09-08', 15000.00, 0.00, 30);
INSERT INTO emp VALUES (1011, '周泰', '文员', 1008, '2007-05-23', 11000.00, NULL, 20);
INSERT INTO emp VALUES (1012, '程普', '文员', 1006, '2001-12-03', 9500.00, NULL, 30);
INSERT INTO emp VALUES (1013, '庞统', '分析师', 1004, '2001-12-03', 30000.00, NULL, 20);
INSERT INTO emp VALUES (1014, '黄盖', '文员', 1007, '2002-01-23', 13000.00, NULL, 10);
CREATE TABLE salgrade (
grade int NOT NULL,
losal int NULL DEFAULT NULL,
hisal int NULL DEFAULT NULL,
PRIMARY KEY (grade) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO salgrade VALUES (1, 7000, 12000);
INSERT INTO salgrade VALUES (2, 12010, 14000);
INSERT INTO salgrade VALUES (3, 14010, 20000);
INSERT INTO salgrade VALUES (4, 20010, 30000);
INSERT INTO salgrade VALUES (5, 30010, 99990);
练习题
1:查询部门平均薪水最高的部门名称
2:查询员工比所属领导薪资高的部门名、员工名、员工领导编号
3:查询工资等级为4级,2000年以后入职的工作地点为上海的员工编号、姓名和工资,并查出薪资在前三名的员工信息
练习题答案
-- 1:查询部门平均薪水最高的部门名称
SELECT
a.deptno,
a.dname,
a.loc,
avg_sal
FROM
dept a,
(
SELECT
*
FROM
( SELECT *, RANK ( ) ) OVER ( ORDER BY avg_sal DESC ) rn
FROM
( SELECT deptno, AVG( deptno ) avg_sal FROM emp GROUP BY deptno ) t
) tt
WHERE
rn = 1
) ttt
WHERE
a.deptno = ttt.deptno
-- 方法二
CREATE VIEW test_view1 AS SELECT deptno, AVG( deptno ) avg_sal FROM emp GROUP BY deptno
CREATE VIEW test_view2 AS SELECT *, RANK ( ) ) OVER ( ORDER BY avg_sal DESC) rn FROM test_view1
CREATE VIEW test_view3 AS SELECT * FROM test_view2 tt WHERE rn=1
SELECT
a.deptno,
a.dname,
a.loc,
avg_sal
FROM
dept a,
test_view3 ttt
WHERE
a.deptno = ttt.deptno
-- 2:查询员工比所属领导薪资高的部门名、员工名、员工领导编号
-- 2.1查询员工比领导工资高的部门号
CREATE view test_view4
AS
SELECT
a.ename enane,
a.sal sal,
b.ename mgrname,
b.sal msal,
a.deptno
FROM
emp a,
emp b
WHERE
a.mgr = b.empno
AND a.sal > b.sal;
-- 2.2将第一步查询出来的部门号和部门表进行链表查询
SELECT
*
FROM
dept a
JOIN test_view4 b ON a.deptno = b.deptno;
-- 3:查询工资等级为4级,2000年以后入职的工作地点为上海的员工编号、姓名和工资,并查出薪资在前三名的员工信息
-- 3.1需求1:查询工资等级为4级,2000年以后入职的工作地点为上海的员工编号、姓名和工资
CREATE VIEW test_view5 AS SELECT
a.deptno,
a.dname,
a.loc,
b.empno,
b.ename,
b.sal
FROM
dept a
JOIN emp b ON a.deptno = b.deptno
AND YEAR ( hiredate ) > '2000'
AND a.loc = '上海'
JOIN salgrade c ON c.grade = 4
AND ( b.sal BETWEEN c.losal AND c.hisal );
SELECT * FROM
(
SELECT *,RANK() OVER(ORDER BY sal DESC)rn
FROM
test_view5
)t
WHERE rn<=3;
边栏推荐
- AirServer2022最新版功能介绍及下载
- Fundamentals - IO intensive computing and CPU intensive computing
- Recent public ancestor (LCA) online practices
- I received a letter from CTO inviting me to interview machine learning engineer
- 黑马程序员-软件测试--06阶段2-linux和数据库-01-08第一章-linux操作系统阶段内容说明,linux命令基本格式以及常见形式的说明,操作系统的常见的分类,查看命令帮助信息方法,
- Smart micro mm32 multi-channel adc-dma configuration
- require与import的区别和使用
- 【单体】流辰信息I-BPSv3服务器推荐配置
- flink sql-client 使用 对照并熟悉官方文档
- Aidl basic use
猜你喜欢
MySQL系列之事务日志Redo log学习笔记
Training on the device with MIT | 256Kb memory
MySQL learning notes - SQL optimization of optimization
Classify boost libraries by function
【目标跟踪】|单目标跟踪指标
MIT|256KB 内存下的设备上训练
Indicator trap: seven KPI mistakes that it leaders are prone to make
二叉树的基本操作
[noip2013] building block competition [noip2018] road laying greed / difference
名单揭晓 | 2021年度中国杰出知识产权服务团队
随机推荐
【MySQL】explain的基本使用以及各列的作用
“丝路正青春 风采看福建”在闽外籍青年短视频大赛火热征集作品中
【juc学习之路第8天】Condition
locust 系列入门
指标陷阱:IT领导者易犯的七个KPI错误
黑马程序员-软件测试--06阶段2-linux和数据库-01-08第一章-linux操作系统阶段内容说明,linux命令基本格式以及常见形式的说明,操作系统的常见的分类,查看命令帮助信息方法,
Interview question: what is the difference between MySQL's Union all and union, and how many join methods MySQL has (Alibaba interview question) [easy to understand]
Show member variables and methods in classes in idea
测试撤销1
Chapter 9 Yunji datacanvas company has been ranked top 3 in China's machine learning platform market
[monomer] recommended configuration of streaming information i-bpsv3 server
The leader of the cloud native theme group of beacon Committee has a long way to go!
【直播回顾】战码先锋首期8节直播完美落幕,下期敬请期待!
ICML2022 | 基于元语义正则化的介入性对比学习
Application of real estate management based on 3D GIS
K-means based user portrait clustering model
AirServer2022最新版功能介绍及下载
Spark interview questions
MIT|256KB 内存下的设备上训练
leetcode - 287. 寻找重复数