oracle多表查询详解

ORACLE SQL 多表查询 ORACLE SQL 多表查询 开发工具与关键技术:Oracle sql*plus 与 PLSQL Developer 作者:蒋紫晨 撰写时间:2019年04月07日 外连接 例子1、如果别人要的数据是那个部门没有员工? Select * from departments d , employees e where e.department_id(+)= d.department_i... 阅读详情
 

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

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

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

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

一.笛卡尔集

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

•  省略连接条件

•  连接条件无效

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

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

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

SQL> select * from emp,dept;

二. Oracle连接

使用来接在多个表中查询数据

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

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子句筛选出有意义的数据。建议不使用。

 

 

 

4、  自连接查询

如果在一个连接查询中,涉及到的两个表都是同一个表,这种查询称为自连接查询。同一张表在FROM字句中多次出现,为了区别该表的每一次出现,需要为表定义一个别名。自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表。

  例如:要求检索出员工编号为7369的上司的详细信息,查询语句为

 SQL> select e1.* from emp e inner join emp e1 on e.mgr=e1.empno where e.empno=7369;

注意:对于连接查询中使用到的 inner outer是可以省略的。但为规范最好不要省略。

提高部分:

SQL> select * from emp e inner join dept d on e.deptno(+)=d.deptno;的理解?

l 使用外连接可以查询不满足连接条件的数据。

l 外连接的符号是 (+)。

 

2、

l 在NATURAL JOIN 子句创建等值连接时,可以使用 USING 子句指定等值连接中需要用到的列。

l 使用 USING 可以在有多个列满足条件时进行选择。

l 不要给选中的列中加上表名前缀或别名。

l NATURAL JOIN 和 USING 子句经常同时使用。

用Arduino和FS-i6X遥控器,从零开始打造你的第一只仿生扑翼蝴蝶(附完整代码解析) 本文详细介绍了如何利用Arduino和FS-i6X遥控器从零开始制作仿生扑翼蝴蝶,包括硬件准备、电路连接、代码解析和调试技巧。通过完整的代码示例和参数说明,帮助读者快速掌握仿生机器人的制作要点,实现蝴蝶的自然飞行效果。 阅读详情

相关推荐

Linux中断子系统分析之(四):驱动程序申请中断

中断子系统中有一个重要的设计机制,那就是Top-half和Bottom-half,将紧急的工作放置在Top-half中来处理,而将耗时的工作放置在Bottom-half中来处理。 如果中断不分上下半部处理,那么意味着只有等上一个中断完成处理后才会打开中断,下一个中断才能得到响应。当某个中断处理处理时间较长时,很有可能就会造成其他中断丢失而无法响应,影响系统性能。 中断分成上下半部处理可以提高中断的响应能力,在上半部处理完成后便将中断打开,这样就可以响应其他中断了,等到中断退出的时候再进行下半部的处理。为了进

m0_46525308的博客 1225

Oracle多表连接查询

多个表之间关系:一对多|(多对一)  多对多 一对一 3种 关系的完整性约束:实体完整性、参照完整性、用于定义的完整性。 必须满足实体完整性和参照完整性. 实体完整性:规定了字段|属性的约束 参照完整性:关系与关系之间的引用 某个字段的约束  外键   一.笛卡尔集  笛卡尔集会在下面条件下产生: •  省略连接条件 •  连接条件无效 •  所有表中的所有行互相连接 为了...

weixin_34185512的博客 338

告别地图偏移!手把手教你用MapOnline V1.2在ArcGIS里加载无偏谷歌影像和历史影像

本文详细介绍了如何使用MapOnline V1.2插件在ArcGIS中加载无偏谷歌影像和历史影像,解决GIS工程师长期面临的地图偏移问题。通过三步安装配置、无偏影像加载和时空分析功能,提升地理信息数据的精确度和工作效率,特别适用于城市规划、环境监测等场景。

weixin_29252171的博客 232

oracle查询:多行子查询返回多个行

