Oracle数据库学习笔记之表的联合查询

发表于:2011-9-02 10:16

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:luxer_1985    来源:51Testing软件测试网采编

  Oracle数据库表的联合查询的相关知识是本文我们主要要介绍的内容,包括交叉联合、等值联合和不等值联合、内部联合与外部联合以及UNION和UNION ALL等内容,接下来我们就一一介绍这部分内容,希望能够对您有所帮助。

  1、交叉联合:

  使你对于“联合”的概念开始产生最直观的印象,因为交叉联合的结果就是两个表的笛卡尔积。

  code example:select * from T1, T2;

  假如表1有2条记录,表2有3条记录,那么查询结果就是2*3=6条记录。

  2、等值联合与不等值联合:

  等值联合:只显示表1中的数据,以及表2中的、存在于表1中的数据。顾名思义,查询条件/表达式中以等号(“=”)连接。

  code example:

  • select T1.sectionA, T1.sectionB, T2.sectionC from T1, T2  
  • where T1.sectionA = T2.sectionA (and ...);
  •   不等值联合:与等值联合查询类似,只不过在where子句中使用除等号以外的比较符连接,此处不以例详述。

      3、内部联合与外部联合

      内部联合:产生的结果行数取决于参加联合的行数,也就是说内部联合的行数取决于 WHERE 子句的结果。

      code example:

  • SELECT P.PARTNUM, P.DESCRIPTION, P.PRICE, O.NAME, O.PARTNUM  
  • FROM PART P  JOINORDERS OON ORDERS.PARTNUM = 54;
  •   在这里你使用的语法中的 JOIN ON 不是 ANSI 标准中所指定的,而是我们所使用的解释器的附加语法,你可以用它来指明是内部联合还是外部联合,大多数解释器对些都进行了类似的扩充,注意这种类型的联合没有 WHERE 子句。

      内部联合的定义不便介绍,个人理解上面的等值/不等值联合查询例子均为其代表,平时用到的查询也多为内部查询。

      在学习过外观查询后有此感受,内部查询结果的直观与简洁与外部查询的“画蛇添足”形成鲜明对比,那么即使我们用到的不是外部联合,那就一定是内部联合了。

      此外,对于概念和用法也不必做过多纠缠。这是因为——大多数的SQL 产品会判断应该在你的查询中使用哪一种联合,事实上,如果你在过程中使用它(或在程序内使用它<包括存储过程等>),你无需指明联合类型,解释器会为你选择合适的语法形式。

      如果你显示地指明了联合类型,那么解释器会用你指明的类型来代替(由解释器自身实现)优化的类型。

      外部联合:产生的结果行数取决于参加联合的行数,也就是说内部联合的行数取决于 WHERE 子句的结果,而外部联合则是表间的联合。

      code example:

  • SELECT P.PARTNUM, P.DESCRIPTION, P.PRICE, O.NAME, O.PARTNUM   
  • FROM PART P RIGHT OUTER JOINORDERS OON ORDERS.PARTNUM = 54;
  •   上述代码示例中使用了 RIGHT OUTER JOIN,它会令 SQL 返回右边表集内的全部记录,对于ORDERS.PARTNUM<>54的也会显示这些记录,只不地在相应位置补以空值<NULL>。

      左联合也是一样,只不过,由于表1与表2中的记录条数不同,其查询结果也大相径庭。

      注意到:在一些解释器中使用+号来代替外部联合。+号的意思就是——显示我的全部内容,包括不匹配的内容。

      code example:

  • select e.name, e.employee_id, ep.salary, ep.marital_status,  
  • from employee_tbl e, employee_pay_tbl ep  
  • where e.employee_id = ep.employee_id(+) and e.name like '%MITH'
  •   这条语句将会联合两个表,标有+号的 employee_id 将会全部显示,包括不满足条件的记录。

    21/212>
    《2023软件测试行业现状调查报告》独家发布~

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

    法律顾问:上海兰迪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号