Rumah pangkalan data tutorial mysql SQL语句的MINUS,INTERSECT和UNION ALL的解析

SQL语句的MINUS,INTERSECT和UNION ALL的解析

Oct 17, 2017 am 10:10 AM
union

SQL语句中的三个关键字:MINUS(减去),INTERSECT(交集)和UNION ALL(并集);

关于集合的概念,中学都应该学过,就不多说了.这三个关键字主要是对数据库的查询结果进行操作,正如其中文含义一样:两个查询,MINUS是从第一个查询结果减去第二个查询结果,如果有相交部分就减去相交部分;否则和第一个查询结果没有区别. INTERSECT是两个查询结果的交集,UNION ALL是两个查询的并集;

 

 虽然同样的功能可以用简单SQL语句来实现,但是性能差别非常大,有人做过实验:made_order共23万笔记录,charge_detail共17万笔记录:

    SELECT order_id FROM made_order
  MINUS
  SELECT order_id FROM charge_detail
耗时:1.14 sec
  
  SELECT a.order_id FROM made_order a
   WHERE a.order_id NOT exists (
     SELECT order_id
     FROM charge_detail
     WHERE order_id = a.order_id
   )
耗时:18.19 sec
Salin selepas log masuk

性能相差15.956倍!因此在遇到这种问题的时候,还是用MINUS,INTERSECT和UNION ALL来解决问题,否则面对业务中随处可见的上百万数据量的查询,数据库服务器还不被咱玩的死翘翘?

PS:应用两个集合的相减,相交和相加时,是有严格要求的:1.两个集合的字段必须明确(用*就不行,报错);2.字段类型和顺序相同(名称可以不同),如:集合1的字段1是NUMBER,字段2是VARCHAR,那么集合2的字段1必须也是NUMBER,字段2必须是VARCHAR;3.不能排序,如果要对结果排序,可以在集合运算后,外面再套一个查询,然后排序,如前面的例子可以改成:

SELECT * FROM 
   (SELECT order_id FROM made_order
   MINUS
  SELECT order_id FROM charge_detail)
ORDER BY ORDER_ID ASC
Salin selepas log masuk

Atas ialah kandungan terperinci SQL语句的MINUS,INTERSECT和UNION ALL的解析. 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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 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)

Topik panas

Tutorial Java
1668
14
Tutorial PHP
1273
29
Tutorial C#
1256
24
Cara menggunakan kesatuan dalam bahasa c Cara menggunakan kesatuan dalam bahasa c Sep 27, 2023 am 11:00 AM

Penggunaan kesatuan dalam bahasa C ialah jenis data khas yang membolehkan jenis data yang berbeza disimpan di lokasi memori yang sama Penggunaan kesatuan boleh membantu kami menjimatkan ruang memori dan memudahkan penukaran antara jenis data yang berbeza. Apabila menggunakan kesatuan, anda perlu ambil perhatian bahawa ahli yang sepadan adalah sah dan hanya seorang ahli boleh diakses pada masa yang sama.

Bagaimana untuk menggunakan fungsi FULL OUTER JOIN dalam MySQL untuk mendapatkan penyatuan dua jadual Bagaimana untuk menggunakan fungsi FULL OUTER JOIN dalam MySQL untuk mendapatkan penyatuan dua jadual Jul 26, 2023 pm 05:45 PM

Cara menggunakan fungsi FULLOUTERJOIN dalam MySQL untuk mendapatkan gabungan dua jadual Dalam MySQL, fungsi FULLOUTERJOIN ialah operasi cantum yang kuat yang menggabungkan cantuman dalam dan cantuman luar. Ia boleh digunakan untuk mendapatkan penyatuan dua jadual, iaitu, menggabungkan semua data dalam dua jadual ke dalam set hasil tunggal. Artikel ini akan memperkenalkan penggunaan fungsi FULLOUTERJOIN dan menyediakan beberapa kod sampel untuk membantu pembaca memahami dengan lebih baik. Fungsi FULLOUTERJOIN

Bagaimanakah java menentukan kelas Union untuk merealisasikan kewujudan bersama badan data? Bagaimanakah java menentukan kelas Union untuk merealisasikan kewujudan bersama badan data? May 14, 2023 pm 03:34 PM

Tentukan kelas Kesatuan untuk melaksanakan kewujudan bersama badan data Dalam bahasa C/C++, kesatuan, juga dikenali sebagai kesatuan, ialah struktur data yang serupa dengan struct. Kesatuan, seperti struct, boleh mengandungi banyak jenis data dan pembolehubah Perbezaan antara kedua-duanya adalah seperti berikut: semua pembolehubah dalam struct "wujud bersama", dan semua pembolehubah adalah sah pada masa yang sama. dalam kesatuan, setiap pembolehubah adalah "saling eksklusif", hanya satu pembolehubah berkesan pada masa yang sama, dan semua pembolehubah menduduki ruang memori yang sama. Apabila berbilang data perlu berkongsi memori atau hanya satu daripada berbilang data perlu diambil pada satu masa, kesatuan boleh digunakan. di Jawa

