ITPub博客

首页 > 数据库 > Oracle > 多表查询显示数据

多表查询显示数据

原创 Oracle 作者:x辛诺x 时间:2016-01-10 22:29:29 0 删除 编辑

目标:

         1、学会在多张表中使用SELECT查询,可以包含equijoins(相等操作符)和nonequijoins(不等操作符)

         2、学会使用self-join

         3、内部连接和外部连接(outer joins

         4、在两个或更多的表中形成笛卡尔积

Agenda

         一、JOINS的类型和语法

         二、自然连接

                  ---USING 子句

                  ---ON 子句

         三、Self-join

         四、Nonequijoins

         五、OUTER join

                  ---LEFT OUTER join

                  ---RIGHT OUTER join

                  ---FULL OUTER join

         六、笛卡尔积

                  ---Cross join

 

 

 

一、JOINS的类型和语法

JOINS基本类型

自然连接

         ---NATURAL JOIN子句

         ---USING 子句

         ---ON 子句

OUTER join

         ---LEFT OUTER join

         ---RIGHT OUTER join

         ---FULL OUTER join

Cross join

 

SQL国际标准


Oraclejoin语法


示例:



澄清有歧义的列名

1、添加表前缀

2、给每一个列都加表前缀可以提高效率

3、使用表全名比较长,可以使用表别名

4、表别名可以设计的比较短,通常用一个字母来表示(因为使用的字符小,所有所需要的内存更少)

5、使用表别名区分不同表有同样列名的列

 

示例:



一旦使用了表别名,则不能再使用表原来的名字

示例:




二、自然连接

         1、使用自然连接的时候,数据库会自动在两张表中查询相同列名和类型的所有的列,以这些列进行匹配

         2、找到有相同值的列进行连接

         3、如果列名相同,类型不同,则不能进行连接

 

示例:


两张表中相同的是“location_id

即:



Oracle语法示例:


USING子句

1、如果两张表中有相同的列名,却类型不同,使用USING子句明确指明使用哪一列进行连接

2USING子句只用一列匹配

3NATURAL JOIN USING 不能同时使用

 

示例:



Oracle语法示例:



USING子句中不用表别名而且使用了USING子句的话,WHERE也不能使用表别名

示例:



ON 子句

 

示例:


(比较纳闷既然有了ON子句,那些NATURAL JOINUSING子句有什么意义)

 

多张表查询:

示例:(三张表)



Oracle语法示例:



JOIN里面附加其他条件

示例1



示例2




三、Self-join

示例:列出员工及员工的经理



Oracle语法示例:




四、Nonequijoins

不用“相等”条件进行查询

首先创建一个工作等级表(JOB_GRADES):



向工作等级表(JOB_GRADES)中添加几个数据:



可以查询一下:



示例:列出员工薪资及其薪资等级




五、OUTER join

INNER OUTER join的区别

         1、只把匹配上的结果返回回来称做INNER join

         2、除INNER join以外,从左边(或右边)没有匹配上的行也显示出来,称做LEFT(or RIGHT) OUTER join

         3、除INNER join以外,把左边和右边没有匹配上的行都显示出来,称做FULL OUTER join

 

示例:LEFT OUTER JOIN





示例:RIGHT OUTER JOIN





示例:FULL OUTER JOIN





Oracle语法:OUTER JOIN

LEFT OUTER JOIN



RIGHT OUTER JOIN




六、笛卡尔积

把两张表中的记录进行两两组合,比如第一张表有m条记录,第二张表有n条记录,最终就是(m*n)条记录

         产生笛卡尔积

         1JOIN条件被忽略了

         2JOIN条件无效

         3、做测试的时候或许需要爆炸性数据的时候

 

CROSS JOIN

示例:





Oracle语法:笛卡尔积

示例:




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30197839/viewspace-1974661/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 休息一天
请登录后发表评论 登录
全部评论

注册时间:2015-04-08

  • 博文量
    21
  • 访问量
    9279