zoukankan      html  css  js  c++  java
  • Oracle集合

    一、集合

    概念:

      集合是指具有某种特定性质的具体的或抽象的对象汇总而成的集体。其中,构成集合的这些对象则称为该集合的元素。

    基数:

      集合中元素的数目称为集合基数,集合A的基数记作card(A)。当其为有限大时,集合A称为有限集,反之则为无限集

      一般的,把含有有限个元素的集合叫做有限集,含无限个元素的集合叫做无限集

      

    表示

    假设有实数x < y:
    ①[x,y] :方括号表示包括边界,即表示x到y之间的数以及x和y;
    ②(x,y):小括号是不包括边界,即表示大于x、小于y的数
     

    特性

    确定性

      给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现

    互异性

      一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。有时需要对同一元素出现多次的情形进行刻画,可以使用多重集,其中的元素允许出现多次

    无序性

      一个集合中,每个元素的地位都是相同的,元素之间是无序的。集合上可以定义序关系,定义了序关系后,元素之间就可以按照序关系排序。但就集合本身的特性而言,元素之间没有必然的序

    空集

    有一类特殊的集合,它不包含任何元素,如{x|x∈R x²+1=0} ,称之为空集,记为∅。空集是个特殊的集合,它有2个特点:
    1. 空集∅是任意一个非空集合的真子集。
    2. 空集是任何一个集合的子集

    子集

    设S,T是两个集合,如果S的所有元素都属于T ,即

     则称S是T两个子集,记为 。显然,对任何集合S ,都有

     其中符号 读作包含于,表示该符号左边的集合中的元素全部是该符号右边集合的元素。如果S是T的一个子集,即 ,但在T中存在一个元素x不属于S ,即

     ,则称S是T的一个真子集。
     

    交并集

    交集定义:由属于A且属于B的相同元素组成的集合记作A∩B(或B∩A),读作“A交B”(或“B交A”),即A∩B={x|x∈A,且x∈B}, 如右图所示。注意交集越交越少。若A包含B,则A∩B=B,A∪B=A
    并集定义:由所有属于集合A或属于集合B的元素所组成的集合,记作A∪B(或B∪A),读作“A并B”(或“B并A”),即A∪B={x|x∈A,或x∈B},如右图所示。注意并集越并越多,这与交集的情况正相反
     

    补集

    补集又可分为相对补集和绝对补集。
    相对补集定义:由属于A而不属于B的元素组成的集合,称为B关于A的相对补集,记作A-B或AB,即A-B={x|x∈A,且x∉B'}
    绝对补集定义:A关于全集合U的相对补集称作A的绝对补集,记作A'或∁u(A)或~A。有U'=Φ;Φ'=U
     

    幂集

    设有集合A,由集合A所有子集组成的集合,称为集合A的幂集。对于幂集有定理如下:有限集A的幂集的基数等于2的有限集A的基数次幂

    区间

    实数集的子集是区间

    设a,b(a<b)是两个相异的实数,则满足不等式a<x<b的所有实数x的集合称为以a,b为端点的开区间,记为

     满足不等式的所有实数的集合称为以a,b为端点的闭区间,记为

     满足不等式 的所有实数x的集合称为以a,b为端点的半开半闭区间,分别记为

     

     无限区间

     

     

     

     

     

    运算

    交换律:A∩B=B∩A;A∪B=B∪A
    结合律:A∪(B∪C)=(A∪B)∪C;A∩(B∩C)=(A∩B)∩C
    分配对偶律:A∩(B∪C)=(A∩B)∪(A∩C);A∪(B∩C)=(A∪B)∩(A∪C)
    对偶律:(A∪B)^C=A^C∩B^C;(A∩B)^C=A^C∪B^C
    同一律:A∪∅=A;A∩U=A
    求补律:A∪A'=U;A∩A'=∅
    对合律:A''=A
    等幂律:A∪A=A;A∩A=A
    零一律:A∪U=U;A∩∅=∅
    吸收律:A∪(A∩B)=A;A∩(A∪B)=A
    反演律:(A∪B)'=A'∩B';(A∩B)'=A'∪B'。文字表述:1.集合A与集合B的并集的补集等于集合A的补集与集合B的补集的交集; 2.集合A与集合B的交集的补集等于集合A的补集与集合B的补集的并集。
    容斥原理(特殊情况):
    card(A∪B)=card(A)+card(B)-card(A∩B)
    card(A∪B∪C)=card(A)+card(B)+card(C)-card(A∩B)-card(B∩C)-card(C∩A)+card(A∩B∩C)

    两个集合各自独立,未产生交集,为空集∅

    select * from t_ke 
    where ke_name like '%数学%' or ke_name='程序员的自我修养'
    
    
    select * from t_ke where ke_name like '%数学%'
    union all
    select * from t_ke where ke_name='大学数学'
    
    -->>
    select * from t_ke where ke_name like '%数学%'
    select * from t_ke where ke_name='离散数学'
    
    select * from t_ke 
    where ke_name like '%数学%' or ke_name='离散数学'
    
    select * from t_ke where ke_name like '%数学%'
    union all
    select * from t_ke where ke_name='离散数学'
    union all
    select 88 id,'城市建设' ke_name from dual
    
    
    select * from t_ke where ke_name like '%数学%'
    union 
    select * from t_ke where ke_name='离散数学'
    union 
    select 88 id,'城市建设' ke_name from dual

    二、交集

    create table t_stu2(
       id number primary key,
       user_name varchar2(10),
       sex varchar2(10)
    );
    
    insert into t_stu2 values(1,'小军','');
    insert into t_stu2 values(2,'小黄','');
    insert into t_stu2 values(3,'小陈','');
    insert into t_stu2 values(4,'小姚','');
    commit
    
    create table t_yigong(
       id number primary key,
       user_name varchar2(10)
    );
    
    insert into t_yigong values(1,'小陈');
    insert into t_yigong values(2,'小姚');
    insert into t_yigong values(3,'小K');
    insert into t_yigong values(4,'小T');
    commit
    select * from t_stu2
    select * from t_yigong
    
    -- 想看看学生中,有那些是义工
    -- 思维1:条件查询
    select * from t_stu2 
      where user_name in (select user_name from t_yigong)
    
    -- 想看看义工中,有那些是学生
    -- 思维1:条件查询
    select * from t_yigong 
      where user_name in (select user_name from t_stu2)
      
      
    -- 问题未必看交集的名字,只是我们要用到交集这个概念。
    -- 有可能,我查询的内容根本与学生或这义工的名字毫无联系
    -- 学生这个群体,愿意当义工的,女孩子多还是男孩子多?
    select sex,count(1) from t_stu2 where user_name in(
      select user_name from t_stu2
      intersect
      select user_name from t_yigong
    ) group by sex
    
    insert into t_stu2 values(5,'小冰','');
    insert into t_yigong values(5,'小冰');
    Commit

    三、举一反三

    -- 学生这个群体,不愿意当义工的,女孩子多还是男孩子多?
    --错误示范(99%大学生会犯的错误)
    select sex,count(1) from t_stu2 where user_name not in(
      select user_name from t_stu2
      intersect
      select user_name from t_yigong
    ) group by sex
    --  not in就是一种排除法
    -- 学习英语A,B,C,D (要排除3个才能得到正确答案)
    -- 对in操作:打开书本,在目录里面查询
    -- 对not in操作:打开书本,800页也需要一页一页看
    select * from t_stu2
    
    select sex,count(1) from t_stu2 where user_name in(
      select user_name from t_stu2
      minus
      select user_name from t_yigong
    ) group by sex
  • 相关阅读:
    Linux添加用户组和删除用户组
    购物意图分析
    架构是什么来的
    如何突破浏览器加载并发数的限制
    写JS自执行函数时要注意的
    网页是什么
    JVM
    javascript的边界
    浏览器
    HTTP
  • 原文地址:https://www.cnblogs.com/yuchne/p/12920735.html
Copyright © 2011-2022 走看看