Jadual Kandungan
1、比较表和表
2、用差集实现关系除法运算
3、寻求相等的子集
4、删除重行
练习
内容多来自 《SQL进阶教材》,仅做笔记。练习部分代码均为原创。" >内容多来自 《SQL进阶教材》,仅做笔记。练习部分代码均为原创。
Rumah pangkalan data tutorial mysql 用SQL进行集合运算

用SQL进行集合运算

Jun 04, 2018 am 09:29 AM
Operasi kelakuan berkumpul

这篇文章主要介绍了关于用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
;
Salin selepas log masuk


直接求两表的不同之处

(select * from tbl_a except
 select * from tbl_b) union all
 (select * from tbl_b  except
  select * from tbl_a);
Salin selepas log masuk

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');
Salin selepas log masuk
--把除法变成减法select distinct emp  from empskills es1 where not exists
        (select skill from skills
         expect         select skill from empskills es2          where es1.emp = es2.emp);
Salin selepas log masuk

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','保险丝');
Salin selepas log masuk

思路: 两个供应商都经营同种类型的零件 (简单的按照零件列进行连接) 两个供应商的零件类型数相同(即存在一一映射)(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)
;
Salin selepas log masuk

4、删除重行

drop table if exists products;create table products(
rowid int4,
name1 varchar(10),
price int4
);insert into products values(1,&#39;苹果&#39;,50);insert into products values(2,&#39;橘子&#39;,100);
insert into products values(3,&#39;橘子&#39;,100);insert into products values(4,&#39;橘子&#39;,100);
insert into products values(5,&#39;香蕉&#39;,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
                    );
Salin selepas log masuk

练习

-- 改进中用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 &#39;不相等&#39; end row_cnt  from ( select * from tbl_A          union 
         select * from tbl_b
        ) tmp
;
Salin selepas log masuk

内容多来自 《SQL进阶教材》,仅做笔记。练习部分代码均为原创。

Atas ialah kandungan terperinci 用SQL进行集合运算 . Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Mengapakah sukar untuk melaksanakan fungsi seperti koleksi dalam bahasa Go? Mengapakah sukar untuk melaksanakan fungsi seperti koleksi dalam bahasa Go? Mar 24, 2024 am 11:57 AM

Sukar untuk melaksanakan fungsi seperti koleksi dalam bahasa Go, yang merupakan masalah yang menyusahkan ramai pembangun. Berbanding dengan bahasa pengaturcaraan lain seperti Python atau Java, bahasa Go tidak mempunyai jenis koleksi terbina dalam, seperti set, peta, dll., yang membawa beberapa cabaran kepada pembangun apabila melaksanakan fungsi pengumpulan. Mula-mula, mari kita lihat mengapa sukar untuk melaksanakan fungsi seperti koleksi secara langsung dalam bahasa Go. Dalam bahasa Go, struktur data yang paling biasa digunakan ialah hirisan dan peta Mereka boleh melengkapkan fungsi seperti koleksi, tetapi

Bagaimana untuk mengoptimumkan prestasi pengisihan koleksi Java Bagaimana untuk mengoptimumkan prestasi pengisihan koleksi Java Jun 30, 2023 am 10:43 AM

Java ialah bahasa pengaturcaraan yang berkuasa yang digunakan secara meluas dalam pelbagai jenis pembangunan perisian. Dalam pembangunan Java, senario yang sering melibatkan pengisihan koleksi terlibat. Walau bagaimanapun, jika pengoptimuman prestasi tidak dilakukan untuk pengisihan koleksi, kecekapan pelaksanaan program mungkin berkurangan. Artikel ini akan meneroka cara mengoptimumkan prestasi pengisihan koleksi Java. 1. Pilih kelas koleksi yang sesuai Di Java, terdapat banyak kelas koleksi yang boleh digunakan untuk menyusun, seperti ArrayList, LinkedList, TreeSet, dll. Kelas koleksi berbeza masuk

Kemahiran operasi pangkalan data Oracle: penerangan terperinci tentang operasi tolak Kemahiran operasi pangkalan data Oracle: penerangan terperinci tentang operasi tolak Mar 02, 2024 pm 06:15 PM

Sebagai sistem pengurusan pangkalan data hubungan yang berkuasa, pangkalan data Oracle menyediakan banyak operasi pengkomputeran untuk memenuhi keperluan pengguna. Dalam operasi pangkalan data harian, operasi penolakan adalah operasi biasa dan penting. Ia boleh membantu kami merealisasikan operasi penolakan data untuk mendapatkan hasil yang kami perlukan. Artikel ini akan membincangkan secara terperinci teknik yang berkaitan dengan operasi penolakan dalam pangkalan data Oracle, dan memberikan contoh kod khusus untuk membantu pembaca memahami dan menggunakan fungsi ini dengan lebih baik. 1. Konsep asas operasi tolak dalam data Oracle

Tambahkan semua elemen dari satu koleksi ke koleksi yang lain menggunakan kaedah addAll() kelas HashSet Tambahkan semua elemen dari satu koleksi ke koleksi yang lain menggunakan kaedah addAll() kelas HashSet Jul 24, 2023 am 08:58 AM

Gunakan kaedah addAll() kelas HashSet untuk menambah semua elemen dalam koleksi ke koleksi lain HashSet ialah kelas pelaksanaan dalam rangka kerja koleksi Java Ia mewarisi daripada AbstractSet dan melaksanakan antara muka Set. HashSet ialah set tidak tertib berdasarkan jadual cincang, yang tidak membenarkan unsur pendua. Ia menyediakan banyak kaedah yang biasa digunakan untuk mengendalikan elemen dalam koleksi, salah satunya ialah kaedah addAll(). Fungsi kaedah addAll() adalah untuk menambah yang ditentukan

Panduan Praktikal untuk Kaedah Where dalam Koleksi Laravel Panduan Praktikal untuk Kaedah Where dalam Koleksi Laravel Mar 10, 2024 pm 04:36 PM

Panduan Praktikal Ke Mana Kaedah dalam Koleksi Laravel Semasa pembangunan rangka kerja Laravel, koleksi ialah struktur data yang sangat berguna yang menyediakan kaedah yang kaya untuk memanipulasi data. Antaranya, kaedah Where ialah kaedah penapisan yang biasa digunakan yang boleh menapis elemen dalam koleksi berdasarkan syarat yang ditetapkan. Artikel ini akan memperkenalkan penggunaan kaedah Where dalam koleksi Laravel dan menunjukkan penggunaannya melalui contoh kod tertentu. 1. Penggunaan asas kaedah Where

Koleksi serentak dan isu keselamatan benang dalam C# Koleksi serentak dan isu keselamatan benang dalam C# Oct 09, 2023 pm 10:49 PM

Pengumpulan serentak biasa dan isu keselamatan benang dalam C# Dalam pengaturcaraan C#, pengendalian operasi serentak adalah keperluan yang sangat biasa. Isu keselamatan benang timbul apabila berbilang benang mengakses dan mengubah suai data yang sama pada masa yang sama. Untuk menyelesaikan masalah ini, C# menyediakan beberapa pengumpulan serentak dan mekanisme keselamatan benang. Artikel ini akan memperkenalkan koleksi serentak biasa dalam C# dan cara menangani isu keselamatan benang, dan memberikan contoh kod khusus. Koleksi serentak 1.1ConcurrentDictionaryConcurrentDictio

Analisis dan penyelesaian kepada masalah operasi titik terapung PHP Analisis dan penyelesaian kepada masalah operasi titik terapung PHP Feb 27, 2024 am 11:03 AM

PHP ialah bahasa skrip yang digunakan secara meluas dalam pembangunan laman web Fungsinya yang berkuasa dan fleksibiliti menjadikannya alat pilihan untuk banyak pembangun. Walau bagaimanapun, PHP juga mempunyai beberapa masalah apabila berurusan dengan operasi titik terapung, terutamanya apabila ia berkaitan dengan ketepatan dan ketepatan. Artikel ini akan menganalisis masalah operasi titik terapung PHP dan mencadangkan beberapa penyelesaian Ia juga akan menyediakan contoh kod khusus untuk membantu pembaca memahami dan menyelesaikan masalah ini dengan lebih baik. Analisis Masalah Dalam PHP, nombor titik terapung ialah jenis data yang digunakan untuk mewakili perpuluhan.

Java Iterator vs. Iterable: Satu langkah untuk menulis kod elegan Java Iterator vs. Iterable: Satu langkah untuk menulis kod elegan Feb 19, 2024 pm 02:54 PM

Antara muka Iterator Antara muka Iterator ialah antara muka yang digunakan untuk melintasi koleksi. Ia menyediakan beberapa kaedah, termasuk hasNext(), next() dan remove(). Kaedah hasNext() mengembalikan nilai Boolean yang menunjukkan sama ada terdapat elemen seterusnya dalam koleksi. Kaedah next() mengembalikan elemen seterusnya dalam koleksi dan mengeluarkannya daripada koleksi. Kaedah remove() mengalih keluar elemen semasa daripada koleksi. Contoh kod berikut menunjukkan cara menggunakan antara muka Iterator untuk mengulang koleksi: Listnames=Arrays.asList("John","Mary","Bob");Iterator

See all articles