oracle查询:多行子查询返回多个行 1.子查询 查询嵌套,一个查询作为另一个查询的条件、表。 多行子查询通常作为另一个查询的表使用;单行子查询可以作为另一个查询的条件使用。 SELECT decode( ( SELECT nvl( a.idenno, '11' ) FROM com_patientinfo a WHERE a.card_no = c.card_no ), '11', ( SELECT t.id || '_' FROM SJPT_HOSPITAL t ) || c.card_

qq_42716881的博客 1562

MinIO vs 华为云OBS:成本、性能与兼容性深度对比(含实测数据)

本文深度对比了开源对象存储MinIO与华为云OBS在成本、性能、兼容性及运维方面的核心差异。通过实测数据与全生命周期成本分析,为技术决策者提供选型依据。文章指出,MinIO在长期成本控制、性能深度优化及S3 API兼容性方面优势显著,而华为云OBS则提供开箱即用的便利性。

kmeans3miner的博客 593

SAP-ABAP:SAP客户端管理核心事务码SCC4深度解析

SAP客户端管理核心事务码SCC4深度解析

baidu_35680696的博客 1566

oracle匹配一对多,求教一个多对多的匹配有关问题 Oracle

求教一个多对多的匹配问题 Oracle各位高手,小弟现在碰到一个问题,场景描述如下现在有一张表model,记录了模型与其符合条件的关系,模型与条件是多对多的关系,createtablemodel(model_idvarchar2(10),condition_idvarchar2(2),...)例如:model_idcondition_id-----------...

weixin_42545636的博客 732

勒索病毒c语言源代码,勒索病毒原理解析

一、编程思路什么是勒索病毒:遍历你电脑上所有文件,并且用加密算法加密,然后把加密秘钥发送到自己邮箱里,弹出窗口。工具:操作系统API,加密算法思路:1.程序设计 思路规划清楚1.1 加密单个文件1.2 遍历文件系统并加密文件2.工程实现: 编程3.测试上线 :、测试欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包二、代码解析//文件遍...

weixin_35355756的博客 6601

oracle 一对多查询_一对多查询,教你几个查询套路

最近在微信群里不少的小伙伴们都在问关于如何进行一对多查询的问题,今天世杰老师给大家列举了以下几个套路供大家选择。对于初学者来说,如果需要那么只要会前三种方法即可,后面的几种方法大家只在记住套路即可。如下图所示,查询右侧员工编号为“45424”的所有的销售数量。1方法01辅助列+VLOOKUP对于查询类的问题,大家第一时间可能想到的会是VLOOKUP函数,是的世杰老师给大家教一种简单的方法...

weixin_29385641的博客 2412

完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码)

申请公司的苹果开发者账号和企业级的苹果开发者账号时,都会用到邓白氏编码,也就是我们申请苹果开发者账号时需要填写的D-U-N-S Number。     申请这个邓白氏编码是免费的,但是从像华夏邓白氏公司提交申请到可以申请苹果开发者账号来用这个9位的D-U-N-S Number,需要一段时间,我申请得到D-U-N-S Number,用了8个工作日(不算周末哦)

wxw2011014003的博客 9万+

设备接入与APP(应用程序)接入华为云iotDA平台的详细操作步骤及获取方式

设备及APP(应用程序) 登录 IoTDA 平台所需的 入场与操作清单内容,提供逐项详细操作步骤和获取方式,并穿插贴士便于理解与实际操作落地。内容基于 华为云 IoTDA 控制台 和 IAM 控制台 的实际使用路径整理。

hy行者勇哥的博客 3056

oracle 正则表达式多项匹配时,相似项有优先级

oracle 正则表达式多项匹配时,相似项有优先级

qq_29061315的博客 8907

osgearth添加经纬度网格,并显示鼠标所指经纬高度信息

一、代码 osgearth官方例子 #include <osg/Notify> #include <osgGA/StateSetManipulator> #include <osgViewer/Viewer> #include <osgViewer/ViewerEventHandlers> #include <osgEarth/MapNode> #include <osgEarthUtil/EarthManipulator> #

ljjjjjjjjjjj的博客 3564

oracle多表查询详解,oracle多表查询

oracle多表查询--1.DEPT表按照部门跟EMP表左关联select ename,sal,dname,e.deptno from emp e left outer join dept d on e.deptno = d.deptnoselect ename,sal,dname,e.deptno from emp e , dept d where e.deptno = d.deptno(+)-...

weixin_42515392的博客 737

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Oracle--多表查询、层次查询详解

什么是笛卡尔积? Oracle的连接条件的类型 等值连接 不等值连接 外连接 自连接 Oracle多表连接示例 1.多表连接基本查询 使用一张以上的表做查询就是多表查询 语法: SELECT {DISTINCT} *|列名... FROM 表明 别名, 表名1 别名 {WHERE 限制条件 ORDER BY 排序字段 ASC|DESC...} 示例:查询员工表和部门表 select * ...

