oracle基础 第八篇 多表查询

10 篇文章 0 订阅
2 篇文章 0 订阅

使用连接在多个表中查询数据:

在 WHERE 子句中写入连接条件

在表中有相同列时,在列名之前加上表名前缀。

使用表名前缀在多个表中区分相同的列

在不同表中具有相同列名的列可以用表的别名加以区分。

使用别名可以简化查询。

使用表名前缀可以提高执行效率

 

 

内连接和外连接:

内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行。

外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接。

没有匹配的行时, 结果表中相应的列为空(NULL)。

外连接的 WHERE 子句条件类似于内部连接, 但连接条件中没有匹配行的表的列后面要加外连接运算符, 即用圆括号括起来的加号(+)。

一、内连接:

1、等值连接:

例如:

方式1:


SELECT
	A .employee_id,
	b.department_id,
	b.department_name
FROM
	employees A,
	departments b
WHERE
	A .department_id = b.department_id;

方式2(join+ 连接的表名+on+匹配条件):

 SELECT
   a.last_name ,
   a.department_id ,
   b.department_name 
FROM
  employees a
JOIN departments b ON a.department_id=b.department_id;

 

三张表查询:

方式1:

SELECT
	A .employee_id,
	b.department_id,
	b.department_name,
	c.city
FROM
	employees A,
	departments b,
	locations c
WHERE
	A .department_id = b.department_id
AND b.location_id = c.location_id;

 

方式2:

SELECT
	a .last_name,
	a .department_id,
	b.department_name,
	c.city
FROM
	employees a
JOIN departments b ON a .department_id = b.department_id
JOIN locations c ON b.location_id = c.location_id;

 

总结:连接 n个表,至少需要 n-1个连接条件

 

 

2、非等值连接:

例如:

SELECT
	employee_id,
	last_name,
	grade_level
FROM
	employees A,
	job_grades b
WHERE
	A .salary BETWEEN b.lowest_sal
AND b.highest_sal;

二、外连接:

左外连接:

方式1:

SELECT
	a .last_name,
	a .department_id,
	b.department_name
FROM
	employees a,
	departments b
WHERE
	a.department_id = b.department_id(+);

方式2:

SELECT
	A .last_name,
	A .department_id,
	b.department_name
FROM
	employees A
LEFT OUTER JOIN departments b ON A .department_id = b.department_id;

 

右外连接:

方式1:

SELECT
	a .last_name,
	a .department_id,
	b.department_name
FROM
	employees a,
	departments b
WHERE
	a.department_id(+) = b.department_id;

方式2:

SELECT
	A .last_name,
	A .department_id,
	b.department_name
FROM
	employees A
RIGHT OUTER JOIN departments b ON A .department_id = b.department_id;

 

满外连接:

SELECT
	A .last_name,
	A .department_id,
	b.department_name
FROM
	employees A
FULL OUTER JOIN departments b ON A .department_id = b.department_id;

 

自连接:

查询公司中员工'chen'的manager的信息:

SELECT
	empl.last_name,
	manager.employee_id,
	manager.last_name,
	manager.manager_id,
	manager.salary,
	manager.email
FROM
	employees empl,
	employees manager
WHERE
	empl.manager_id = manager.employee_id
AND LOWER (empl.last_name) = 'chen';

 

参考来自尚硅谷视频

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风而行无疾而歌

看官,觉得不错,奖励一下呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值