--创建数据表以及添加测试数据 create table TEST_A(ID NUMBER not null) create table TEST_B(ID NUMBER not null) insert into TEST_A values(1); insert into TEST_A values(2); insert into TEST_A values(3); insert into TEST_B values(1); insert into TEST_B values(2); insert into TEST_B values(4); commit;
数据表的连接有:
1、内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现
select * from test_a a ,test_b b where a.id=b.id
2、外连接: 包括
(1)左外连接(左边的表不加限制,即以左边的表为主表)
主流关系型数据库用法:a left join b on ...
select * from test_a a left join test_b b on a.id=b.id;
oracle中还可以用(+),(+)放在“=”号的右边;
select * from test_a a ,test_b b where a.id=b.id(+)
查询结果如下:
(2)右外连接(右边的表不加限制,即以右边的表为主表)
主流关系型数据库用法:a right join b on ...
select * from test_a a right join test_b b on a.id=b.id;
oracle中还可以用(+),(+)放在“=”号左边;
select * from test_a a ,test_b b where a.id(+)=b.id;
查询结果如下:
(3)全外连接(左右两表都不加限制)
主流关系型数据库用法:a full join b on ...
select * from test_a a full join test_b b on a.id=b.id;
oracle中还可以用两个带(+)的查询结果的union
select * from test_a a,test_b b where a.id(+)=b.id union select * from test_a a,test_b b where a.id=b.id(+);
查询结果如下:
4、交叉连接,也加完全连接或者笛卡尔积
主流关系型数据库用法:a cross join b
select * from test_a,test_b;
或者
select * from test_a cross join test_b;
查询结果如下:
5、自然连接
虽然natural join(自然连接)实际上的用的比较少,但实际上这个连接是非常有用的,若能经常使用一下,实际上是非常方便的。
自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。
给上述两张表分别加上name1,name2字段,方便更好的理解自然连接。
ALTER TABLE test_a ADD name1 varchar2(32) ; ALTER TABLE test_b ADD name2 varchar2(32) ;
并且增加相应的值。
执行下面的代码:
select a.name1,b.name2 from test_a a natural join test_b b;
查询结果如下:
这里我们并没有指定连接的条件,实际上oracle为我们自作主张的将test_a表中的id和test_b表中的id做了连接。也就是实际上相当于:
select a.name1,b.name2 from test_a a join test_b b on a.id=b.id;
因为这两张表的这两个字段id的类型个名称完全相同,所以使用natural join时被自然的连接在一起了。
另外:
1.如果做自然连接的两个表的有多个字段都满足有相同名称个类型,那么他们会被作为自然连接的条件。
2.如果自然连接的两个表仅是字段名称相同,但数据类型不同,那么将会返回一个错误。
3.由于oracle中可以进行这种非常简单的natural join,我们在设计表时,应该尽量在不同表中具有相同含义的字段使用相同的名字和数据类型,以方便以后使用natural join。
ps:
注意以下两种情况:
1、
select * from test_a a,test_b b where a.id=b.id(+) and b.id=2;
查询结果如下:
相关推荐
这是因为ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询..数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性...
您可能感兴趣的文章:常用的Oracle doc命令(收藏)Oracle 多行记录合并/连接/聚合字符串的几种方法Oracle中字符串连接的实现方法php连接oracle数据库及查询数据的方法plsql连接oracle数据库报ora 12154错
Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录
主要介绍了Java使用Jdbc连接Oracle执行简单查询操作,结合实例形式详细分析了java基于jdbc实现Oracle数据库的连接与查询相关操作技巧,需要的朋友可以参考下
C#连接Oracle数据库(查询数据)方法,好东西,分享一下
C#中连接oracle连接方法C#中连接oracle连接方法C#中连接oracle连接方法C#中连接oracle连接方法C#中连接oracle连接方法C#中连接oracle连接方法
word文件,深入讲解Oracle的外连接查询
本章主要讲解oracle客户端连接oracle效劳器,主要有以下内容: 1.配置本地net效劳名配置 2.用sqlplus连接; 3.用toad连接; 一、配置本地net效劳名 首先说明我们的效劳器的IP为60.220.246.53,oracle的SID为czdb。 ...
Oracle最大连接数
强制释放Oracle数据连接方案,经常会遇到数据库无法连接,发现是连接数超过限制,如何能够看到默认的数据库连接数量限制呢,如何能够增大数量限制呢? .......
JAVA 使用数据库连接池连接Oracle数据库,全代码,附加详细说明
oracle 左连接 右连接 学习 精选资料
oracle数据库连接工具oracle数据库连接工具oracle数据库连接工具
oracle遇到连接空闲例程时的做法
易语言连接ORACLE数据库查询报表。@jhlsn。Tags:ORACLE数据库。
Oracle左连接,右连接.doc Oracle左连接,右连接.doc
oracle数据库连接包 oracle数据库连接包 java的
Oracle SQL连接查询总结 缺省情况下是inner join,开发中使用的left join和right join属于outer join,另外outer join还包括full join.下面我通过图标让大家认识它们的区别。 现有两张表,Table A 是左边的表。Table ...
Oracle连接工具plsql11x64位Oracle连接工具plsql11x64位Oracle连接工具plsql11x64位Oracle连接工具plsql11x64位Oracle连接工具plsql11x64位Oracle连接工具plsql11x64位Oracle连接工具plsql11x64位Oracle连接工具...
首先需要下载oracle客户端,具体百度可以搜到,然后按照文档中的步骤,就可以配置成功。