请大家指教sql中(+)的用法! 外键连接,当2个表进行关连时,例如:A.tb_id=B.tb_id,那么如果不符合这一条件的记录将不会被显示使用的外键连接,例如:A.tb_id=B.tb_id(+),B表中的所有数据都会显示,而不在乎是否满足等式条件。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 举个例子:--TB_TEMP表中有11个手机号码,需要到TB_PHONE_NO表中查询他们对应的归属地信息(11行输出)。SQL> select * from tb_temp;PHONE_NO-------------1300240000113002410001130024200011300243000113002440001130024500011300246000113002470001130024800011300249000115900001111已选择11行。--由于TB_PHONE_NO表中没有15900001111的归属数据,所以该行没有正确显示(10行输出)。SQL> select a.phone_no,b.city_name from tb_temp A,tb_phone_no B 2 where substr(A.phone_no,1,7)=B.phone_no;PHONE_NO CITY_NAM------------- --------13002400001 沈阳13002410001 沈阳13002420001 沈阳13002430001 沈阳13002440001 沈阳13002450001 沈阳13002460001 沈阳13002470001 沈阳13002480001 沈阳13002490001 沈阳已选择10行。--由于TB_PHONE_NO表中没有15900001111的归属数据,但是使用的外键关系,所以该行仍旧正确显示(11行输出)。SQL> select a.phone_no,b.city_name from tb_temp A,tb_phone_no B 2 where substr(A.phone_no,1,7)=B.phone_no(+);PHONE_NO CITY_NAM------------- --------13002400001 沈阳13002410001 沈阳13002420001 沈阳13002430001 沈阳13002440001 沈阳13002450001 沈阳13002460001 沈阳13002470001 沈阳13002480001 沈阳13002490001 沈阳15900001111已选择11行。SQL> DF_4B(机车乘务员) :例如:A.tb_id=B.tb_id(+),B表中的所有数据都会显示,而不在乎是否满足等式条件。应该是"A表中的所有数据都会显示",而不是"B表中的所有数据都会显示" 吧? 二楼错了吧 a.name=b.name(+) 是左连接 显示A表中所有数据 a.name(+)=b.name 是右连接 显示B表中所有数据 a.name=b.name(+) 是左连接 显示A表中所有数据 a.name(+)=b.name 是右连接 显示B表中所有数据 没错 为什么有时会出现这种错误: a table may be outer joined to at most one other table? DF_4B(机车乘务员) 的解释很到位了。别给我分了,就这点。 oracle数据库的默认端口是多少 oracle主从表的问题! oracle中DBLINK问题求解 数据库主键的问题 在oracle 如何判断日期是否合法? oracle物理恢复 在java中调用oracle数据库中的存储过程 oracle表中的主关键字,如何设成自动增长?并对该字段插入数据?请写出SQL代码. 关于日期的问题 如何获取数据库表中字段类型和长度 问个数据转换问题 急!!! 我想停止JOB,是停止不是删除!在线等,结帖加分
--TB_TEMP表中有11个手机号码,需要到TB_PHONE_NO表中查询他们对应的归属地信息(11行输出)。
SQL> select * from tb_temp;PHONE_NO
-------------
13002400001
13002410001
13002420001
13002430001
13002440001
13002450001
13002460001
13002470001
13002480001
13002490001
15900001111已选择11行。
--由于TB_PHONE_NO表中没有15900001111的归属数据,所以该行没有正确显示(10行输出)。
SQL> select a.phone_no,b.city_name from tb_temp A,tb_phone_no B
2 where substr(A.phone_no,1,7)=B.phone_no;PHONE_NO CITY_NAM
------------- --------
13002400001 沈阳
13002410001 沈阳
13002420001 沈阳
13002430001 沈阳
13002440001 沈阳
13002450001 沈阳
13002460001 沈阳
13002470001 沈阳
13002480001 沈阳
13002490001 沈阳已选择10行。
--由于TB_PHONE_NO表中没有15900001111的归属数据,但是使用的外键关系,所以该行仍旧正确显示(11行输出)。
SQL> select a.phone_no,b.city_name from tb_temp A,tb_phone_no B
2 where substr(A.phone_no,1,7)=B.phone_no(+);PHONE_NO CITY_NAM
------------- --------
13002400001 沈阳
13002410001 沈阳
13002420001 沈阳
13002430001 沈阳
13002440001 沈阳
13002450001 沈阳
13002460001 沈阳
13002470001 沈阳
13002480001 沈阳
13002490001 沈阳
15900001111已选择11行。SQL>
例如:A.tb_id=B.tb_id(+),B表中的所有数据都会显示,而不在乎是否满足等式条件。
应该是
"A表中的所有数据都会显示",而不是"B表中的所有数据都会显示" 吧?
a.name=b.name(+) 是左连接 显示A表中所有数据
a.name(+)=b.name 是右连接 显示B表中所有数据
a.name(+)=b.name 是右连接 显示B表中所有数据 没错
a table may be outer joined to at most one other table
?