`
dangyafeng
  • 浏览: 25216 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Oracle中join left,join right,inner join,(+) 等

 
阅读更多

建表create table TEST1
create table TEST1
(
  t_id       VARCHAR2(21),
  t_name     VARCHAR2(21),
  t_mangerid VARCHAR2(21)
)

create table TEST2
(
  t_id   VARCHAR2(21),
  salary NUMBER
)

test1 暂且叫员工表吧,test2薪水表

在oracle中 外链接为 a  left/right join b on a.xx = b.xx其中join后面也可以添加outer也可以省略,相当于a.xx = b.xx (+)(此时为左链接),写法的历史与优劣本文暂不讨论,只针对简单的左右链接,外链接,全链接等,对应的关键字如下:

  CROSS JOIN        笛卡尔乘积(所有可能的行对)
INNER JOIN        仅对满足连接条件的CROSS中的列
LEFT OUTER JOIN        一个表满足条件的行,和另一个表的所有行
RIGHT OUTER JOIN        与LEFT相同,但两个表的角色互换
FULL OUTER JOIN        LEFT OUTER 和 RIGHT OUTER中所有行的超集

链接定义如下:

 连接类型        定义
内连接        只连接匹配的行
左外连接        包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
  右外连接        包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
全外连接        包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
(H)(theta)连接        使用等值以外的条件来匹配左、右两个表中的行
交叉连接        生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行  都一一匹配

现对以上每种链接做一个查询,在数据库中插入如下数据:

TEST1中

        1 001 dyf 003 

        2 002 xwc 003 
        3 003 mm  
TEST2中

        1 001 7000
        2 002 5000
        3 009 10000

 

 

  1. inner join内链接

           select a.t_name, b.salary
               from test1 a
             full join test2 b
                  on a.t_id = b.t_id

          结果如下 1 dyf 7000
                       2 xwc 5000
                       3        10000
                       4 mm 
    5.     自身链接

         select a.t_id,a.t_name, b.t_name
            from test1 a
          join test1 b
             on a.t_mangerid = b.t_id

         查询员工管理者的姓名

         结果如下 1 002 xwc mm
                      2 001 dyf mm
    6.     交叉无限制链接

          交叉连接用于对两个源表进行纯关系代数的乘运算。它不使用连接条件来限制结果集合,而是将分别来自两个数据源中的行以所有可能的方式进行组合。数据集合中一的每个行都要与数据集合二中的每一个行分别组成一个新的行。例如,如果第一个数据源中有5个行,而第二个数据源中有4个行,那么在它们之间进行交叉连接就会产生20个行。人们将这种类型的结果集称为笛卡尔乘积。
    大多数交叉连接都是由于错误操作而造成的;但是它们却非常适合向数据库中填充例子数据,或者预先创建一些空行以便为程序执行期间所要填充的数据保留空间。
        select a.t_id,a.t_name,b.t_id,b.salary
           from test1 a
             cross join test2 b

     

         select a.t_name, b.salary
            from test1 a
          inner join test2 b
              on a.t_id = b.t_id

  

        此语句与下面语句相同

          select a.t_name, b.salary
            from test1 a, test2 b

          where a.t_id = b.t_id

        查询的是员工的薪水,只有两个表中匹配才会出现查询出结果,结果如下

     1 dyf 7000
     2 xwc 5000

 

   2.    left join on左外连接

        
         select a.t_name, b.salary
           from test1 a
         left join test2 b
              on a.t_id = b.t_id

 

       与

       select a.t_name, b.salary
            from test1 a, test2 b

          where a.t_id = b.t_id(+)相同

         查询员工的薪水,不管新水表中是否有此员工的记录都会把此员工显示出来,结果如下

        1 dyf 7000
        2 xwc 5000
        3 mm 

 

  3.   right join on右外连接 

        

       select a.t_name, b.salary
           from test1 a
         right join test2 b
              on a.t_id = b.t_id
       

         查询员工的薪水,不管员工表中是否存在薪水表中对应的员工都会把薪水表数据选出来,结果如下

         1 dyf 7000
         2 xwc 5000
         3  10000
4.     full join on 全链接

         

分享到:
评论

相关推荐

    Oracle SQL连接查询总结.docx

    缺省情况下是inner join,开发中使用的left join和right join属于outer join,另外outer join还包括full join.下面我通过图标让大家认识它们的区别。 现有两张表,Table A 是左边的表。Table B 是右边的表。其各有四条...

    sql学习笔记

    sql练习中易错笔记,order by ,group by,distinct,内连接,外连接等,一些mysql和oracle使用的区别:sql4种连接 两个表中有相同的列,根据共有的列值匹配行 left join左外连接,不管左表是否在右表中有匹配行,都...

    数据库oracle各种连接(+)解释.pdf

    连接无非是这几个  --内连接和where相同 ... inner join  --左向外连接,  left join  --右向外连接,  right join  --完整外部连接,  full join  --交叉连接,也称笛卡儿积。 cross join .......

    Oracle 数据库连接查询SQL语句

    外连接: 全连接(full join)、左连接(left join)、右连接(right join)。 交叉联接(cross join)。 外连接与内连接不一样,外连接返回的查询结果中不仅包含符合条件的行,还包括左表(左外连接),右表(右外连接)...

    sql中各种连接详解

    Oracle的几种连接详解, left(right,inner)join和一般where的转换.

    MySQL常见面试题(表连接类型,count(*),count(列),count(1)的区别,索引,存储引擎,锁,优化)

    Oracle中支持全外连接,但MySQL不支持。 笛卡尔积:多表连接查询出来的结果,不去除任何未关联数据。例如表A有N条数据,表B有M条数据,查询出来的结果有N*M条。 内连接:使用inner join,表示查询出来两个表具有...

    SQL语句生成及分析器(中文绿色)

    3.7.1 SQL 92 标准:Inner Join、Left Join、Right Join、Full Join, 3.7.2 特殊语法:*=、=*、*=*(MS_SQL,Sybase),(+)(Oracle) 3.8 联合 (Union [All],Minus,Intersect) 3.9 字段别名,数据表别名 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。 四、 如何学习 认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 ...

    关于关系表的连接操作在SQLSERVER与Oracle中测试大全

    这是我个人通过长时间的实践与收集最后总结出来的基本关系表的连接操作实际应用,以及在某些情况下可以用普通的sql语句代替某些连接操作(即实现同样的功能)其中文件夹中已经包含了测试所需数据库,这是备份形式需...

    SQL语句生成及分析器

    内连接(inner join)和外连接(left join/right join/full join) 排序(Order By) 条件(Where) 分组(Group By) 分组条件(Having) 计算字段 SQL查询表 SQL查询子句 丰富的函数 表别名 字段别名 联合(Union...

    sql语句生成与分析器.rar

    3.7.1 SQL 92 标准:Inner Join、Left Join、Right Join、Full Join, 3.7.2 特殊语法:*=、=*、*=*(MS_SQL,Sybase),(+)(Oracle) 3.8 联合 (Union [All],Minus,Intersect) 3.9 字段别名,数据表别名 ...

    Sql 语句详解

    17. SQL INNER JOIN 关键字 22 18. SQL LEFT JOIN 关键字 23 19. SQL RIGHT JOIN 关键字 24 20. SQL UNION 和 UNION ALL 操作符 26 21. SQL SELECT INTO 语句 28 22. SQL CREATE DATABASE 语句 29 23. SQL CREATE ...

    精通SQL数据库连接.doc

    一些数据库,如SQL Server, Oracle和DB2也支持JOIN HINT关键字的概念。这些关键字被插入到JOIN声明中来控制JOIN被处理的顺序。例如,一个MERGE JOIN会在处理其他连接之前将两个表格连接在一起。HASH JOIN会将一个...

    阿里巴巴大数据之路——数据技术篇.pdf

    实例参考如下: SQL的Join语法有很多, inner join(等值连接) 只返回两个表中联结字段相等的⾏, left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录, right join(右联接) 返回包括右表中的...

    oracle数据库经典题目

    1.在多进程Oracle实例系统中,进程分为用户进程、后台进程和服务进程。 2.标准的SQL语言语句类型可以分为:数据定义语句(DDL)、数据操纵语句(DML)和数据控制语句(DCL)。 3.在需要滤除查询结果中重复的行时,必须...

    SQL语法大全

    SQL语法大全 SQL语法大全 1. ASP与Access数据库连接: dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access ...

    DNetORM源码 CODEDNetORM.rar

    4、DNetORM对于多表的联查进行了常规的封装支持了LEFT JOIN, INNER JOIN ,GROUP BY , ORDER BY, WHERE,对于复杂的写法,建议使用DNetORM提供的SQL查询接口,我们在开发中使用orm是为了提升开发效率,节省开发...

    经典SQL语句大全

    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..... 12、说明:日程安排提前五分钟提醒 SQL: select * from 日程安排 where datediff('minute',f...

    数据库操作语句大全(sql)

    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..... 12、说明:日程安排提前五分钟提醒 SQL: select * from 日程安排 where datediff('minute',f...

    sql经典语句一部分

    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..... 12、说明:日程安排提前五分钟提醒 SQL: select * from 日程安排 where datediff('minute',f...

Global site tag (gtag.js) - Google Analytics