oracle 关系除法

2016-02-16

关系除法 R÷S

关系模式 R(X,Y) S(Y,Z)

含义:在R中查询与S中所有元组有关系的元组

一、创建基础表R和S

CREATE TABLE R (X VARCHAR2(10),Y VARCHAR2(10));
CREATE TABLE S (Y VARCHAR2(10),Z VARCHAR2(10));

INSERT ALL
INTO R VALUES (‘X1‘,‘Y1‘)
INTO R VALUES (‘X2‘,‘Y2‘)
INTO R VALUES (‘X2‘,‘Y3‘)
INTO R VALUES (‘X2‘,‘Y1‘)
SELECT 1 FROM DUAL;

INSERT ALL
INTO S VALUES (‘Y1‘,‘Z1‘)
INTO S VALUES (‘Y2‘,‘Z3‘)
SELECT 1 FROM DUAL;FROM R;

二、分解 

--R
SELECT * FROM R;

--S
SELECT * FROM S;

--T
SELECT Y FROM S;
CREATE TABLE T AS SELECT Y FROM S;
SELECT * FROM T;

--W
SELECT R.X, R.Y FROM (SELECT Y FROM S) T LEFT JOIN R ON T.Y = R.Y;
CREATE TABLE W AS SELECT R.X, R.Y FROM (SELECT Y FROM S) T LEFT JOIN R ON T.Y = R.Y;
SELECT * FROM W;

--N
SELECT COUNT(*) Y_NUM FROM T;
CREATE TABLE N AS SELECT COUNT(*) Y_NUM FROM T;
SELECT * FROM N;

--M
SELECT X, COUNT(*) Y_NUM FROM W GROUP BY X;
CREATE TABLE M AS SELECT X, COUNT(*) Y_NUM FROM W GROUP BY X;
SELECT * FROM M;

--R÷S
SELECT M.X FROM M RIGHT JOIN N ON M.Y_NUM = N.Y_NUM;

三、综合

SELECT M.X
  FROM (SELECT X, COUNT(*) Y_NUM
          FROM (SELECT R.X, R.Y
                  FROM (SELECT Y FROM S) T
                  LEFT JOIN R
                    ON T.Y = R.Y) W
         GROUP BY X) M
 RIGHT JOIN (SELECT COUNT(*) Y_NUM FROM (SELECT Y FROM S) T) N
    ON M.Y_NUM = N.Y_NUM;

时间: 2024-08-14 15:45:39

oracle 关系除法的相关文章

oracle数据库密码文件创建与使

Oracle关系数据库系统以其卓越的性能获得了广泛的应用,而保证数据库安全性是数据库管理工作的重要内容.本文在总结Oracle数据库安全管理工作的基础上,对Oracle数据库系统密码文件的创建.使用和维护作了详细的介绍,供大家参考. 在Oracle数据库系统中,用户如果要以特权用户身份(INTERNAL/SYSDBA/SYSOPER)登录Oracle数据库可以有两种 身份验证的方法:即使用与操作系统集成的身份验证或使用Oracle数据库的密码文件进行身份验证.因此,管理好密码文件,对于控制授权用

.net(C#)访问Oracle数据库的几种免安装组件的对比

Oracle 数据存取组件(ODAC) 库为Borland Delphi,C++ Builder 以及 Kylix提供了一些非可视化的组件.它们用来存取Oracle关系数据库系统.与BDE类似, ODAC 也是一种可供选择的处理数据的方法之一. ODAC 直接使用 Oracle 调用接口 (OCI). OCI 是一种允许应用程序开发人员使用第三方开发语言存取Oracle数据服务器的过程或函数以及控制所有的SQL语句执行状态的应用程序接口(API). OCI 通过一个动态运行库(ORA*.DLL)

Delphi连接Oracle控件ODAC的安装及使用

Delphi ODAC 控件下载 ODAC 64位客户端 12.1.0.2.4 http://down-ww3.7down.net/pcdown/soft/xiazai/odac-x64.rar Delphi连接Oracle有很多种方式,但大多要在客户机上安装Oracle那庞大的客户端,比较不方便,使用ODAC控件连接Oracle则免去了这些麻烦.ODAC也是Oracle公司载发的控件.有for Delphi 6--Dephi 2007的版本. Oracle数据访问组件(ODAC),全称:Ora

SQL进阶系列之7用SQL进行集合运算

写在前面 集合论是SQL语言的根基,因为这种特性,SQL也被称为面向集合语言 导入篇:集合运算的几个注意事项 注意事项1:SQL能操作具有重复行的集合(multiset.bag),可以通过可选项ALL来支持 SQL的集合运算符提供了允许重复和不允许重复两种用法,UNION和INTERSECT结果里不会出现重复的行,UNION ALL则会保留重复行:ALL的作用和SELECT子句中的DISTINCT相反.ALL有助于优化查询性能,这是因为使用ALL后不再进行排序 注意事项2:集合运算符存在优先级

深入浅出JVM

虚拟机: 指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统 有哪些虚拟机: VMWare Visual Box JVM:使用软件模拟Java字节码的指令集 JDK的发展历程: •1996年 SUN JDK 1.0 Classic VM –纯解释运行,使用外挂进行JIT •1997年 JDK1.1 发布 –AWT.内部类.JDBC.RMI.反射 •1998年 JDK1.2 Solaris Exact VM –JIT 解释器混合 –Accurate Memory Ma

如何将关系型数据表转换至hbase数据表

首先需要把关系型数据库的数据表的数据增加由 "纵向延伸",转变为HBase数据表的"横向延伸" 一.Hbase的存储结构 a)      HBase以表(HTable)的形式存储数据 b)     HTable包括很多行,每行通过RowKey唯一标记,行按照RowKey的字典序排列,表在行的方向上分割为多个HRegion c)      每行包括一个RowKey和多个Column Family,数据按照Column Family进行物理切割,即不同Column Fa

数据库系统原理及其应用总结---ShinePans

第一章  数据库概论 1.在数据库管理技术的发展过程中,数据库独立性最高的是"数据库系统"阶段 2.三大经典的数据结构模型是"关系,层次和网状模型" 3.单个用户使用的数据视图的描述,称为"外模式",它是用户与DBS的接口 4.DB中,数据的逻辑独立性是指"概念模式改变,外模式与应用程序不变" 5.通过指针链表来表示实体间联系的模型是"网状和层次模型" 6.DB的体系结构分成三层,分别是"逻辑模式

深入JVM内核---原理,诊断与优化

JVM的概念 JAM是Java Virtual Machine的简称.意为Java虚拟机 虚拟机 指通过软件模拟的具有完整硬件系统功能的,运行在一种完整隔离环境中的完整计算机系统 有哪些虚拟机 - VMWare -Visual Box -JVM VMWare或者Visual Box都是使用软件模拟物理CPU的指令集 JVM使用软件模拟Java字节码的指令集 JVM发展史 初始JVM-Java和JVM的历史 1996年SUN JDK1.0Classic VM -纯解释运行,使用外挂进行JIT 19

mysql列反转Pivoting

Pivoting是一项可以把行旋转为列的技术.在执行Pivoting的过程中可能会使用到聚合.Pivoting技术应用非常广泛.下面讨论的都是静态的Pivoting查询,即用户需要提前知道旋转的属性和列的值.对于动态Pivoting,需要动态地构造字符串. 开放架构 开发架构是一种用于频繁更改架构的一种设计模式.利用关系型数据库和SQL语句可以非常有效地处理DML,包括INSERT.SELECT.UPDATE和DELETE. 然而,DDL在频繁进行架构更改时显得十分不方便.例如城对表结构进行修改