跳至主要內容

公司信息管理

holic-x...大约 5 分钟碎片化数据库碎片化

公司信息管理

​ 假设你建立了一家咨询公司,为企业提供软硬件服务。你需要一个数据库以实时追踪本公司中的各个细节。考虑最简单的情况,你需要追踪客户情况,掌握公司员工信息,并维护订单信息。在公司的关系数据模式中创建了以下三个关系:

(1)客户(客户编号、姓名、住址、省市区、邮编、手机号码、固话号码)

(2)员工(员工编号、姓名、工作种类、业务部门、住址、办公室号码、入职时间、薪水、是否接受996工作制)

(3)订单(订单号、客户编号、负责员工编号、订单金额、订单交付日期)

请自行为该数据库编写测试数据,并给出实现以下各种需求的SQL语句:

(1) 创建这三个关系,注意每个属性的数据类型,以及订单关系中的参照完整性约束; (2) 查询公司客户的分布省份:

(3)查 询所有不位于四川的客户的姓名和手机号码:

(4)查询所有接受996工作制的员工的姓名:

(5) 查询员工总人数(提示:使用count聚集函数) ;

(6) 查询每个员工以及其负责订单的情况(提示:参考例3.49) ;

(7)查询负贵订单金额在100万以上的所有员工编号与姓名(提示:参考例3.51) ;

(8)查询负贵的每个订单金额都在10万以.上的员工编号与姓名(有多种实现方式,提示:参考例3.48或3.57);

(9)查询出每个员工低于自已负责订单的平均金额的订单号与客户编号(提示:参考例 3.57) ;

(10)假设公司有物流规划组(简称规划组)、智能设备组(简称设备组)、数据可视化与复杂模型(简称数模组)三个业务部门,查询非设备组中比设备组员工的平均薪水高的员工姓名与年龄(提示:参考例3.58/3.59);

(11) 由于国庆节提前上班,将所有员工的薪水修改为增加2000元后的金额(提示:参 考例3.75) ;

(12)定义一个客户详细地址 (编号、省市区、住址、邮编)的视图(提示:参考例 3.88) ;

1.数据表结构说明

1>客户信息表(cust_info)

字段名字段值数据类型是否主键可否为空备注
客户编号cust_numvarchar(10)
姓名cust_namevarchar(10)
住址addressvarchar(100)
省市区provincevarchar(100)
邮编postcodevarchar(6)
手机号码mobile_phonevarchar(11)
固话号码tell_phonevarchar(20)

2>员工(staff_info)

字段名字段值数据类型是否主键可否为空备注
员工编号staff_numvarchar(10)
姓名staff_namevarchar(10)
工作种类work_typevarchar(10)
业务部门business_deptvarchar(10)
住址addressvarchar(100)
办公室号码work_phonevarchar(20)
入职时间entry_timedatetime
薪水salarydecimal(10,2)
是否接受996工作制is_accept_996varchar(1)0-不接受996
1-接受996

3>订单(order_info)

字段名字段值数据类型是否主键可否为空备注
订单号order_numvarchar(10)
客户编号cust_numvarchar(10)fk:cust_info表cust_num
负责员工编号staff_numvarchar(10)fk:staff_info表staff_num
订单金额order_amountdecimal(10,2)
订单交付日期due_datedatetime

2.模拟数据执行sql语句执行说明

(1) 创建这三个关系,注意每个属性的数据类型,以及订单关系中的参照完整性约束;

	# 构建order_info与cust_info的主外键关系
	alter table order_info add constraint fk_order_cust_num 
  foreign key(cust_num) references cust_info(cust_num);
  
  # 构建order_info与staff_info的主外键关系
  alter table order_info add constraint fk_order_staff_num 
  foreign key(staff_num) references staff_info(staff_num);
  

(2) 查询公司客户的分布省份:

select province "客户分布省份" 
from cust_info
group by province

(3)查 询所有不位于四川的客户的姓名和手机号码:

select CI.cust_name "客户姓名",CI.mobile_phone "手机号码" ,ci.province "省份"
from cust_info ci
where ci.province != '四川'

(4)查询所有接受996工作制的员工的姓名:

select SI.staff_name
from staff_info si
where SI.is_accept_996 = '1'

(5) 查询员工总人数(提示:使用count聚集函数) ;

select count(*)
from staff_info si

(6) 查询每个员工以及其负责订单的情况(提示:参考例3.49) ;

select OI.*,SI.STAFF_NAME
from staff_info si
left join order_info oi on OI.staff_num = SI.staff_num 
order by SI.staff_name

(7)查询负责订单金额在100万以上的所有员工编号与姓名(提示:参考例3.51) ;

select OI.ORDER_AMOUNT "订单金额",SI.STAFF_NUM,SI.STAFF_NAME
from order_info oi
left join staff_info si on SI.staff_num = OI.staff_num
where OI.ORDER_AMOUNT >= 1000000

(8)查询负责的每个订单金额都在10万以上的员工编号与姓名(有多种实现方式,提示:参考例3.48或3.57);

select tbMin."staffNum",SI.staff_name
from (
	select min(OI.ORDER_AMOUNT) "minOrderAmount",OI.staff_num "staffNum"
	from order_info oi
	group by OI.staff_num
)tbMin
left join staff_info si on SI.staff_num = tbMin."staffNum"
where tbMin."minOrderAmount" > 100000

(9)查询出每个员工低于自已负责订单的平均金额的订单号与客户编号(提示:参考例 3.57) ;

select OI.ORDER_NUM "订单号",oi.cust_num "客户编号"
from (
	select avg(OI.ORDER_AMOUNT) "avgOrderAmount",OI.staff_num "staffNum"
	from order_info oi
	group by OI.staff_num
)tbAvg
left join order_info oi on oi.staff_num = tbAvg."staffNum"
where tbAvg."avgOrderAmount" > oi.ORDER_AMOUNT

(10)假设 公司有物流规划组(简称规划组)、智能设备组(简称设备组)、数据可视化与复杂模型(简称数模组)三个业务部门,查询非设备组中比设备组员工的平均薪水高的员工姓名与年龄(提示:参考例3.58/3.59);

select SI.STAFF_NAME,SI.STAFF_AGE
from staff_info si
where SI.BUSINESS_DEPT != '设备组' 
and si.SALARY >(
	select avg(si.SALARY)
	from staff_info si
	where SI.BUSINESS_DEPT = '设备组'
)

(11) 由于国庆节提前上班,将所有员工的薪水修改为增加2000元后的金额(提示:参 考例3.75) ;

update STAFF_INFO
set SALARY = SALARY+2000

(12)定义一个客户详细地址 (编号、省市区、住址、邮编)的视图(提示:参考例 3.88) ;

create or replace view cust_view as 
(
	select CI.CUST_NUM,CI.PROVINCE,CI.ADDRESS,CI.POSTCODE
	from CUST_INFO ci
) 

select * from cust_view
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3