oracle连接问题【转载】

SQL的四种连接-左外连接、右外连接、内连接、全连接

今天在看一个遗留系统的数据表的时候发现平时查找的视图是FULL OUT JOIN的,导致平时的数据记录要进行一些限制性处理,其实也可以设置视图各表为右外连接并在视图上设置各列的排序和筛选条件就可以达到效果。

联接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定联接条件。WHERE和HAVING子句也可以包含搜索条件,以进一步筛选联接条件所选的行。    
联接可分为以下几类:

1、内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符)。包括相等联接和自然联接。     
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。   
    
2、外联接。外联接可以是左向外联接、右向外联接或完整外部联接。     
在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:

1)LEFT  JOIN或LEFT OUTER JOIN     
左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

2)RIGHT  JOIN 或 RIGHT  OUTER  JOIN     
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。       
3)FULL  JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。   
    
3、交叉联接   
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

FROM 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外联接排列表的更多信息,请参见使用外联接。     
    
例子:

-------------------------------------------------
  a表     id   name     b表     id   job   parent_id   
              1   张3                   1     23     1   
              2   李四                 2     34     2   
              3   王武                 3     34     4       
  a.id同parent_id   存在关系

--------------------------------------------------    
 1) 内连接   
  select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id       
  结果是     
  1   张3                   1     23     1   
  2   李四                  2     34     2   
    
  2)左连接   
  select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id       
  结果是     
  1   张3                   1     23     1   
  2   李四                  2     34     2   
  3   王武                  null

3) 右连接   
  select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id       
  结果是     
  1   张3                   1     23     1   
  2   李四                  2     34     2   
  null                       3     34     4   
    
 4) 完全连接   
  select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id

结果是     
  1   张3                  1     23     1   
  2   李四                 2     34     2   
  null                   3     34     4   
  3   王武                 null

时间: 2024-10-12 00:34:05

oracle连接问题【转载】的相关文章

oracle三大范式(转载)

标准化表示从你的数据存储中移去数据冗余 (redundancy)的过程.如果数据库设计达到了完全的标准化,则把所有的表通过关键字连接在一起时,不会出现任何数据的复本 (repetition).标准化的优点是明显的,它避免了数据冗余,自然就节省了空间,也对数据的一致性(consistency)提供了根本的保障, 杜绝了数据不一致的现象,同时也提高了效率. 第一范式(1NF;The First Normal Form) 第一范式是最低的规范化要求,第一范式要求数据表不能存在重复的记录,即存在一个关键

Navicat for Oracle 连接 Oracle 11G 操作流程

Navicat for Oracle 连接 Oracle 11G 操作流程 1 更改Oracle配置文件 在安装完Oracle 11g之后,需要更改C:\Oracle安装基目录\product\11.2.0\dbhome_1\NETWORK\ADMIN下的listener.ora和tnsnames.ora两个文件.记得,要先将这两个文件备份.然后参考下图,将每个文件中的localhost改为Oracle安装计算机的计算机名. 最后,在Windows的运行中,输入services.msc,进入系统

SqlServer中创建Oracle连接服务器

转自太祖元年的:http://www.cnblogs.com/jirglt/archive/2012/06/10/2544025.html参考:http://down.51cto.com/data/910072SqlServer中创建Oracle连接服务器 第一种:界面操作 (1)展开服务器对象-->链接服务器-->右击“新建链接服务器”(2)输入链接服务器的IP (3)链接成功后 第二种:语句操作 注:需要提前安装Oracle客户端程序,重启机器.(如果没有Oracle客户端程序,提示“未找

【Oracle连接字符串】【Oracle Net Manager 服务命名配置】【PL/SQL 登陆数据库】

连接数据库的几个重要参数: 1. 登陆用户名:user: 2. 登录密码:password: 3. 存放数据库的服务器地址(server_ip)和端口(server_port): 4. 数据库名(db_name): 一.Oracle连接字符串 我们如果要连接db_name这个数据,除了用户名密码以外,还需要输入类似“server_ip:server_port/db_name”这样一个连接字符串. <add key="ConnectionString" value="Da

oracle 连接不上ORA-12162: TNS:net service name is incorrectly specified的另外一种可能原因

用sqlplus连接oracle数据库时报错: [[email protected] ~]# sqlplus oracle/[email protected]//10.5.0.7:1521/ssp SQL*Plus: Release 11.1.0.7.0 - Production on Thu Jun 26 10:16:21 2014 Copyright (c) 1982, 2008, Oracle.  All rights reserved. ERROR: ORA-12528: TNS:lis

关于oracle连接的关闭

在网上搜索"关闭连接后resultset取值会有问题吗"看到好几次这样的观点: 发表时间:2005-01-26  robbin 如果你不使用连接池,那么就没有什么问题,一旦Connection关闭,数据库物理连接就被释放,所有相关Java资源也可以被GC回收了. 但是如果你使用连接池,那么请注意,Connection关闭并不是物理关闭,只是归还连接池,所以PreparedStatement和ResultSet都被持有,并且实际占用相关的数据库的游标资源,在这种情况下,只要长期运行,往往

asp.net与oracle连接字符串

asp.net与oracle连接字符串 connectionString="Password=czh;User ID=czh;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.168.211)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=skydream)));" HOST:服务器IP或者服务器名称 SERVICE

oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! oracle连接总结(内连接.外连接.自然连接,交叉连接,自连接) 1.简述  1) 两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的.用来连接两张表的表达式组成了连接条件.当连接成功后,第二张表中的数据就同第一张表连接起来了,并形成了复合结果集 2) 有5种基本类型的的连接,inner,outer,natural,cross连接,自连接. 2.说明与例子 1)内连接 (inner join (可简写为j

Oracle归档日志满了导致Oracle连接(ORA-00257)报错处理

最近一段时间,有收到一台Oracle服务器的连接告警, 刚刚开始还以为是Oracle的监听被关闭导致,结果连上服务器看下Oracle的监听进程正常,自己连接一次发现有报ORA-00257错,又去监控系统中在看下日志再用sqlplus连上Oracle后查了下,知道是Oracle的归档日志写满闪回区导致Oracle连接异常,查看归档日志方法如下: SQL> show parameter db_recovery_file_dest; #查看归档日志的物理路径及闪回区的大小 SQL> select f

oracle连接进程数设置

SQL> select count(*) from v$session #连接数SQL> Select count(*) from v$session where status='ACTIVE' #并发连接数SQL> show parameter processes #最大连接 process:这个参数限制了能够连接到SGA的操作系统进程数(或者是Windows 系统中的线程数),这个总数必须足够大,从而能够适用于后台进程与所有的专用服务器进程,此外,共享服务器进程与调度进程的数目也被计