网易首页 > 网易号 > 正文 申请入驻

MySQL数据库题库练习

0
分享至


-- 构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。
drop table if exists audit;
drop table if exists employees_test;
CREATE TABLE employees_test(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
CREATE TABLE audit(
EMP_no INT NOT NULL,
NAME TEXT NOT NULL
);
select * from employees_test;
select * from audit;

-- 正确答案
-- 创建触发器
create TRIGGER audit_log
after -- after/before/
insert -- insert/update/delete
on employees_test -- on table_name
for each row -- for each row
begin
insert into audit values(new.id,new.NAME); # 触发事件 使用新列数据
end
SHOW TRIGGERS; -- 查询触发器
-- 向 employees_test 表插入数据操作,然后查询 audit表是否有数据:
INSERT INTO employees_test (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1,'Paul',32,'California',20000.00 );
INSERT INTO employees_test (ID,NAME,AGE,ADDRESS,SALARY)VALUES (4,'gd',33,'California',20000.00 );
INSERT INTO employees_test (ID,NAME,AGE,ADDRESS,SALARY)VALUES (6,'Pagdgul',34,'California',20000.00 );
INSERT INTO employees_test (ID,NAME,AGE,ADDRESS,SALARY)VALUES (5,'dgd',35,'California',20000.00 );
select * from audit;
DROP TRIGGER IF EXISTS audit_log ; -- 删除触发器

-- 按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees
drop table if exists `dept_emp` ;
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
INSERT INTO dept_emp VALUES(10001,'d001','1986-06-26','9999-01-01');
INSERT INTO dept_emp VALUES(10002,'d001','1996-08-03','9999-01-01');
INSERT INTO dept_emp VALUES(10003,'d004','1995-12-03','9999-01-01');
INSERT INTO dept_emp VALUES(10004,'d004','1986-12-01','9999-01-01');
INSERT INTO dept_emp VALUES(10005,'d003','1989-09-12','9999-01-01');
INSERT INTO dept_emp VALUES(10006,'d002','1990-08-05','9999-01-01');
INSERT INTO dept_emp VALUES(10007,'d005','1989-02-10','9999-01-01');
INSERT INTO dept_emp VALUES(10008,'d005','1998-03-11','2000-07-31');
INSERT INTO dept_emp VALUES(10009,'d006','1985-02-18','9999-01-01');
INSERT INTO dept_emp VALUES(10010,'d005','1996-11-24','2000-06-26');
INSERT INTO dept_emp VALUES(10010,'d006','2000-06-26','9999-01-01');
按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees
输出格式:
dept_no employees
d001 10001,10002
d002 10006
d003 10005
d004 10003,10004
d005 10007,10008,10010
d006 10009,10010
select * from dept_emp;

-- 正确答案
select dept_no,GROUP_CONCAT(emp_no) as employees from dept_emp GROUP BY dept_no

-- 请你查找在职员工自入职以来的薪水涨幅情况,给出在职员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序,以上例子输出为(注: to_date为薪资调整某个结束日期,或者为离职日期,to_date='9999-01-01'时,表示依然在职,无后续调整记录)
-- 系数 A
drop table if exists `employees` ;
drop table if exists `salaries` ;
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','2001-06-22');
INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1999-08-03');
INSERT INTO salaries VALUES(10001,85097,'2001-06-22','2002-06-22');
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'1999-08-03','2000-08-02');
INSERT INTO salaries VALUES(10002,72527,'2000-08-02','2001-08-02');
SELECT * from employees;
SELECT * from salaries;

-- 正确答案
SELECT
t1.emp_no,
(t2.salary - t1.salary) AS growth
FROM
(
SELECT
e.emp_no,
s.salary
FROM
employees e
LEFT JOIN salaries s ON e.emp_no = s.emp_no
AND e.hire_date = s.from_date
) t1
INNER JOIN (
SELECT
em.emp_no,
sa.salary
FROM
employees em
LEFT JOIN salaries sa ON em.emp_no = sa.emp_no
WHERE
sa.to_date = '9999-01-01'
) t2
WHERE
t1.emp_no = t2.emp_no ORDER BY growth

-- id为用户主键id,number代表积分情况,让你写一个sql查询积分表里面出现三次以及三次以上的积分,查询结果如下:
注意:若有多个符合条件的number,则按number升序排序输出。
drop table if exists grade;
CREATE TABLE `grade` (
`id` int(4) NOT NULL,
`number` int(4) NOT NULL,
PRIMARY KEY (`id`));
INSERT INTO grade VALUES
(1,111),
(2,333),
(3,111),
(4,111),
(5,333);
select * from grade;

-- 正确答案 默认就是升序排列
select number from grade GROUP BY number HAVING COUNT(number)>=3