Cara menggunakan mysql union untuk melaksanakan pertanyaan gabungan luar penuh Cara menggunakan mysql union untuk melaksanakan pertanyaan gabungan luar penuh May 30, 2023 pm 06:49 PM

1. Kesatuan bukan kaedah pertanyaan sambungan berbilang jadual Ia menggabungkan hasil pertanyaan berbilang ayat pertanyaan menjadi satu hasil dan mengalih keluar data pendua. 2. Sambungan luar penuh menanyakan data jadual kiri dan jadual kanan, dan kemudian menyambung mengikut keadaan sambungan. Contoh #Gunakan Aunion luar kiri dan luar kanan BSELECT*FROMt_categorycLEFTOUTERJOINt_productpONc.cid=p.cnounionSELECT*FROMt_categorycRIGHTOUTERJOINt_productpONc.cid=p.cno

Bagaimana untuk mengoptimumkan UNION melalui MySQL untuk meningkatkan prestasi Bagaimana untuk mengoptimumkan UNION melalui MySQL untuk meningkatkan prestasi May 11, 2023 pm 05:40 PM

Dalam banyak aplikasi pangkalan data, kita berhadapan dengan situasi di mana kita perlu menyepadukan data daripada pelbagai sumber data. Kenyataan UNION MySQL ialah satu cara untuk menyelesaikan situasi ini, yang membolehkan kami menggabungkan set hasil dua atau lebih pernyataan SELECT menjadi satu. Walaupun ini adalah ciri yang sangat mudah, kenyataan UNION juga boleh menyebabkan isu prestasi pada sistem anda jika tidak dioptimumkan. Artikel ini akan meneroka cara mengoptimumkan UNION untuk meningkatkan prestasi melalui MySQL. Gunakan UNIONALL semasa menggunakan U

Cara menggunakan Union untuk mengoptimumkan pernyataan Suka dalam MySQL Cara menggunakan Union untuk mengoptimumkan pernyataan Suka dalam MySQL May 31, 2023 pm 03:55 PM

Optimumkan kenyataan Suka dengan Kesatuan 1) Kadangkala, anda mungkin perlu menggunakan operator atau untuk perbandingan dalam pertanyaan. Apabila kata kunci atau digunakan terlalu kerap dalam klausa where, ia boleh menyebabkan pengoptimum MySQL tersilap memilih imbasan jadual penuh untuk mendapatkan semula rekod. Klausa kesatuan boleh membuat pertanyaan dilaksanakan dengan lebih pantas, terutamanya apabila salah satu pertanyaan mempunyai indeks yang dioptimumkan dan pertanyaan lain juga mempunyai indeks yang dioptimumkan. Sebagai contoh, apabila terdapat indeks pada nama_pertama dan nama_akhir masing-masing, laksanakan pernyataan pertanyaan berikut: mysql>select*fromstudentswherefirst_namelike'A

Apakah perkara yang perlu diperhatikan apabila menggunakan kesatuan dalam mysql? Apakah perkara yang perlu diperhatikan apabila menggunakan kesatuan dalam mysql? Jun 03, 2023 pm 08:04 PM

1. Operator kesatuan digunakan untuk menggabungkan hasil dua atau lebih penyata pilih ke dalam set hasil. Penyata pilihan berbilang akan memadamkan data pendua. 2. Apabila menggunakan kesatuan untuk menggabungkan set hasil, bilangan lajur dalam dua set hasil perlu sama. Contohselectplayerno,townfromPLAYERSwheretown='Inglewood' uniionselectplayerno,townfromPLAYERSwheretown='Plymouth';

Apakah perbezaan antara kesatuan dan kesatuan dalam MySQL Apakah perbezaan antara kesatuan dan kesatuan dalam MySQL May 30, 2023 am 08:04 AM

kesatuan: Laksanakan operasi kesatuan pada berbilang set hasil, tidak termasuk baris pendua dan susunkannya pada masa yang sama. unionall: Melakukan operasi kesatuan pada berbilang set hasil, termasuk baris pendua, tanpa mengisih. Tanya maklumat pekerja yang jabatannya kurang daripada 30, dan maklumat pekerja yang jabatannya lebih besar daripada 20 dan kurang daripada 40. ① Tanya maklumat pekerja yang nombor jabatannya kurang daripada 30. SELECTemployees_id,last_name,gaji,department_idFROMemployeesWHEREdepartment_id

See all articles