标签搜索

YGGL数据库多表查询 综合练习

幻鹤
2022-04-22 / 0 评论 / 1,282 阅读 / 正在检测是否收录...

先来看看开始的准备:

  1. 创建员工管理数据库YGGL
create database YGGL;
  1. 使用bookstore数据库
Use YGGL;
  1. 创建员工信息表employees
Create table employees(
员工编号 char(6) not null primary key,
姓名 char(10) not null,
学历 char(4) not null,
出生时间 date not null,
性别 char(2) not null,
工作年限 tinyint(1) null,
地址 varchar(20) null,
电话号码 char(12) null,
员工部门号 char(3) null
);

4 新建员工薪水情况表salary

  Create table salary (
员工编号 char(6) not null primary key,
收入 float(8, 2) not null,
支出 float(8, 2) not null
);

5 department部门信息表

Create table department (
部门编号 char(2) not null primary key,
部门名称 char(20) not null,
备注 char(100) null
);

6、将以下数据插入到employees表中

Insert into employees values
('000001','王林','大专','1994-02-11',1,2,'四川成都高新区','12365987485','1'),
('010008','李四','本科','1990-8-3',1,6,'四川成都高新区','13896857485','2'),
('020010','王五','本科','1992-8-6',1,7,'四川成都青羊区','15896874585','4'),
('020018','刘六','中专','1999-6-11',1,0,'四川成都高新区','36985748961','3'),
('102201','李可','大专','1990-8-6',1,10,'四川成都武候区','12365987485','2'),
('102208','廖方','研究生','1976-09-9',1,15,'四川成都高新区','15896325874','5'),
('108991','徐虹','中专','1969-8-1',0,26,'四川成都高新区','16987485909','3'),
('111006','张乐','大专','1998-9-25',0,1,'四川成都成华区','12636985748','2'),
('210678','王科','中专','1993-08-11',0,7,'四川成都成华区','18996987406','1'),
('302566','刘瑞','本科','1977-04-5',0,13,'四川成都武候区','16987485947','4'),
('308759','文迪','中专','1986-06-23',0,12,'四川成都成华区','16985748905','5'),
('504209','付红','大专','1993-12-4',0,4,'四川成都武候区','17896547896','3');

7将以下数据插入到salary表中

Insert into salary values
('000001',2100.8,123.09),
('010008',1582.62,88.03),
('020010',2860,198),
('020018',2347.68,180),
('102201',2569.88,185.65),
('102208',1980,100),
('108991',3259.98,281.52),
('111006',1987.01,79.58),
('210678',2240,121),
('302566',2980.7,210.2),
('308759',2531.98,199.08),
('504209',2066.15,108);

8将以下数据插入到department表中

insert into department values
('1','财务部',''),
('2','人力资源部',''),
('3','经理办公室',''),
('4','研发部',''),
('5','市场部','');

对YGGL数据库完成一下查询:

  1. 查询支出在50-150之间的工资信息(单表)
  2. 查找地址中包含’高新’ 的员工的信息(单表)
  3. 查询所有人的总收入和总支出(单表)
  4. 查询“李可”的姓名、工作年限和所工作的部门名称(多表查询)
  5. 查询财务部、研发部、市场部的员工信息(多表查询)
  6. 查询每个雇员的姓名,出生时间,收入和支出(多表查询)
  7. 查询研发部在1970年以前出生的员工姓名和收入(多表查询)
  8. 查询employees表中员工的姓名、住址和收入。其中收入要求作以下替换,当收为2000元以下显示为“低收入”,收入为2000元~3000元之间时显示为“中等收入”,收入在3000元以上时显示为“高收入”(多表查询)
  9. 查询所有员工的员工编号、姓名、工作的部门名称、收入和支出信息。

这里是解答哦:
1:

select * from salary where 支出>=50 and 支出<=150;

2:

select * from employees where 地址 like '%高新%';

3:

select sum(收入) as 总收入,sum(支出) as 总支出 from salary;

4:

select 姓名,工作年限,部门名称 from employees,department where department.部门编号 in (select 员工部门号 from employees where 姓名='李可') and 姓名='李可';

5:

select * from employees where 员工部门号 in (select 部门编号 from department where 部门名称 in('财务部','研发部','市场部'));

6:

select 姓名,出生时间,收入,支出 from employees join salary using(员工编号);

7:
这题我开始是这样做的(因为没看见是研发部)

select 姓名,收入 from employees,salary where salary.员工编号 in (
select 员工编号 from employees where 出生时间<'1970-1-1') and 出生时间<'1970-1-1';

正确的做法应该是:

select 姓名,收入 from employees join salary using (员工编号) join department on employees.员工部门号=department.部门编号 where 部门名称='研发部' and 出生日期<'1970-1-1';

8:

select 姓名,地址,
case when 收入<2000 then "低收入"
when 收入>=2000 and 收入<=3000 then "中等收入"
when 收入>3000 then "高收入" end as 收入
from employees join salary using(员工编号);

9:

select employees.员工编号,姓名,部门名称,收入,支出 from employees,salary,department where employees.员工编号=salary.员工编号 and 部门编号 in (select 员工部门号 from department);

优化一下

select employees.员工编号,姓名,部门名称,收入,支出 from employees,salary,department where employees.员工编号=salary.员工编号 and employees.员工部门号=department.部门编号;
0

评论 (0)

取消