-- 查找排除在职(to_date = '9999-01-01' )员工的最大、最小salary之后,其他的在职员工的平均工资avg_salary。
drop table if exists `salaries` ;
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` float(11,3) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
INSERT INTO salaries VALUES(10001,85097,'2001-06-22','2002-06-22');
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'2001-08-02','9999-01-01');
INSERT INTO salaries VALUES(10003,43699,'2000-12-01','2001-12-01');
INSERT INTO salaries VALUES(10003,43311,'2001-12-01','9999-01-01');
INSERT INTO salaries VALUES(10004,70698,'2000-11-27','2001-11-27');
INSERT INTO salaries VALUES(10004,74057,'2001-11-27','9999-01-01');
select * from salaries;

-- 正确答案
select (SUM(salary)-MAX(salary)-MIN(salary))/(COUNT(1)-2) AS 平均工资 from salaries where to_date in('9999-01-01');

-- 请将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分。(注:sqllite,字符串拼接为 || 符号,不支持concat函数,mysql支持concat函数)。
drop table if exists `employees` ;
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26');
INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21');
INSERT INTO employees VALUES(10003,'1959-12-03','Parto','Bamford','M','1986-08-28');
INSERT INTO employees VALUES(10004,'1954-05-01','Chirstian','Koblick','M','1986-12-01');
INSERT INTO employees VALUES(10005,'1955-01-21','Kyoichi','Maliniak','M','1989-09-12');
INSERT INTO employees VALUES(10006,'1953-04-20','Anneke','Preusig','F','1989-06-02');
INSERT INTO employees VALUES(10007,'1957-05-23','Tzvetan','Zielinski','F','1989-02-10');
INSERT INTO employees VALUES(10008,'1958-02-19','Saniya','Kalloufi','M','1994-09-15');
INSERT INTO employees VALUES(10009,'1952-04-19','Sumant','Peac','F','1985-02-18');
INSERT INTO employees VALUES(10010,'1963-06-01','Duangkaew','Piveteau','F','1989-08-24');
INSERT INTO employees VALUES(10011,'1953-11-07','Mary','Sluis','F','1990-01-22');
select * from employees ;
-- 正确答案
select CONCAT(last_name,' ',first_name) from employees ;

-- 汇总各个部门当前员工的title类型的分配数目,即结果给出部门编号dept_no、dept_name、其部门下所有的员工的title以及该类型title对应的数目count,结果按照dept_no升序排序,dept_no一样的再按title升序排序
-- 系数 A
drop table if exists `departments` ;
drop table if exists `dept_emp` ;
drop table if exists titles ;
CREATE TABLE `departments` (
`dept_no` char(4) NOT NULL,
`dept_name` varchar(40) NOT NULL,
PRIMARY KEY (`dept_no`));
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE titles (
`emp_no` int(11) NOT NULL,
`title` varchar(50) NOT NULL,
`from_date` date NOT NULL,
`to_date` date DEFAULT NULL);
INSERT INTO departments VALUES('d001','Marketing');
INSERT INTO departments VALUES('d002','Finance');
INSERT INTO dept_emp VALUES(10001,'d001','1986-06-26','9999-01-01');
INSERT INTO dept_emp VALUES(10002,'d001','1996-08-03','9999-01-01');
INSERT INTO dept_emp VALUES(10003,'d002','1995-12-03','9999-01-01');
INSERT INTO titles VALUES(10001,'Senior Engineer','1986-06-26','9999-01-01');
INSERT INTO titles VALUES(10002,'Staff','1996-08-03','9999-01-01');
INSERT INTO titles VALUES(10003,'Senior Engineer','1995-12-03','9999-01-01');
SELECT * from departments ;
SELECT * from dept_emp ;
SELECT * from titles ;

-- 正确答案
-- 1
SELECT
pts.dept_no,
pts.dept_name,
les.title,
(
SELECT
count(title)
FROM
titles t
WHERE
t.emp_no = dep.emp_no
) AS count1
FROM
dept_emp dep
LEFT JOIN departments pts ON dep.dept_no = pts.dept_no
LEFT JOIN titles les ON dep.emp_no = les.emp_no
where les.to_date='9999-01-01'
and dep.to_date='9999-01-01'
ORDER BY
pts.dept_no,
count1
-- 2
select d.dept_no,
d.dept_name,
t.title,
count(t.title)as count
from departments d,dept_emp de,titles t
where de.emp_no=t.emp_no
and de.dept_no=d.dept_no
and de.to_date='9999-01-01'
and t.to_date='9999-01-01'
group by d.dept_no,t.title

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
浪姐公演起冲突!何洁抹着泪拎包走人,尚雯婕开撕她的原因找到了

浪姐公演起冲突!何洁抹着泪拎包走人,尚雯婕开撕她的原因找到了

美美谈情感
2024-06-02 22:06:35
军事 | 在亚洲的土地上:有关战争的“和会”,和有关和平的战争……

军事 | 在亚洲的土地上:有关战争的“和会”,和有关和平的战争……

新民周刊
2024-06-03 09:19:20
“铁头”涂鸦靖国神社后,在日华人第一时间报警,称警察很感谢我

“铁头”涂鸦靖国神社后,在日华人第一时间报警,称警察很感谢我

不掉线电波
2024-06-03 09:40:43
网传斯坦福大学毕业都去卷乡镇公务员?竟是当年县高考理科状元…

网传斯坦福大学毕业都去卷乡镇公务员?竟是当年县高考理科状元…

火山诗话
2024-06-02 19:06:14
10年0冠,6万人涌入球场,61岁穆帅签约费内巴切:从此你我一体!

10年0冠,6万人涌入球场,61岁穆帅签约费内巴切:从此你我一体!

风过乡
2024-06-03 07:12:44
晨意帮忙丨“滴滴滴”怪声每半分钟响一次!长沙女子求支招:到底哪来的?

晨意帮忙丨“滴滴滴”怪声每半分钟响一次!长沙女子求支招:到底哪来的?

潇湘晨报
2024-06-02 21:44:11
意大利日本基本出线!女排奥运名额剩3选2,中国队再输2场=被淘汰

意大利日本基本出线!女排奥运名额剩3选2,中国队再输2场=被淘汰

侃球熊弟
2024-06-03 08:08:26
胡锡进:铁头你为啥不能忍一下不吱声,去当一个无名英雄

胡锡进:铁头你为啥不能忍一下不吱声,去当一个无名英雄

映射生活的身影
2024-06-02 21:16:48
马斯克有一个伟大的计划:将全车电线从5000米,降至100米

马斯克有一个伟大的计划:将全车电线从5000米,降至100米

互联网.乱侃秀
2024-06-02 20:22:55
曝45岁伏明霞离婚,净身出户原因揭晓,71岁百亿丈夫只说6个字

曝45岁伏明霞离婚,净身出户原因揭晓,71岁百亿丈夫只说6个字

华人星光
2024-06-02 15:36:44
笑喷!国羽传奇被蔡斌连累发文“求饶”:一输我就挨骂好多年了

笑喷!国羽传奇被蔡斌连累发文“求饶”:一输我就挨骂好多年了

厝边人侃体育
2024-06-03 09:17:35
穆帅上任先买人:点名要买三大前锋 恒大昔日外援在列

穆帅上任先买人:点名要买三大前锋 恒大昔日外援在列

球事百科吖
2024-06-03 03:37:57
森林北陪汪峰过儿童节!穿镂空休闲上衣配小白裤,真是又美又飒

森林北陪汪峰过儿童节!穿镂空休闲上衣配小白裤,真是又美又飒

点点细语
2024-06-02 22:25:40
辟谣!朱芳雨否认周琦已签辽宁+正努力续约 萨林杰太贵吃不下

辟谣!朱芳雨否认周琦已签辽宁+正努力续约 萨林杰太贵吃不下

醉卧浮生
2024-06-03 08:23:16
中美已谈妥,奥斯汀对华作出保证,美航母主动避战,亚太格局骤变

中美已谈妥,奥斯汀对华作出保证,美航母主动避战,亚太格局骤变

说天说地说实事
2024-06-03 09:01:37
拉莫斯晒六冠老队友合照:恭喜你们这些混蛋玩意儿

拉莫斯晒六冠老队友合照:恭喜你们这些混蛋玩意儿

懂球帝
2024-06-03 07:40:05
社评:中国是言行一致的亚太和平守护者

社评:中国是言行一致的亚太和平守护者

环球网资讯
2024-06-03 00:03:14
12个国家“授权”可以攻击俄罗斯本土!国防大学教授的灵魂拷问

12个国家“授权”可以攻击俄罗斯本土!国防大学教授的灵魂拷问

深度知局
2024-05-31 17:48:38
用小学的知识讲明白,中国为何造不出顶尖的发动机

用小学的知识讲明白,中国为何造不出顶尖的发动机

田间农人阿馋
2024-06-03 01:15:02
激烈交锋,中美还是没谈拢,抢在董军上专机前,美方作出特殊安排

激烈交锋,中美还是没谈拢,抢在董军上专机前,美方作出特殊安排

影孖看世界
2024-06-01 21:30:44
2024-06-03 10:42:44
互联网干货博主
互联网干货博主
我是专注分享互联网干货的博主
278文章数 1339关注度
往期回顾 全部

科技要闻

2万字演讲|黄仁勋剧透 未来3年新品有这些

头条要闻

岛内舆论批赖清德上任后像"斗鸡" 表现比蔡英文还差

头条要闻

岛内舆论批赖清德上任后像"斗鸡" 表现比蔡英文还差

体育要闻

万人空巷!皇马举行欧冠夺冠庆典

娱乐要闻

白玉兰提名:胡歌、范伟争视帝

财经要闻

黄仁勋的计划:涉及新AI平台 HBM4 机器人

汽车要闻

搭载华为HiCAR 传祺M6 MAX售14.58万元

态度原创

时尚
艺术
家居
本地
手机

这些中年妈妈太会打扮了,剪短发还穿长裙,美得没有年龄感

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

家居要闻

静谧极简 让空间回归本质

本地新闻

食味印象|歙县限定!枇杷味儿的清甜初夏

手机要闻

小米 SU7 车机现身安兔兔:骁龙 8295 加持,流畅度位于第一梯队

无障碍浏览 进入关怀版