• Oracle 集合


    -- 与数学有关系的集合()

    -- 单条语句

    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

     熟练掌握:union all 、intersect 、minus 
     大脑建立除了条件查询外的另外一个重要概念:集合运算
     要点:1、画韦恩图帮助思考何种集合运算
               2、把not in 转义为in避免损害系统性能 
  • 相关阅读:
    hdu 1199 Color the Ball 离散线段树
    poj 2623 Sequence Median 堆的灵活运用
    hdu 2251 Dungeon Master bfs
    HDU 1166 敌兵布阵 线段树
    UVALive 4426 Blast the Enemy! 计算几何求重心
    UVALive 4425 Another Brick in the Wall 暴力
    UVALive 4423 String LD 暴力
    UVALive 4872 Underground Cables 最小生成树
    UVALive 4870 Roller Coaster 01背包
    UVALive 4869 Profits DP
  • 原文地址:https://www.cnblogs.com/sheying/p/8571896.html
Copyright © 2020-2023  润新知