当前位置:  数据库>oracle

Oracle多表查询详解

    来源: 互联网  发布时间:2017-04-24

    本文导语: 多个表之间关系:一对多|(多对一)  多对多 一对一 3种 关系的完整性约束:实体完整性、参照完整性、用于定义的完整性。 必须满足实体完整性和参照完整性. 实体完整性:规定了字段|属性的约束 参照完整性:关系与关系之...

多个表之间关系:一对多|(多对一)  多对多 一对一 3种

关系的完整性约束:实体完整性、参照完整性、用于定义的完整性。 必须满足实体完整性和参照完整性.

实体完整性:规定了字段|属性的约束

参照完整性:关系与关系之间的引用 某个字段的约束  外键

一.笛卡尔

 笛卡尔集会在下面条件下产生:

•  省略连接条件

•  连接条件无效

•  所有表中的所有行互相连接

为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。

//查询员工及部门的详细信息  但是会产生一个笛卡尔积的效果

SQL> select * from emp,dept;

二. Oracle连接

使用来接在多个表中查询详解Linux平台下的Oracle数据库编程 iis7站长之家

//别名查询 为表起别名 采用别名查询

SQL> select * from emp e,dept d  where e.deptno=d.deptno;

综上所述 创建连接查询时应遵循如下规则:

1、  from子句应当包括所有的表名

2、  where子句应定义连接条件 两个表1一个等值条件 三个表 2个等值条件…依次类推。

l  备注:连接 n个表,至少需要 n-1个连接条件。 例如:连接三个表,至少需要两个连接条件。

3、  当列名为多个表共有时,列名必须被限制

       非等值连接

                   SELECT e.last_name, e.salary, j.grade_level  FROM   employees e, job_grades j

WHERE  e.salary  BETWEEN j.lowest_sal AND j.highest_sal;

     三   内连接和外连接

1、               内连接:

内连接根据所使用的比较方式不同,把内连接分为了:

1)  等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

SQL> select * from emp e inner join dept d on e.deptno = d.deptno;

2)  不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。

SQL> select * from emp e inner join dept d on e.deptno>d.deptno;

3)  自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

SQL> select * from emp natural join dept;

SQL> select  e.*,d.dname,d.loc  from emp e inner join dept d on e.deptno = d.deptno;

SQL> select d.*,e.ename,e.empno,e.job,e.mgr,e.hiredate,e.sal,e.comm from emp e inner join dept d on e.deptno=d.deptno;

 

备注:Distinct是去掉重复的行,而自然连接是去掉重复的列。

 

2、  外连接

内连接的查询结果都是满足连接条件的记录。但是,有时我们也希望输出那些不满足连接条件的记录的信息。比如,我们想知道这个部门中所有员工的情况,也包括没有员工的部门,这时就需要使用外连接。外连接是只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以不满足连接条件的连接方式。3种外连接:

  1) 左外连接(LEFT OUTER JOIN)

  如果在连接查询中,连接表左端的表中所有的记录都列出来,并且能在右端的表中找到匹配的记录,那么连接成功。如果在右端的表中,没能找到匹配的记录,那么对应的记录是空值(NULL)。这时,查询语句使用关键字 LEFT OUTER JOIN,也就是说,左外连接的含义是限制连接关键字右端的表中的数据必须满足连接条件,而不关左端的表中的数据是否满足连接条件,均输出左端表中的内容

  例如:要查询所有部门的员工信息查询语句为

SQL> select * from dept d left outer join emp e on e.deptno=d.deptno order by d.deptno;  左外连接查询中左端表中的所有记录的信息都得到了保留。

   备注:部门表中记录保留,如果部门中没有员工,部门显示 员工记录用null补充。

  2)右外连接(RIGHT OUTER JOIN)

  右外连接与左外连接类似,只是右端表中的所有元组都列出,限制左端表的数据必须满足连接条件,而不管右端表中的数据是否满足连接条件,均输出表中的内容。

  例如:同上例内容,查询语句为

SQL> select * from emp e right outer join dept d on e.deptno=d.deptno order by d.deptno;

  右外连接查询中右端表中的所有元组的信息都得到了保留。

  3)全外连接(FULL OUTER JOIN)

  全外连接查询的特点是左、右两端表中的记录都输出,如果没能找到匹配的记录,就使用NULL来代替。

  例如:同左外连接例子内容,查询语句为

  SQL> select * from emp e full outer join dept d on e.deptno=d.deptno order by d.deptno;

  全外连接查询中所有表中的元组信息都得到了保留。

备注:一定分清:左与右   在join后边的是右

3、  交叉联接

 交叉连接即笛卡儿乘积,是指两个关系中所有记录的任意组合。一般情况下,交叉查询是没有实际意义的。

SQL> select * from emp e cross join dept d;

备注:可以添加where子句筛选出有意义的数据。建议不使用。


    
 
 

您可能感兴趣的文章:

  • Oracle 数据库(oracle Database)性能调优技术详解
  • oracle中lpad函数的用法详解
  • oracle修改scott密码与解锁的方法详解
  • 求.bash_profile配置oracle详解
  • Oracle数据库中分区功能详解
  • oracle指定排序的方法详解
  • 详解如何应用改变跟踪技术加速Oracle递增备份
  • oracle合并列的函数wm_concat的使用详解
  • oracle select执行顺序的详解
  • 使用Oracle数据挖掘API方法详解[图文]
  • Oracle多表级联更新详解
  • 安装Linux与Oracle数据库步骤详解
  • oracle求同比,环比函数(LAG与LEAD)的详解
  • 详解Linux平台下的Oracle数据库编程
  • oracle中去掉回车换行空格的方法详解
  • Oracle中job的使用详解
  • [Oracle] Data Guard 之 Redo传输详解
  • oracle用户权限管理使用详解
  • 深入ORACLE变量的定义与使用的详解
  • 详解Oracle的几种分页查询语句
  • oracle SQL递归的使用详解
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • Oracle查询出现异常
  • Oracle将查询的结果放入一张自定义表中并再查询数据
  • oracle+jsp 多用户查询系统讨论:
  • Oracle查询表、视图、序列等信息查询
  • 关于Oracle的查询问题
  • Oracle用什么语句查询字段?
  • Oracle 查询指定表名的columns
  • linux下通过对文件读取方式查询oracle的版本信息
  • Oracle的大数据量查询结果显示问题。(高手帮忙)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 虚拟机装Oracle R12与Oracle10g
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle 数据库开发工具 Oracle SQL Developer
  • Oracle 10g和Oracle 11g网格技术介绍
  • Oracle EBS R12 支持 Oracle Database 11g
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • ORACLE日期相关操作
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • ORACLE数据库常用字段数据类型介绍
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • Oracle 12c的九大最新技术特性介绍
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE中DBMS_RANDOM随机数生成包
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,