百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Oracle检索数据——多表关联查询(oracle多表连接查询去重复)

mhr18 2025-01-29 16:51 18 浏览 0 评论

在实际应用中查询数据可能会涉及多个数据表,每个表不是独立存在的,而是若干个表之间的信息存在一定的关系,当查询一个表的信息时,很可能需要查询关联数据表的信息,这就是多表关联查询。

1、表别名

  在进行多表查询时,如果多个表之间存在同名的列,则必须使用表名来限定列的引用。SQL 语言提供了设定表别名的机制,使用简短的表别名就可以替代原有较长的表名称,可以大大缩短语句的长度。

  SQL > select e.empno as 员工编号,e.ename as 员工名称, d.dname as 部门 from emp e,dept d where e.deptno = d.deptno and e.job ="Manager";

 表示通过部门号(deptno)来管理emp表和dept表,并查询这两个表中相关字段的信息。

 注意:一旦在from 子句中为表指定了列名,则必须在剩余的子句中都使用表别名。  

2、内连接

  内连接是常用的多表关联查询,使用关键字inner join来实现,其中,inner 关键字可以省略,使用 join 即代表内联接。使用内联接查询多个表时,必须在 from 子句之后定义一个 on 子句,用来指定两个表实现内联接的“连接 条件”。

  使用内联接进行多表查询时,返回的查询结果是只包含查询条件和连接条件的行,消除了与另一个表中任何行不匹配的行。

  注意:在内联接的查询结果中,所有记录行都是满足连接条件的。

  语法:

    select column_list

    from table_name1 [ innter ] join table_name2

    on join_condition;

  •  columns_list : 字段列表
  •  table_name1 和 table_name2 :两个要实现内连接的表。
  • join_condition: 实现内连接的条件表达式。

SQL > select e.empno as 员工编号, e.ename as 员工名称,d.dname as 部门 from emp e inner join dept d on e.deptno = d.deptno;

表示通过 deptno 字段来连接emp 表和 dept表,并查询两个表中相关的字段。

3、外连接

  多表之间进行外连接时,除了返回所有匹配的行外,还会返回一部分或全部不匹配的行,这主要取决于外连接的种类,主要由以下3种:

  (1) 左外连接:关键字为left Outer join 或 left join

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

 select e.empon,e.ename,e.job,d.deptno,d.dname from emp e left join dept d on e.deptno = d.deptno;

  表示从员工表(emp)表中查询出来所有的记录并查询部门表(dept)中两个deptno值相等的记录,如果没有相匹配的行,均为空值。

(2)右外连接:关键字为 right outer join 或 right join

  右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

  select e.empno,e.ename,e.job,d.deptno,d.name from emp e right join dept d on e.deptno = d.deptno;

  表示从部门表(dept)中查询出来所有的记录,并查询员工表(emp)表中与之deptno 对应的记录,如果没有匹配的行,均为空值。

(3) 完全外连接:关键字为 full outer join 或 full join

  完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

  select e.empno,e.ename,e.job,d.deptno,d.dname from emp e full join dept d on e.deptno = d.deptno;

  表示查询两个表中所有的deptno的记录,如果对方的表中没有匹配的行,置为空值。

4、自然连接

  自然连接是指在查询多个表时,Oracle 会将第一个表中的列与第二表中具有相同名称的列进行自动连接。自然连接中,用户不需要指定进行连续的列,这个任务由 Oracle 系统西段完成,自然连接使用“Natural join”关键字。

   select empno,ename,job,dname from emp natural join dept where sal > 200;

  表示在emp表中查询工资(sal)大于2000的记录,并实现emp表与dept 表的自然连接。

 注意:自然连接强制要求表之间必须具有相同的列名称,但是在实际开发中很少用到。在使用自然连接时,不能为列指定限定词(即表名或表的别名),否则Oracle 会报错。

5、自连接

  在开发中,用户可能会拥有“自引用式”的外键,是指表中的一个列可以是该表主键的一个外键。

6、交叉连接

  交叉连接实际上就是不需要任何连接条件的连接,它使用 cross join 关键字来实现。

  语法: select colums_list from table_name1 cross join table_name2;

  • colums_list : 字段列表
  • table_name: 两个实现交叉连接的表名。

  交叉连接的执行结果是一个笛卡尔积,这种查询非常冗余,但可以通过where 子句来过滤出有用的记录。

 图解:

-------------------------------------------------------------------------------------------------------------------

   表A Id name 表B ID job p_id

    1 张三 1 25 1

2 李四 2 36 2

3 王五 3 36 4

a.id与b.p_id存在关系


