当前位置:网站首页>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;
边栏推荐
- String type conversion BigDecimal, date type
- LIS (longest ascending subsequence) problem that can be understood [easy to understand]
- 【生态伙伴】鲲鹏系统工程师培训
- Why does blocprovider feel similar to provider?
- Gaussdb (DWS) active prevention and troubleshooting
- require与import的区别和使用
- Recent public ancestor (LCA) online practices
- pytest合集(2)— pytest運行方式
- 使用闭包实现点击按钮切换 toggle
- Unity 使用Sqlite
猜你喜欢
CIO's discussion and Analysis on the definition of high-performance it team
Spark interview questions
pytest合集(2)— pytest运行方式
13th Blue Bridge Cup group B national tournament
Little p weekly Vol.11
【MySQL】索引的分类
MIT|256KB 内存下的设备上训练
ICML2022 | 基于元语义正则化的介入性对比学习
按照功能对Boost库进行分类
News classification based on LSTM model
随机推荐
指标陷阱:IT领导者易犯的七个KPI错误
Sonic cloud real machine learning summary 6 - 1.4.1 server and agent deployment
月入1W+的自媒体达人都会用到的运营工具
ICML2022 | 基于元语义正则化的介入性对比学习
[deep learning] use deep learning to monitor your girlfriend's wechat chat?
JS how to get a list of elements in a collection object
GaussDB(DWS)主动预防排查
I received a letter from CTO inviting me to interview machine learning engineer
Mysql——》MyISAM存储引擎的索引
[NOIP2013]积木大赛 [NOIP2018]道路铺设 贪心/差分
TOPS,处理器运算能力单位、每秒钟可进行一万亿次
Go - exe corresponding to related dependency
Count the number of each character in the character
【MySQL】索引的分类
What is the difference between consonants and Initials? (difference between initials and consonants)
详解LockSupport的使用
Qtreeview+qabstractitemmodel custom model: the third of a series of tutorials [easy to understand]
Why does blocprovider feel similar to provider?
比较版本号[双指针截取自己想要的字串]
#yyds干货盘点# 解决名企真题:扭蛋机