第二个- -SQL的练习题、务必帮帮忙、实在也不想做- - 在线等
员工表:emp员工编号(empno)姓名(ename)出生年月(ebirthday)性别(ssex)联系电话(tel)学历(edu)职位(job)1001BLAKE197...
员工表:emp
员工编号
(empno) 姓名
(ename) 出生年月
(ebirthday) 性别
(ssex) 联系电话
(tel) 学历
(edu) 职位(job)
1001 BLAKE 1974-12-11 男 33123456 本科市场专员
1002 SCOTT 1975-10-02 男 56119676 大专总经理
1003 JAMES 1976-04-02 男 34113410 博士主管
1004 MIKE 1973-01-02 女 45134514 硕士主管
1005 SMITH 1975-08-02 男 56116710 本科主管
薪水表:salary
员工编号
(empno) 部门号(deptno) 工资(sal)
1001 001 4500
1002 002 6600
1003 003 7900
1004 002 2300
1005 003 3870
1) 创建“员工表”和“薪水表”,表信息如上图所示,emp表中,员工编号为主键;salary表中员工编号为外键。
2) 修改表信息,给emp表添加一个字段“addr”
3) 向“员工表”、“薪水表”中添加数据(数据如表1、2)
4) 修改数据,将电话号码以56开头的所有的人员的薪水加上500
5) 查询工资在4000--7000之间,名字中有“AM”的人员的全部信息
6) 查询1974年之后出生的,学历为“硕士”的人员的全部信息
7) 查询出年龄最大和年龄最小的2个员工的全部信息
8) 查询出所有与姓名为‘MIKE’的同年出生、同性别的人员的全部信息
9) 查询出部门号为001和003的的人员的全部信息
10)创建一个存储过程,查询人员是主管的全部信息
备注:全部信息是指2张表所包含的全部信息 展开
员工编号
(empno) 姓名
(ename) 出生年月
(ebirthday) 性别
(ssex) 联系电话
(tel) 学历
(edu) 职位(job)
1001 BLAKE 1974-12-11 男 33123456 本科市场专员
1002 SCOTT 1975-10-02 男 56119676 大专总经理
1003 JAMES 1976-04-02 男 34113410 博士主管
1004 MIKE 1973-01-02 女 45134514 硕士主管
1005 SMITH 1975-08-02 男 56116710 本科主管
薪水表:salary
员工编号
(empno) 部门号(deptno) 工资(sal)
1001 001 4500
1002 002 6600
1003 003 7900
1004 002 2300
1005 003 3870
1) 创建“员工表”和“薪水表”,表信息如上图所示,emp表中,员工编号为主键;salary表中员工编号为外键。
2) 修改表信息,给emp表添加一个字段“addr”
3) 向“员工表”、“薪水表”中添加数据(数据如表1、2)
4) 修改数据,将电话号码以56开头的所有的人员的薪水加上500
5) 查询工资在4000--7000之间,名字中有“AM”的人员的全部信息
6) 查询1974年之后出生的,学历为“硕士”的人员的全部信息
7) 查询出年龄最大和年龄最小的2个员工的全部信息
8) 查询出所有与姓名为‘MIKE’的同年出生、同性别的人员的全部信息
9) 查询出部门号为001和003的的人员的全部信息
10)创建一个存储过程,查询人员是主管的全部信息
备注:全部信息是指2张表所包含的全部信息 展开
2个回答
展开全部
1.创建“员工表”和“薪水表”,表信息如上图所示,emp表中,员工编号为主键;salary表中员工编号为外键。
create table emp(
empno int(4) not null auto_increment,
ename varchar(30) not null,
ebirthday date not null,
ssex varchar(3) not null,
tel varchar(12),
edu varchar(30),
job varchar(30) not null,
primary key(empno)
);
create table salary(
deptno varchar(30) not null,
sal decimal(6,1) not null default 0,
empno int(4) not null,
primary key(deptno),
foreign key(empno) references emp(empno)
);
------------------------------------------------------
2.修改表信息,给emp表添加一个字段“addr”
alter table emp add addr varchar(100);
------------------------------------------------------
3.向“员工表”、“薪水表”中添加数据(数据如表1、2)
insert into emp values(1001,'BLAKE','1974-12-11','男','33123456','本科','市场专员','');
insert into emp values(1002,'SCOTT','1974-10-02','男','33123456','大专','总经理','');
insert into emp values(1003,'JAMES','1974-04-02','男','56119676','博士','主管','');
insert into emp values(1004,'MIKE','1974-01-02','女','45134514','硕士','主管','');
insert into emp values(1005,'SMITH','1974-08-02','男','56116710','本科','主管','');
insert into emp values(1006,'LILY','1974-06-01','女','43134514','硕士','主管','');
insert into emp values(1007,'LUCY','1975-06-01','女','45234534','大专','市场专员','');
~~~~~~
insert into salary values('001',4500,1001);
insert into salary values('002',6600,1002);
insert into salary values('003',7900,1003);
insert into salary values('004',2300,1004);
insert into salary values('005',3870,1005);
insert into salary values('006',2870,1006);
insert into salary values('007',5870,1007);
------------------------------------------------------
4.修改数据,将电话号码以56开头的所有的人员的薪水加上500
update salary s join emp e on s.empno=e.empno set s.sal=s.sal+500 where e.tel like '56%';
------------------------------------------------------
5.查询工资在4000--7000之间,名字中有“AM”的人员的全部信息
select e.*,s.* from emp e join salary s on e.empno=s.empno where s.sal between 4000 and 7000 and e.ename like '%AM%';
------------------------------------------------------
6.查询1974年之后出生的,学历为“硕士”的人员的全部信息
select e.*,s.* from emp e join salary s on e.empno=s.empno where e.edu='硕士' and e.ebirthday>'1974';
------------------------------------------------------
7. 查询出年龄最大和年龄最小的2个员工的全部信息
select e.*,s.* from emp e,(select min(ebirthday) as min,max(ebirthday) as max from emp) st,salary s
where e.empno=s.empno and (e.ebirthday>=st.max or e.ebirthday<=st.min);
------------------------------------------------------
8.查询出所有与姓名为‘MIKE’的同年出生、同性别的人员的全部信息
select e.*,s.* from emp e,(select ebirthday as birth,ssex as sex from emp where ename='MIKE') st,salary s
where e.empno=s.empno and e.ssex=st.sex and substring(e.ebirthday,1,4)=substring(st.birth,1,4);
------------------------------------------------------
9.查询出部门号为001和003的的人员的全部信息
select s.*,e.* from salary s left join emp e on s.empno=e.empno where s.deptno in ('001','003');
------------------------------------------------------
10.创建一个存储过程,查询人员是主管的全部信息
create procedure p() select s.*,e.* from salary s join emp e on s.empno=e.empno where e.job='主管';
输入call p();即可查看结果.
/** 更高级的查询 **/
create procedure qu(in param char(30))
begin
declare v char(30);
set v=param;
if v='' then
select s.*,e.* from salary s join emp e on s.empno=e.empno;
else
select s.*,e.* from salary s join emp e on s.empno=e.empno where e.job=v;
end if;
end;
输入:call qu('主管');查询主管,输入:call qu('');查询所有,同理输入:call qu('总经理');
-------------------------------------------------------
总结,花了点时间帮你认真的在mysql平台上写完了(sql2000没有装,所以没有验证,不过应该没有问题),这个题不难,但是要时间
你的数据我修改了部分,因为是做题的过程中我发现少了些数据,我就组加上了,当然,没有数据也是正确的,只是为了方便你学习,查询的时候不至于出不来数据
如果有问题可以MAIL我。 也可以到www.wsleo.com/上找我
create table emp(
empno int(4) not null auto_increment,
ename varchar(30) not null,
ebirthday date not null,
ssex varchar(3) not null,
tel varchar(12),
edu varchar(30),
job varchar(30) not null,
primary key(empno)
);
create table salary(
deptno varchar(30) not null,
sal decimal(6,1) not null default 0,
empno int(4) not null,
primary key(deptno),
foreign key(empno) references emp(empno)
);
------------------------------------------------------
2.修改表信息,给emp表添加一个字段“addr”
alter table emp add addr varchar(100);
------------------------------------------------------
3.向“员工表”、“薪水表”中添加数据(数据如表1、2)
insert into emp values(1001,'BLAKE','1974-12-11','男','33123456','本科','市场专员','');
insert into emp values(1002,'SCOTT','1974-10-02','男','33123456','大专','总经理','');
insert into emp values(1003,'JAMES','1974-04-02','男','56119676','博士','主管','');
insert into emp values(1004,'MIKE','1974-01-02','女','45134514','硕士','主管','');
insert into emp values(1005,'SMITH','1974-08-02','男','56116710','本科','主管','');
insert into emp values(1006,'LILY','1974-06-01','女','43134514','硕士','主管','');
insert into emp values(1007,'LUCY','1975-06-01','女','45234534','大专','市场专员','');
~~~~~~
insert into salary values('001',4500,1001);
insert into salary values('002',6600,1002);
insert into salary values('003',7900,1003);
insert into salary values('004',2300,1004);
insert into salary values('005',3870,1005);
insert into salary values('006',2870,1006);
insert into salary values('007',5870,1007);
------------------------------------------------------
4.修改数据,将电话号码以56开头的所有的人员的薪水加上500
update salary s join emp e on s.empno=e.empno set s.sal=s.sal+500 where e.tel like '56%';
------------------------------------------------------
5.查询工资在4000--7000之间,名字中有“AM”的人员的全部信息
select e.*,s.* from emp e join salary s on e.empno=s.empno where s.sal between 4000 and 7000 and e.ename like '%AM%';
------------------------------------------------------
6.查询1974年之后出生的,学历为“硕士”的人员的全部信息
select e.*,s.* from emp e join salary s on e.empno=s.empno where e.edu='硕士' and e.ebirthday>'1974';
------------------------------------------------------
7. 查询出年龄最大和年龄最小的2个员工的全部信息
select e.*,s.* from emp e,(select min(ebirthday) as min,max(ebirthday) as max from emp) st,salary s
where e.empno=s.empno and (e.ebirthday>=st.max or e.ebirthday<=st.min);
------------------------------------------------------
8.查询出所有与姓名为‘MIKE’的同年出生、同性别的人员的全部信息
select e.*,s.* from emp e,(select ebirthday as birth,ssex as sex from emp where ename='MIKE') st,salary s
where e.empno=s.empno and e.ssex=st.sex and substring(e.ebirthday,1,4)=substring(st.birth,1,4);
------------------------------------------------------
9.查询出部门号为001和003的的人员的全部信息
select s.*,e.* from salary s left join emp e on s.empno=e.empno where s.deptno in ('001','003');
------------------------------------------------------
10.创建一个存储过程,查询人员是主管的全部信息
create procedure p() select s.*,e.* from salary s join emp e on s.empno=e.empno where e.job='主管';
输入call p();即可查看结果.
/** 更高级的查询 **/
create procedure qu(in param char(30))
begin
declare v char(30);
set v=param;
if v='' then
select s.*,e.* from salary s join emp e on s.empno=e.empno;
else
select s.*,e.* from salary s join emp e on s.empno=e.empno where e.job=v;
end if;
end;
输入:call qu('主管');查询主管,输入:call qu('');查询所有,同理输入:call qu('总经理');
-------------------------------------------------------
总结,花了点时间帮你认真的在mysql平台上写完了(sql2000没有装,所以没有验证,不过应该没有问题),这个题不难,但是要时间
你的数据我修改了部分,因为是做题的过程中我发现少了些数据,我就组加上了,当然,没有数据也是正确的,只是为了方便你学习,查询的时候不至于出不来数据
如果有问题可以MAIL我。 也可以到www.wsleo.com/上找我
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询