多表询练习题15道

首先给出三个主表,分别表示员工表、部门表、等级表

create table emp1(
       id int auto_increment  comment 'ID' primary key,
       name varchar(50) not null comment '姓名',
       age int comment '年龄',
       job varchar(20) comment '职位',
       salary int comment '薪资',
       entrydate date comment '入职时间',
       managerid int comment '直属领导ID',
       dept_id int comment '部门ID'
    )comment'员工表';
alter table emp1 add constraint fk_emp1_dept_id foreign key (dept_id) references dept(id);
create table dept (
    id int auto_increment comment 'ID' primary key,
    name varchar(50) not null comment'部门名称'
    )
    comment'部门表';
create table salgrade(
    grade int,
    losal int, -- 最低薪资
    hisal int  -- 最高薪资
)comment '薪资等级表';

接下来是题目以及对应sql语句

-- 1.查询员工的姓名,年龄,职位,部门信息(隐式内连接)
select e.name,e.age,e.job,d.name from emp1 e,dept d where dept_id=d.id;
-- 2.查询年龄小于30岁的员工的姓名,年龄,职位,部门信息(显示内连接)
select e.name,e.age,e.job,d.name from emp1 e inner join dept d on e.dept_id = d.id where e.age<30;
-- 3.查询拥有员工的部门ID,部门名称(内连接)
select distinct d.id,d.name from emp1 e,dept d where e.dept_id=d.id;
-- 4.查询所有年龄大于40岁的员工,及其所归属的部门,没有分配部门也要表示(左外连接)
select e.*,d.name from emp1 e left join dept d on e.dept_id = d.id where age>40;
-- 5.查询所有员工的工资等级
select e.*,s.grade,s.losal,s.hisal from emp1 e,salgrade s where e.salary between  s.losal and s.hisal;
-- 6.查询‘研发部’所有人员的信息及其工资等级
select e.* ,s.grade from emp1 e,dept d ,salgrade s where e.dept_id=d.id and (e.salary between s.losal and s.hisal) and d.name='研发部';
-- 7.查询‘研发部’的平均工资
select avg(e.salary)from emp1 e,dept d where e.dept_id=d.id and d.name='研发部';
-- 8.查询比灭绝工资高的员工信息
select *from emp1 where salary >(select salary from emp1 where name='灭绝');
-- 9.查询比平均薪资高的员工信息
select *from emp1 where salary>(select avg(salary)from emp1);
-- 10.查询低于本部门平均工资的员工信息
select *,(select avg(e1.salary) from emp1 e1 where e1.dept_id=e2.dept_id) '平均'from emp1 e2 where e2.salary<(select avg(e1.salary) from emp1 e1 where e1.dept_id=e2.dept_id);
-- 11.查询所有的部门信息,并统计部门的员工人数
select d.id,d.name ,(select count(*)from emp1 e where e.dept_id=d.id) '人数'from dept d;
-- 12。查询所有学生的选课情况,展示出学生名称,学号,课程名称
select s.name ,s.no,c.name from students s,student_course sc,course c where s.id=sc.studentid and c.id=sc.courseid;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值