— 练习1
— 查询所有员工信息。显示员工编号, 员工姓名, 工资, 职务名称, 职务描述
select e.id 员工编号, e.ename 员工姓名, e.salary 工资, j.jname 职务名称, j.description 职务描述 from emp e inner join job j on e.job_id = j.id;
— 练习2
— 查询所有员工信息。显示 员工编号, 员工姓名, 工资, 职务名称, 职务描述, 部门名称, 部门位置
— 1.根据需求明确查询哪些表: emp, job, dept
— 2.明确表连接条件去掉笛卡尔积
— 3.后续的查询
select e.id 员工编号, e.ename 员工姓名, e.salary 工资, j.jname 职务名称,j.description 职务描述,d.dname 部门名称, d.loc 部门位置
# 先通过外键和主键将两张表连起来,后再通过第三表的外键连上第三张表即可;
from emp e inner join job j on e.job_id=j.id
inner join dept d on d.id = e.dept_id;
— 练习3
— 查询经理的信息。显示员工姓名, 工资, 职务名称, 职务描述, 部门名称, 部门位置, 工资等级
— 1.根据需求明确查询哪些表: emp, job, dept, salarygrade
— 2.明确表连接条件去掉笛卡尔积
— 3.后续的查询
select *
from emp e
# 再链接表的时候没有主外键的情况下可以利用条件链接:
inner join job j on j.id = e.job_id
inner join dept d on e.dept_id = d.id
# 判断员工工资的范围在哪个等级
inner join salarygrade s on e.salary between s.losalary and s.hisalary where j.jname=’经理’;
— 练习4
— 查询出部门编号、部门名称、部门位置、部门人数(员工表)
— 保证右表(部门表)中所有的数据全部出现,使用右连接
select d.id 部门编号, d.dname 部门名称, d.loc 部门位置,count(e.id)部门人数
from emp e right join dept d on e.dept_id=d.id group by d.id;
— 练习5
— 列出所有员工的姓名及其直接上级领导的姓名, 没有上级领导的员工也需要显示,显示自己的名字和领导的名字
— 1.根据需求明确查询哪些表: emp pt, emp ld
— 2.明确表连接条件去掉笛卡尔积
— 3.后续的查询
select d.ename 员工姓名,m.ename 领导名字
# 查询对应领导的id
from emp d left join emp m on d.mgr=m.id ;