六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

用SQL進行集合運算

[摘要]這篇文章主要介紹了關于用SQL進行集合運算 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下1、比較表和表drop table if exists tbl_a;create table...

這篇文章主要介紹了關于用SQL進行集合運算 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

1、比較表和表

drop table if exists tbl_a;create table tbl_a(
key1 varchar(10),
col_1 int4,
col_2 int4,
col_3 int4
);insert into tbl_a values('A', 2, 3, 4);
insert into tbl_a values('B', 0, 7, 9);
insert into tbl_a values('c', 5, 1, 6);
drop table if exists tbl_b;create table tbl_b(
key1 varchar(10),
col_1 int4,
col_2 int4,
col_3 int4
);
insert into tbl_b values('A', 2, 3, 4);
insert into tbl_b values('B', 0, 7, 9);
insert into tbl_b values('c', 5, 1, 6);-- ## 如果union a b 行數一致則兩張表相等 select count(1) row_cnt  from ( select * 
           from tbl_A           union 
          select *            from tbl_b
        ) tmp
;


直接求兩表的不同之處

(select * from tbl_a except
 select * from tbl_b) union all
 (select * from tbl_b  except
  select * from tbl_a);

2、用差集實現關系除法運算

建表

drop table if exists skills;create table skills(
skill varchar(10)
);insert into skills values('oracle');
insert into skills values('unix');insert into skills values('java');drop table if exists empskills;create table empskills(
emp varchar(10),
skill varchar(10)
);insert into empskills values('相田','oracle');
insert into empskills values('相田','unix');
insert into empskills values('相田','java');
insert into empskills values('相田','c#');
insert into empskills values('神奇','oracle');
insert into empskills values('神奇','unix');
insert into empskills values('神奇','java');
insert into empskills values('平井','oracle');
insert into empskills values('平井','unix');
insert into empskills values('平井','PHP');
insert into empskills values('平井','Perl');
insert into empskills values('平井','C++');
insert into empskills values('若田部','Perl');
insert into empskills values('度來','oracle');
--把除法變成減法select distinct emp  from empskills es1 where not exists
        (select skill from skills
         expect         select skill from empskills es2          where es1.emp = es2.emp);

3、尋求相等的子集

drop table if exists supparts;create table supparts(
sup varchar(10),
part varchar(10)
);insert into supparts values('A', '螺絲');
insert into supparts values('A', '螺母');
insert into supparts values('A', '管子');
insert into supparts values('B', '螺絲');
insert into supparts values('B', '管子');
insert into supparts values('C', '螺絲');
insert into supparts values('C', '螺母');
insert into supparts values('C', '管子');
insert into supparts values('D', '螺絲');
insert into supparts values('D', '管子');
insert into supparts values('E','保險絲');
insert into supparts values('E', '螺母');
insert into supparts values('E', '管子');
insert into supparts values('F','保險絲');

思路: 兩個供應商都經營同種類型的零件 (簡單的按照零件列進行連接) 兩個供應商的零件類型數相同(即存在一一映射)(count限定)

select a.sup s1, b.sup s2  from supparts a, supparts b where a.sup < b.sup                       -- 生成供應商的全部組合 
   and a.part = b.part                     -- 條件1:經營同種類型的零件 
 group by a.sup, b.suphaving count(*) = (select count(1)         -- 條件2:經營的零件的數量種類相同 a = 中間數                     from supparts c                    where c.sup = a.sup)   and count(*) = (select count(1)         -- 條件2:經營的零件的數量種類相同 b = 中間數                     from supparts d                    where d.sup = b.sup)
;

4、刪除重行

drop table if exists products;create table products(
rowid int4,
name1 varchar(10),
price int4
);insert into products values(1,'蘋果',50);insert into products values(2,'橘子',100);
insert into products values(3,'橘子',100);insert into products values(4,'橘子',100);
insert into products values(5,'香蕉',80);-- 刪除重行高效SQL語句(1):通過EXCEPT求補集delete from productswhere rowid  in (select rowid           -- 全部rowid                   from products 
                 except                 -- 減去                 select max(rowid)      -- 要留下的rowid                   from products                  group by name1, price
                  );-- 刪除重行高效SQL語句(2):通過not indelete from products where rowid not in (select max(rowid)                      from products                     group by name1, price
                    );

練習

-- 改進中用union的比較select 
    case when count(1) = (select count(1) from tbl_A)          
    and count(1) = (select count(1)+1 from tbl_b)         
    then count(1) else '不相等' end row_cnt  from ( select * from tbl_A          union 
         select * from tbl_b
        ) tmp
;

內容多來自 《SQL進階教材》,僅做筆記。練習部分代碼均為原創。

以上就是用SQL進行集合運算 的詳細內容,更多請關注php中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 亚洲性视频在线 | 天堂网传媒 | 亚洲入口 | 日韩欧美理论片 | 欧美专区欧美吧 | 欧美特黄视频 | 社区天堂 | 亚洲福利视频一区二区三区 | 色播五月婷婷 | 日韩不卡一级毛片免费 | 欧美网站www | 亚洲视频一区二区 | 最近最新免费视频8 | 息与子外出中文字幕 | 亚洲国产成人久久午夜 | 最新丁香六月 | 青青草原在线免费观看 | 青娱乐最新网站 | 日本久久伊人 | 日韩视频91 | 最新影院 | 亚洲第一色站 | 四月天中文字幕 | 日本免费一区二区视频 | 中文字幕一区在线观看 | 色综合九九 | 日韩 欧美 亚洲 国产 | 片子免费在线观看 | 青青青国产免费手机视频在线观看 | 在线a久青草视频在线观看g | 伊人色综合久久天天人手人停 | 中文字幕三级在线不卡 | 五月婷婷综合色 | 日本在线观看视频网站 | 亚洲综合视频在线 | 亚洲色视频在线播放网站 | 影音先锋久久 | 中国黄色毛片 大片 | 日韩爽爽视频爽爽 | 日本免费色网站 | 色窝视频 |