oracle直接访问mysql的表_oracle数据库多表查询连接

764bb0576b7066a9f084c02471efa6c7.png

多表查询连接

一、 多表查询外连接的方式:

(+) 号 外连接

Inner join 内连接

Left outer join --outer 可以省略 外连接

Right outer join

Full outer join

用(+)的语法简洁,容易读懂,但只是ORACLE支持,LEFT JOIN是通用的,其它没有差别

二、 连接的作用:

实例:

create table out_join1(

id_1 varchar2(20),

name_1 varchar2(25)

)

create table out_join2(

id_2 varchar2(20),

name_2 varchar2(25)

)

insert into out_join1 values('1','daniel');

insert into out_join1 values('3','justin');

insert into out_join1 values('5','william');

insert into out_join1 values('6','demon');

insert into out_join1 values('7','david');

insert into out_join2 values('1','c_daniel');

insert into out_join2 values('2','irs');

insert into out_join2 values('3','c_justin');

insert into out_join2 values('4','linda');

insert into out_join2 values('5','c_william');

l 简单的等值连接 称为内连接 取两个表相同的记录

select id_1,id_2 from out_join1 ,

out_join2 where id_1=id_2

select id_1,id_2 from out_join1

inneer join out_join2 on id_1=id_2

结果集为:1,3,5

含义:取id_1=id_2的所有值

l 左连接:使用左连接 和 left join 结果集是相同的

select id_1,id_2, from out_join1 ,

out_join2 where id_1=id_2(+)

select id_1,id_2, from out_join1 left join

out_join2 on id_1=id_2

结果都为

10118a6969a6da76fb5c43f2c37d0b04.png

含义:右条件所在的表必须严格进行相等连接条件的匹配,而左条件所在的表除了匹配相等连接条件外,还可以显示无法匹配连接条件的数据!

也称为左外连接。

l 右连接:使用左连接 和 right join 结果集是相同的

select id_1,id_2, from out_join1 ,

out_join2 where id_1(+)=id_2

select id_1,id_2 from out_join1 right join

out_join2 on id_1=id_2

结果集为:

a3dabbd85da8fbe6c9c06f4a1d399d2e.png

含义:左条件所在的表必须严格进行相等连接条件的匹配,而右条件所在的表除了匹配相等连接条件外,还可以显示无法匹配连接条件的数据!

也称为右外连接.

l FULL OUTER JOIN:全外关联

select id_1,id_2,name_1,name_2 from out_join1 full join

out_join2 on id_1=id_2

结果集为:

23518bb4dc978a2a2399553f9340f9dd.png

含义: 取 两个表的所有记录

三、 外连接的注意事项:

1)你不可以在查询块中使用(+) 当它同时包含 join的from语句中

2)(+)只是在where语句中,并且只能对应一个表或视图的一行字段

3)如果A和B做联接时有多个条件,那么(+)必须完善所有的匹配条件,

如果没有 ,oracle不会警告你~只是结果自然不同的

4)不可以在作出一个表外查询 另张表内查询的(+)联接操作~~

5)不可以用(+)外联接到自己 当然Self Join是可以的

6)含(+)的Where后的注意含(+)的Where后的注意OR不可用

IN不可用 子查询不可用

7) (+)是单向的 a(+)=b(+) 是错误的 可以使用 full join

总结

现在的Outer Join方法是Oracle9i时开始引用的 ANSI标准的联接语法,现在的则比较直观 简单

通过上边Full Join的实现方式 不难看到ANSI的联接语法要比用含Union的(+)的执行效率更高

如果是 三个表关联,必须有两个关联条件 n 表关联必须有n-1个条件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现跨数据库进行循环关联数据,可以使用Java中的JDBC来连接不同的数据库,然后在Java代码中进行数据关联和处理。 具体步骤如下: 1. 使用JDBC连接MySQLOracle数据库,获取两个数据库的Connection对象。 2. 分别查询MySQLOracle数据库中的数据,使用ResultSet对象获取数据。 3. 在Java代码中进行循环和关联,处理数据,可以采用多种方式,例如使用Map存储数据,使用对象封装数据等。 4. 最后关闭ResultSet、Statement和Connection对象,释放资源。 示例代码: ``` //连接MySQL数据库 Class.forName("com.mysql.jdbc.Driver"); Connection conn1 = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); //连接Oracle数据库 Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn2 = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "username", "password"); //查询MySQL数据 Statement stmt1 = conn1.createStatement(); ResultSet rs1 = stmt1.executeQuery("SELECT * FROM table1"); //查询Oracle数据 Statement stmt2 = conn2.createStatement(); ResultSet rs2 = stmt2.executeQuery("SELECT * FROM table2"); //循环关联数据 Map<String, Object> map = new HashMap<>(); while (rs1.next()) { String key = rs1.getString("key"); while (rs2.next()) { if (rs2.getString("key").equals(key)) { map.put(key, rs2.getObject("value")); } } } //关闭ResultSet、Statement和Connection对象 rs1.close(); rs2.close(); stmt1.close(); stmt2.close(); conn1.close(); conn2.close(); ``` 注意事项: 1. 在实际应用中,需要根据具体的业务需求进行优化和改进,例如使用连接池管理数据库连接,使用缓存提高查询效率等。 2. 数据库连接信息需要根据实际情况进行修改,例如修改数据库的IP地址、端口号、用户名和密码等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值