3.08 识别和消除笛卡尔积

问题:
要返回在部门10中每个员工的姓名,以及部门的工作地点,下面的查询达到的是错误数据:

select e.ename,d.loc
    from emp e ,dept d
where e.deptno =10

解决方案:在from子句对表进行连接来返回正确的结果集:

select e.ename,d.loc
    from emp e,dept d
    where e.deptno =10
        and d.deptno = e.emptno

讨论:
看表dept中的数据,可以看出,部门10的工作地点是在New York,所以,在返回值中部门所在地点除了New york以外的任何值都是错误的。错误查询得到的行数是from子句后面两个表基数的积。在原查询中,对表emp的筛选条件是部门为10,结果有3行,因为没有对表dept进行筛选,表dept的所有四行全部返回,3乘以4得12,所以这个错误查询就返回了12行。一般来说,要避免产生笛卡尔积,需要使用n-1规则,这里的n为from子句中表的数量,并且n-1是要避免产生笛卡尔积的最小连接数。根据在表中的关键字和链接列不同,可能需要超过n-1个连接,但是对党写查询来说,n-1是一个好的开始。

注意:如果笛卡尔积应用适当也很有用。很多查询都用到了笛卡尔积,常用的场合有转置(反向转置)结果集,产生顺序值和模拟循环等

时间: 2024-10-09 10:23:57

3.08 识别和消除笛卡尔积的相关文章

精益之识别和消除研发过程中浪费的思路和模式

本文基于精益思想和精益软件开发,针对研发过程中的"浪费现象"进行深入分析.浪费分成存粹的浪费和必要的浪费,其中存粹的浪费需要消除,而必要的浪费可以进行压缩.结合日常研发过程,本文对如何识别这些浪费.如果消除存粹的浪费以及如何压缩必要的浪费进行剖析,并提供思路和模式. 一.理论基础 精益思想来自制造业,引入软件行业不过10年,目前很多理念还是停留在理论阶段,很难在实际研发过程中进行直接应用和推广.精益的很多思想个人认为是对软件行业有参考价值的,例如本文的主题"消除浪费"

full join 时通过辅助列序号列消除笛卡尔积重复列

如果没有序号列,那么如果领灯表里有3条数据,还灯表里面有2条数据,full join后就是3*2=6条数据 --1.领灯表,每天每班每人允许重复数据 select ID ,ROW_NUMBER() over(partition by PersonID,classid,dt_ClassData order by id) as getnum ,[PersonID] ,[ClassID] ,[dt_GetTime] ,[dt_ClassData] from m_LampHistoryDataGet a

行为识别笔记:improved dense trajectories算法(iDT算法)(转载)

iDT算法是行为识别领域中非常经典的一种算法,在深度学习应用于该领域前也是效果最好的算法.由INRIA的IEAR实验室于2013年发表于ICCV.目前基于深度学习的行为识别算法效果已经超过了iDT算法,但与iDT的结果做ensemble总还是能获得一些提升.所以这几年好多论文的最优效果都是"Our method+iDT"的形式. 此前由于项目原因,对iDT算法进行了很多研究和实验,故此处对其核心思路与一些实施的细节进行总结,方便后续回顾,也希望能够在此过程中获得一些新的启发. 介绍的内

Oracle中的多表查询(笛卡尔积原理)

本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查询一起完成各个复杂查询的操作: 一.多表查询的基本概念 在之前所使用的查询操作之中,都是从一张表之中查询出所需要的内容,那么如果现在一个查询语句需要显示多张表的数据,则就必须应用到多表查询的操作,而多表查询的语法如下: SELECT [DISTINCT] * | 字段 [别名] [,字段 [别名] ,-] FROM 表名称 [别名]

辨明你所从事的软件的类型

知识储备:软件开发模式:瀑布,迭代,螺旋,敏捷 1.瀑布模型 优点: 方便项目管理的运作,是最典型的可预见性的方法,严格遵循预先计划的需求分析,设计,编码,集成,测试,维护的步骤顺序进行. 步骤成果作为衡量进度的方法,例如需求规格,设计文档,测试计划和代码审阅等. 缺点: 限制了开发期间团队之间的交互,自由度降低,项目早期即做出承诺导致对后期需求的变化难以调整,成本高,瀑布式方法在需求不明的并且在项目进行过程中可能变化的情况下基本是不可行的. 2.迭代式开发也被称作迭代增量式开发或迭代进化式开发

最全的ORACLE-SQL笔记

-- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了. --(默认全局数据库名orcl) 1.select ename, sal * 12 from emp; --计算年薪 2.select 2*3 from dual; --计算一个比较纯的数据用dual表 3.select sysdate from dual; -

多表查询

范例1:查询emp表中的数据量 —— 14条数据 SELECT COUNT(*) FROM emp ;   范例2:查询dept表中的数据量 —— 4条数据 SELECT COUNT(*) FROM dept ;   范例3:现在查询所有的雇员和部门的全部详细信息 SELECT * FROM emp,dept ; 范例4:查询sh.sales表中的数据量 SELECT COUNT(*) FROM sales ; 范例6-5:查询sh.costs表中的数据量 SELECT COUNT(*) FRO

了解搜索引擎来进行SEO

搜索引擎的工作的过程非常复杂,而简单的讲搜索引擎的工过程大体可以分成三个阶段.爬行和抓取:搜索引擎蜘蛛通过跟踪链接访问页面,获取页面HTML代码存入数据库.预处理:搜索赢球对抓取来的页面数据文字进行文字提取.中文分词.索引等处理,以备排名程序调用.排名:用户输入关键字后,排名调用索引库数据,计算相关性,然后按一定格式生成搜索结果页面. 爬行和抓取 爬行和抓取是搜索引擎工作的第一步,完成数据收集任务. 蜘蛛 搜索引擎用来爬行和访问页面的程序被称为蜘蛛(spider),也称为机器人(bot). 蜘蛛

敏捷软件开发和传统软件工程

一.   传统软件工程 从上个世纪60年代开始,人们开始逐渐认识到了确实存在着"软件危机" 这样一个事实,软件开发人员被诸如下列问题困扰: 软件生产不能满足日益增长的需要 软件开发成本和开发进度估计往往不准确 软件开发人员和用户之间信息交流不充分,用户对完成的软件满意度很低 软件价格昂贵,软件成本在整个计算机系统中所占的比例急剧上升,软件已成为许多计算机系统中花钱最多的项目 软件质量难以保证 软件可维护性差,程序中的错误很难改正,适应性或完善性维护都极其困难 导致危机问题的一个重要原因