中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用SQL進行集合運算

發布時間:2020-07-15 14:31:43 來源:億速云 閱讀:263 作者:Leah 欄目:MySQL數據庫

今天就跟大家聊聊有關如何用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進行集合運算 有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武义县| 塘沽区| 克什克腾旗| 芦溪县| 永定县| 涞水县| 都兰县| 寿光市| 潍坊市| 南充市| 五原县| 鱼台县| 武威市| 乌兰浩特市| 钟山县| 永昌县| 裕民县| 太原市| 阿鲁科尔沁旗| 亚东县| 西乡县| 沙雅县| 斗六市| 民丰县| 酉阳| 宁远县| 政和县| 宜丰县| 行唐县| 嵩明县| 北票市| 民乐县| 浦江县| 扶风县| 淄博市| 沁水县| 兰考县| 定兴县| 桐乡市| 阿勒泰市| 张家港市|