数据库作业5---视图

创建表

创建部门表(dept)和员工表(emp)

sql 复制代码
create table dept(
		dept_id int primary key auto_increment comment '部门编号',
		dept_name char(20) comment '部门名称'
	);
	insert into dept(dept_name) values('销售部'),('财务部'),('生产部'),('人事部');
sql 复制代码
create table emp(
	emp_id int primary key auto_increment comment '员工号',
	emp_name char(20) not null default '' comment '员工姓名',
	gender char(2) not null default '男' comment '性别',
	birth datetime not null default '1990-1-1' comment '出生日期',
	salary decimal(10,2) not null default 0 comment '工资',
	address varchar(200) not null default '' comment '通讯地址',
	dept_id int comment '部门编号'
);

create index idx_name on emp(emp_name);
create index idx_birth on emp(birth);
create index idx_deptid_name on emp(dept_id,emp_name);

insert into emp(emp_name,gender,birth,salary,address,dept_id) 
values('张晓红','女','1980-1-23',5800,'河南省郑州市中原路10号',1),
('张静静','女','1987-10-3',5400,'河南省新乡市平原路38号',1),
('王云飞','男','1992-11-15',5600,'河南省新乡市人民路28号',1),
('王鹏飞','男','1987-10-1',6800,'河南省新乡市东明大道12号',1),
('王大鹏','男','1989-2-11',5900,'河南省郑州市东风路15号',1),
('王萌萌','女','1986-12-30',5000,'河南省开封市五一路14号',2),
('王大光','男','1988-11-8',6200,'河南省开封市八一路124号',2),
('王小明','男','1998-1-3',4800,'河南省驻马店市雪松路128号',2),
('王娜娜','女','1994-3-5',5200,'河南省驻马店市车站路2号',2),
('刘云飞','男','1992-8-13',6800,'河南省南阳市民生路255号',3),
('张陆军','男','1991-9-6',6200,'河南省南阳市张仲景路14号',3);

视图

1、创建视图v_emp_dept_id_1,查询销售部门的员工姓名和家庭住址

sql 复制代码
create view v_emp_dept_id_1
as select emp_name,addess
from emp
where dept_id = (select dept_id from dept where dept_name = '销售部');

2、创建视图v_emp_dept,查询销售部门员工姓名和家庭住址及部门名称

sql 复制代码
creat view v_emp_dept
as select emp.emp_name,emp.address,dept.dept_name
from emp
join dept on emp.dept_id = dept.dept_id
where dept.dept_name = '销售部';

3、创建视图v_dept_emp_count(dept_name,emp_count,avg_salay),统计每个部门人数并计算平均工资。

sql 复制代码
create view v_dept_emp_count as
select dept_name,avg(salary),count(dept_name) from emp inner join dept
on emp.dept_id=dept.dept_id
group by dept_name;

4、修改视图v_emp_dept,查询销售部门员工姓名、家庭住址、工资和部门名称。

sql 复制代码
alter view v_emp_dept as
select emp_name,address,salary,dept_name from emp inner join dept
on emp.dept_id=dept.dept_id
where dept_name='销售部';

5、1查看视图名称;2查看视图结构;3查看创建视图语句;

sql 复制代码
1.desc v_emp_dept_id_1;
2.show create view v_emp_dept_id_1 /G;
3.show create view v_emp_dept_id_1 \G;

6、删除以上三个视图。

sql 复制代码
drop view v_emp_dept_id_1,v_emp_dept,v_dept_emp_count;

存储过程

1、创建一个提取emp表所有员工工资和的存储过程s1

sql 复制代码
delimiter $$
create procedure s1()
begin
select sum(salary) from emp;
end $$

2、调用存储过程s1

sql 复制代码
call s1();

3、创建存储过程s2,实现输入员工姓名后返回员工的家庭住址。

sql 复制代码
delimiter //
create procedure s2(in name_address char(20))
begin
select address from emp where emp_name = name_address;
end //

4、调用存储过程s2

sql 复制代码
call s2('王鹏飞');

5、创建一个存储过程avg_sai,有3个参数,分别是dept,gender,接收平均工资,功能查询emp表dept_id为1,gender为男的平均工资

sql 复制代码
create procedure avg_sai(in id1 int,in gender char(2),out avg_salary decimal(10,2)
begin
select avg(salary) as avg_salary from emp where dept_id = id1 and gender = gender1;
end //

6、调用存储过程avg_sai

sql 复制代码
set @avg_salary = 0;
call avg_sai(1,'男',@avg_salary);
select @avg_salary;

7、删除以上存储过程

sql 复制代码
drop procedure s1;
drop procedure s2;
drop procedure avg_sai;;
相关推荐
羊小蜜.几秒前
Mysql 01:基础查询(SELECT)全解——从单表到多字段的完整语法
数据库·mysql·查询
猿小喵14 分钟前
记录一次从库并行回放出现死锁的问题
数据库·mysql·tdsql
随风,奔跑21 分钟前
Redis
数据库·redis·缓存
IvorySQL23 分钟前
2MB 的 PostgreSQL work_mem,如何吃掉 2TB 内存?
数据库·postgresql·开源
桑榆肖物24 分钟前
有字幕,没配音?用浏览器自带语音能力,让网页视频直接“开口说话”
数据库·edge·音视频·tts
熬夜的咕噜猫1 小时前
MySQL主从复制与读写分离
网络·数据库·mysql
道清茗1 小时前
【MySQL知识点问答题】 备份技术、Invisible Indexes 和直方图的应用
数据库·mysql
芒果披萨1 小时前
sql存储过程
java·开发语言·数据库
jnrjian1 小时前
RAC 去除node的建议 dbca 和手动方法
数据库·oracle
TlYf NTLE1 小时前
redis分页查询
数据库·redis·缓存