Mysql子查询 , 内连接
2023-12-29 22:27:50
-- 题目准备表
DROP TABLE IF EXISTS emp;
DROP TABLE IF EXISTS dept;
DROP TABLE IF EXISTS job;
DROP TABLE IF EXISTS salarygrade;
-- 部门表
CREATE TABLE dept
(
id INT PRIMARY KEY PRIMARY KEY, -- 部门id
dname VARCHAR(50), -- 部门名称
loc VARCHAR(50) -- 部门所在地
);
-- 职务表,职务名称,职务描述
CREATE TABLE job
(
id INT PRIMARY KEY,
jname VARCHAR(20),
description VARCHAR(50)
);
-- 员工表
CREATE TABLE emp
(
id INT PRIMARY KEY, -- 员工id
ename VARCHAR(50), -- 员工姓名
job_id INT, -- 职务id
mgr INT, -- 上级领导
joindate DATE, -- 入职日期
salary DECIMAL(7, 2), -- 工资
bonus DECIMAL(7, 2), -- 奖金
dept_id INT, -- 所在部门编号
CONSTRAINT emp_jobid_ref_job_id_fk FOREIGN KEY (job_id) REFERENCES job (id),
CONSTRAINT emp_deptid_ref_dept_id_fk FOREIGN KEY (dept_id) REFERENCES dept (id)
);
-- 工资等级表
CREATE TABLE salarygrade
(
grade INT PRIMARY KEY, -- 级别
losalary INT, -- 最低工资
hisalary INT -- 最高工资
);
-- 添加4个部门
INSERT INTO dept(id, dname, loc)
VALUES (10, '教研部', '北京'),
(20, '学工部', '上海'),
(30, '销售部', '广州'),
(40, '财务部', '深圳');
-- 添加4个职务
INSERT INTO job (id, jname, description)
VALUES (1, '董事长', '管理整个公司,接单'),
(2, '经理', '管理部门员工'),
(3, '销售员', '向客人推销产品'),
(4, '文员', '使用办公软件');
-- 添加员工
INSERT INTO emp(id, ename, job_id, mgr, joindate, salary, bonus, dept_id)
VALUES (1001, '孙悟空', 4, 1004, '2000-12-17', '8000.00', NULL, 20),
(1002, '卢俊义', 3, 1006, '2001-02-20', '16000.00', '3000.00', 30),
(1003, '林冲', 3, 1006, '2001-02-22', '12500.00', '5000.00', 30),
(1004, '唐僧', 2, 1009, '2001-04-02', '29750.00', NULL, 20),
(1005, '李逵', 4, 1006, '2001-09-28', '12500.00', '14000.00', 30),
(1006, '宋江', 2, 1009, '2001-05-01', '28500.00', NULL, 30),
(1007, '刘备', 2, 1009, '2001-09-01', '24500.00', NULL, 10),
(1008, '猪八戒', 4, 1004, '2007-04-19', '30000.00', NULL, 20),
(1009, '罗贯中', 1, NULL, '2001-11-17', '50000.00', NULL, 10),
(1010, '吴用', 3, 1006, '2001-09-08', '15000.00', '0.00', 30),
(1011, '沙僧', 4, 1004, '2007-05-23', '11000.00', NULL, 20),
(1012, '李逵', 4, 1006, '2001-12-03', '9500.00', NULL, 30),
(1013, '小白龙', 4, 1004, '2001-12-03', '30000.00', NULL, 20),
(1014, '关羽', 4, 1007, '2002-01-23', '13000.00', NULL, 10);
-- 添加5个工资等级
INSERT INTO salarygrade(grade, losalary, hisalary)
VALUES (1, 7000, 12000),
(2, 12010, 14000),
(3, 14010, 20000),
(4, 20010, 30000),
(5, 30010, 99990);
-- 题目
-- 1.查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述
/*
员工编号在emp表中 职务名称职务描述在job表中
一个工作对应多个员工
emp中job_id 对应 job表中 id
*/
-- 隐示内连接
select emp.id, emp.ename, emp.salary, job.jname, job.description
from emp,
job
where emp.job_id = job.id;
-- 显示内连接
select emp.id, emp.ename, emp.salary, job.jname, job.description
from emp
inner join job on emp.job_id = job.id;
-- 2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置
-- 隐示内连接
select e.id, e.ename, e.salary, j.jname, j.description, d.dname, d.loc
from emp e,
job j,
dept d
where e.job_id = j.id
and e.dept_id = d.id;
-- 显示内连接
select e.id, e.ename, e.salary, j.jname, j.description, d.dname, d.loc
from emp e
inner join
job j
inner join
dept d
on e.job_id = j.id
and e.dept_id = d.id;
-- 3.查询员工姓名,工资,工资等级
-- 隐示内连接
select emp.ename, emp.salary, sa.grade
from emp,
salarygrade sa
where emp.salary between sa.losalary and sa.hisalary;
-- 显示内连接
select emp.ename, emp.salary, sa.grade
from emp
inner join salarygrade sa
where emp.salary between sa.losalary and sa.hisalary;
-- 4.查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级
select emp.ename, emp.salary, job.jname, job.description, salarygrade.grade
from emp,
job,
salarygrade
where emp.job_id = job.id
and emp.salary between losalary and hisalary;
-- 5.查询出部门编号、部门名称、部门位置、部门人数
/*
部门编号 , 名称 位置 属于 dept 表中
部门人数需要统计
*/
select dept.id, dept.dname, dept.loc, count()
from emp,
dept
where emp.dept_id = dept.id;
-- 分组查询部门人数
select dept_id , count(*) from emp group by dept_id;
select * from dept;
-- 使用子查询进行内连接
select dept.id, dept.dname, dept.loc, d1.count
from dept,
(select dept_id, count(*) count from emp group by dept_id) d1
where d1.dept_id = dept.id;
)
文章来源:https://blog.csdn.net/weixin_54101103/article/details/135290691
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!