吴声子夜歌的博客 1579

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Oracle】多表连接查询详解

多表查询:按数据库设计原则,员工表中只有部门的编号信息,部门的详细信息会放在部门表中,这个时候我们就需要使用多表查询的功能。 课程目标: 1、什么是多表查询? 2、笛卡尔集。 3、等值连接。 4、不等值连接。 5、外连接。 6、自连接。 7、层次查询。 具体内容: 1、什么是多表查询? 2、笛卡尔集。 3、等值连接。 4、不等值连接。 5、外连接。 6、自

少年休闲海 1346

Oracle 高级 SQL 查询与函数详解:多表连接、子查询、聚合、分析函数

本文系统介绍了Oracle高级SQL查询技巧,包括多表连接(INNER JOIN、LEFT JOIN等)、子查询(标量、列、行、表子查询)、聚合函数与分组(GROUP BY、HAVING)等基础操作,以及字符处理、日期函数、条件表达式(CASE WHEN/DECODE)和分析函数(ROW_NUMBER、LAG/LEAD)等高级功能。通过大量实用示例代码,帮助初学者快速提升SQL能力,中级开发者查漏补缺。这些技巧是Oracle数据库开发的核心技能,适用于实际业务中的数据提取、计算和报表生成等场景。建议读者在本

BUG糕手的博客 1512

oracle 分组 连接查询_Oracle数据库中SQL细节、多表查询、分组查询、分页操作详解-Oracle...

前言在之前已经大概了解过Mysql数据库和学过相关的Oracle知识点,但是太久没用过Oracle了,就基本忘了…印象中就只有基本的SQL语句和相关一些概念….写下本博文的原因就是记载着Oracle一些以前没注意到的知识点…以后或许会有用…实例与数据库概念Oracle数据库服务器由两部分组成:实例:理解为对象,看不见的 数据库:理解为类,看得见的我们在安装Oracle的时候,已经填写过自己数据库的...

weixin_39610366的博客 180

Oracle多表查询

Oracle中查询不但可以从一张表查询数据,还可以从多张表同时查询数据。 查询多张表的语法是: SELECT * FROM <表1>, <表2>,… 例如,同时从employees表和departmenst表的“乘积”,即查询数据,可以这么写: SELECT * FROM employees, departments; 这种一次查询两个表的数据...

u012289399的博客 1369

Oracle中的多表查询

Oracle多表查询 Oracle中的多表连接就是通过查询表之间的关联字段,一次查询多表数据,要有关联的表才可以哦。 多表查询呢,有几种的方式来查的,就是写的格式有点不一样,但是查询出来的结果呢都是一样的! 以下就是多表连接的几种方式。 (谨记,多表连接查询一定要在where字句中加入有效的连接条件,要不然就会产生可怕的笛卡尔值。 这就有人问了,什么情况下会产生笛卡尔值呢? 笛卡尔值会在下面的条件...

Mr.Xu的博客 909

oracle多表查询

oracle单行函数 oracle基础 ---------------- 多表查询 ----------------- -- 笛卡尔积错误 (原因就是没有加条件) -- 查询员工表与部门表 -- 2889条 --会拿EMPLOYEES表(左表)中的每一条数据与DEPARTMENTS(右表)中的每一条数据匹配 即 107*27 SELECT EMPLOYEES.EMPLOYEE_ID,EMPLOYEES.LAST_NAME,DEPARTMENTS.DEPARTMENT_ID,DEPARTMENTS.DEPA

xwc999 711

Oracle_多表查询

多表即数据存放在多张表中 笛卡尔集: 行数 = table1的行数 * table2的行数; 列数 = table1的列数 + table2的列数。 等值连接 不等值连接 外连接 自连接 层次查询

LXiangRegisterd的博客 386

oracle查询3到5条数据,Oracle基础(5):多表查询

Oracle基础(五):多表查询一、多表查询(一)简单多表查询1、多表查询的机制1)SQL:SELECT * FROM emp; --14条记录SELECT * FROM dept;--4条记录SELECT * FROM emp,dept;--显示56条数据??为什么2)分析:先从dept选择一条记录(deptno=10),分别于emp中的14条记录分别匹配,显示14条记录。再从 dept...

weixin_35656458的博客 2052
上一篇: oracle单行函数详解
下一篇: oracle 分组查询详解
日依
博客等级 码龄15年 165粉丝 165原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值