写法一:
SELECT * FROM TABLE_A A, TABLE_B B, TABLE_C C
WHERE A.A_ID = B.A_ID
AND B.C_ID = C.C_ID
;写法二:
SELECT * FROM TABLE_A A
LEFT OUTER JOIN TABLE_B B
ON A.A_ID = B.A_ID
LEFT OUTER JOIN TABLE_C C
ON B.C_ID = C.C_ID
;请问1和2是一样的吗?如果不一样,写法一到底是个什么意思?写法二我知道是什么意思
SELECT * FROM TABLE_A A, TABLE_B B, TABLE_C C
WHERE A.A_ID = B.A_ID
AND B.C_ID = C.C_ID
;写法二:
SELECT * FROM TABLE_A A
LEFT OUTER JOIN TABLE_B B
ON A.A_ID = B.A_ID
LEFT OUTER JOIN TABLE_C C
ON B.C_ID = C.C_ID
;请问1和2是一样的吗?如果不一样,写法一到底是个什么意思?写法二我知道是什么意思
解决方案 »
- oracle10g监听程序当前无法识别连接描述符中请求的服务
- pl/sql登陆失败问题
- ~~~~~~~~~~~GROUP BY 问题~~~~~~~~!!!
- 怎么限制用户不能查询所有系统字典表。
- 紧急,求助一个简单的语句!!!!!!!!!
- oracle8.1.7与form5.0装在同一台电脑后,连接数据时提示ORA-03121?
- 新人求救,如何用企业管理建表的时候能够像SQL SERVER 那样让主键自动+1
- ORACEL基本提问!
- 简单的问题,如何能用一条命令删除一个自建的用户,如user1下的所有表呢?
- 关于Oracle的TM锁问题
- 菜鸟请教Oracle触发器写了2个都不行第一次写。
- 关于一个数据库表的设计问题
WHERE A.A_ID = B.A_IDFROM TABLE_A A
INNER JOIN TABLE B B
ON A.A_ID = B.A_ID也就是说这两种写法的效果是一样的?
比如 col in (1,2,3) 与 col=1 or col=2 or col=3 这不就是等效的么...
sql语句在执行前,会进行变型,变换成优化器容易识别的等效SQL,如果你对优化器识别的那种SQL感兴趣,可以去学学,减少一个变型的步骤,是可以稍微提升点效率的。
如果你想做外连接,并且使用第一种写法,那么可以这样:SELECT *
FROM table_a a, table_b b, table_c c
WHERE a.a_id(+) = b.a_id
AND b.c_id(+) = c.c_id
insert into table_a values(1,'a');
insert into table_a values(2,'b');
insert into table_a values(3,'c');
commit;create table table_b (id_1 number,id_2 varchar(2));
insert into table_b values(2,'a');
insert into table_b values(3,'b');
insert into table_b values(4,'c');
commit;create table table_c (id_1 number,id_2 varchar(2));
insert into table_c values(5,'a');
insert into table_c values(6,'c');
insert into table_c values(7,'e');
commit;写法一:(内连接)
SELECT * FROM TABLE_A A, TABLE_B B, TABLE_C C
WHERE A.id_1 = B.id_1
AND B.id_2 = C.id_2
等同于
SELECT *
FROM TABLE_A A
inner join TABLE_B B on a.id_1=b.id_1
inner_join TABLE_C C on B.id_2 = C.id_2结果:
ID_1 ID_2 ID_1 ID_2 ID_1 ID_2
1 2 b 2 a 5 a写法二:
SELECT * FROM TABLE_A A
LEFT OUTER JOIN TABLE_B B
ON A.id_1 = B.id_1
LEFT OUTER JOIN TABLE_C C
ON B.id_2 = C.id_2
结果:
ID_1 ID_2 ID_1 ID_2 ID_1 ID_2
1 2 b 2 a 5 a
2 1 a
3 3 c 3 b