-------------------------------------------------------------------------------------------------------------------(1)
内连接

SQL > select a.*,b.* from a inner join b where a.id=b.p_id;

---------------------------------------------------------------------------------

    a.Id a. name b.id b.job b.p_id

    1 张三 1 25 1

2 李四 2 36 2

----------------------------------------------------------------------------------

(2)左外连接

SQL > select a.*,b.* from a left join b where a.id=b.p_id;

---------------------------------------------------------------------------------

   a.Id a. name b.id b.job b.p_id

   1 张三 1 25 1

2 李四 2 36 2

   3 王五 null null null

----------------------------------------------------------------------------------

(3)右外连接

SQL > select a.*,b.* from a right join b where a.id=b.p_id;

---------------------------------------------------------------------------------

   a.Id a. name b.id b.job b.p_id

   1 张三 1 25 1

2 李四 2 36 2

   null null 3 36 4

----------------------------------------------------------------------------------

(4)完全连接

SQL > select a.*,b.* from a full join b on a.id=b.p_id

---------------------------------------------------------------------------------

  a.Id a. name b.id b.job b.p_id

   1 张三 1 25 1

2 李四 2 36 2

  null null 3 36 4

  3 王五 null null null

----------------------------------------------------------------------------------

相关推荐

SpringBoot 各种分页查询方式详解(全网最全)

一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...

《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略

《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...

LoadRunner(loadrunner录制不到脚本)

一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...

Redis数据类型介绍(redis 数据类型)

介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...

RMAN备份监控及优化总结(rman备份原理)

今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...

备份软件调用rman接口备份报错RMAN-06820 ORA-17629 ORA-17627

一、报错描述:备份归档报错无法连接主库进行归档,监听问题12541RMAN-06820:WARNING:failedtoarchivecurrentlogatprimarydatab...

增量备份修复物理备库gap(增量备份恢复数据库步骤)

适用场景:主备不同步,主库归档日志已删除且无备份.解决方案:主库增量备份修复dg备库中的gap.具体步骤:1、停止同步>alterdatabaserecovermanagedstand...

一分钟看懂,如何白嫖sql工具(白嫖数据库)

如何白嫖sql工具?1分钟看懂。今天分享一个免费的sql工具,毕竟现在比较火的NavicatDbeaverDatagrip都需要付费才能使用完整功能。幸亏今天有了这款SQLynx,它不仅支持国内外...

「开源资讯」数据管理与可视化分析平台,DataGear 1.6.1 发布

前言数据齿轮(DataGear)是一款数据库管理系统,使用Java语言开发,采用浏览器/服务器架构,以数据管理为核心功能,支持多种数据库。它的数据模型并不是原始的数据库表,而是融合了数据库表及表间关系...

您还在手工打造增删改查代码么,该神器带你脱离苦海

作为Java开发程序,日常开发中,都会使用Spring框架,完成日常的功能开发;在相关业务系统中,难免存在各种增删改查的接口需求开发。通常来说,实现增删改查有如下几个方式:纯手工打造,编写各种Cont...

Linux基础知识(linux基础知识点及答案)

系统目录结构/bin:命令和应用程序。/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev:dev是Device(设备)的缩写,该目录...

PL/SQL 杂谈(二)(pl/sql developer使用)

承接(一)部分。我们从结构和功能这两个方面展示PL/SQL的关键要素。可以看看PL/SQL的优雅的代码。写出一个好的代码,就和文科生写出一篇优秀的作文一样,那么赏心悦目。1、与SQL的集成PL/S...

电商ERP系统哪个好用?(电商erp哪个好一点)

电商ERP系统哪个好用?做电商的,谁还没被ERP折腾过?有老板说:“我们早就上了ERP,订单、库存、财务全搞定,系统用得飞起。”也有运营吐槽:“系统是上了,可库存老不准,订单漏单错单天天有,财务对账还...

汽车检测线系统实例,看集中控制与PLC分布控制

PLC可编程控制器,上个世纪70年代初,为取代早期继电器控制线路,开始采取存储指令方式,完成顺序控制而设计的。开始仅有逻辑运算、计时、计数等简单功能。随着微处理的发展,PLC可编程能力日益提高,已经能...

苹果五件套成公司年会奖品主角,几大小技巧教你玩转苹果新品

钱江晚报·小时新闻记者张云山随着春节的临近,各家大公司的年会又将陆续上演。上周,各大游戏公司的年会大奖,苹果五件套又成了标配。在上海的游戏公司中,莉莉丝奖品列表拉得相当长,从特等奖到九等奖还包含了特...

取消回复欢迎 发表评论: