表说明
员工表 emp
部门表 dept
工资等级表
多表查询
简单多表查询
1、笛卡尔积(避免产生)
select * from emp,dept
2、关联查询
查询员工的的编号,姓名,部门编号,部门名称
select e.empno 员工编号,
e.ename 员工姓名,
d.deptno 部门编号,
d.dname 部门名称
from emp e, dept d
where e.deptno = d.deptno
3、自连接
查询出每个雇员的姓名、工作、雇员的直接上级领导的姓名
select e1.ename 员工姓名, e1.job 员工职位, e2.ename 上级领导
from emp e1, emp e2
where e1.mgr = e2.empno
4、更多表关联
select e1.ename 员工姓名, e1.job 员工职位, e2.ename 上级领导, d.dname 部门
from emp e1, emp e2, dept d
where e1.mgr = e2.empno
and e1.deptno = d.deptno
面试题:
世界杯小组分组,共4支球队:中国、日本、澳大利亚、沙特阿拉伯
每两支球队,轮询比赛,求比赛组合情况
建表
create table team(
Team_name varchar2(30)
);
插入数据
insert all into team
values
('中国') into team
values
('日本') into team
values
('澳大利亚') into team
values
('阿拉伯')
select 1 from dual;
commit;
求组合情况
select t1.team_name || ' VS ' || t2.team_name
from team t1, team t2
where t1.team_name > t2.team_name
外连接
1、右外连接
注意:
(+)是oracle数据库特有写法,其他数据库没有
(+)在左边,表示右连接,会列出右表中出现但是在左表中没有出现的行
查询员工编号,姓名,所在部门号,部门名称,将没有员工的部门也显示出来
select e.empno, e.ename, d.deptno, d.dname
from emp e, dept d
where e.deptno(+) = d.deptno
2、左外连接
查询雇员的编号,姓名及其领导的编号,将没有领导的员工也列出来
select e.empno, e.ename, m.empno, m.ename
from emp e, emp m
where e.mgr = m.empno(+)
3、SQL1999对连接查询的支持(通用)
(1) cross join(交叉连接):产生笛卡尔积
(2) nature join(自然连接):自动进行关联字段匹配
select * from emp e natural join dept d --根据共同字段deptno进行匹配
(3) left join…on (左外连接):
表1 left join 表2 on 表1.字段 = 表2.字段
(4) right join…on (右外连接):
表1 right join 表2 on 表1.字段 = 表2.字段
(5) 全外连接
表1 full join 表2 on 表1.字段 = 表2.字段