Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Lembar Cheat SQL UNION dengan 10 Tips Mudah dan Berguna

Mengalami kesulitan dengan SQL UNION? Itu terjadi jika hasil yang Anda gabungkan membuat SQL Server Anda terhenti. Atau laporan yang telah berfungsi sebelumnya muncul kotak dengan ikon X merah. Terjadi kesalahan "Operand type clash" yang menunjuk ke garis dengan UNION. "Api" dimulai. Kedengarannya familiar?

Apakah Anda telah menggunakan SQL UNION untuk sementara waktu atau baru memulainya, lembar contekan atau serangkaian catatan singkat tidak ada salahnya. Inilah yang akan Anda dapatkan hari ini di pos ini. Daftar ini menawarkan 10 tip berguna untuk pemula dan veteran. Juga, akan ada contoh dan beberapa diskusi lanjutan.

[sendpulse-form id="11900″]

Namun sebelum kita masuk ke poin pertama, mari kita perjelas istilahnya.

UNION adalah salah satu operator himpunan dalam SQL yang menggabungkan 2 atau lebih kumpulan hasil. Ini mungkin berguna ketika Anda perlu menggabungkan nama, statistik bulanan, dan lainnya dari sumber yang berbeda. Dan apakah Anda menggunakan SQL Server, MySQL, atau Oracle, tujuan, perilaku, dan sintaksnya akan sangat mirip. Tapi bagaimana cara kerjanya?

1. Gunakan SQL UNION untuk Menggabungkan Unik Catatan

Menggunakan UNION untuk menggabungkan kumpulan hasil akan menghapus duplikat.

Mengapa Ini Penting?

Sebagian besar waktu, Anda tidak ingin hasil dengan duplikat. Sebuah laporan dengan garis duplikat menghabiskan tinta dan kertas dalam bentuk hardcopy. Dan ini akan membuat marah pengguna Anda.

Cara Menggunakannya

Anda menggabungkan hasil pernyataan SELECT dengan UNION di antaranya.

Sebelum kita mulai dengan contoh, mari kita siapkan data sampel kita.

USE AdventureWorks
GO

IF OBJECT_ID ('dbo.Customer1', 'U') IS NOT NULL  
DROP TABLE dbo.Customer1;  
GO  
IF OBJECT_ID ('dbo.Customer2', 'U') IS NOT NULL  
DROP TABLE dbo.Customer2;  
GO  
IF OBJECT_ID ('dbo.Customer3', 'U') IS NOT NULL  
DROP TABLE dbo.Customer3;  
GO  

-- Get 3 customer names with Andersen lastname  
SELECT TOP 3
  p.LastName
, p.FirstName
, c.AccountNumber
INTO dbo.Customer1  
FROM Person.Person AS p
INNER JOIN Sales.Customer c   
   ON c.PersonID = p.BusinessEntityID
WHERE p.LastName = 'Andersen';  

-- Make sure we have a duplicate in another table
SELECT
  c.LastName
 ,c.FirstName
 ,c.AccountNumber
INTO dbo.Customer2
FROM Customer1 c

-- Seems it's not enough. Let's have a 3rd copy
SELECT
  c.LastName
 ,c.FirstName
 ,c.AccountNumber
INTO dbo.Customer3
FROM Customer1 c

Kami akan menggunakan data yang dihasilkan oleh kode di atas hingga tip ketiga. Sekarang kita sudah siap, di bawah ini adalah contohnya:

SELECT
 c.LastName
,c.FirstName
,c.AccountNumber
FROM dbo.Customer1 c
UNION   
SELECT
 c2.LastName
,c2.FirstName
,c2.AccountNumber
FROM dbo.Customer2 c2
UNION
SELECT
 c3.LastName
,c3.FirstName
,c3.AccountNumber
FROM dbo.Customer3 c3

Kami memiliki 3 salinan dari nama pelanggan yang sama dan berharap bahwa catatan unik akan hilang. Lihat hasilnya:

Solusi dbForge Studio untuk SQL Server yang kami gunakan untuk contoh kami hanya menunjukkan 3 catatan. Bisa jadi 9. Dengan menerapkan UNION, kami menghapus duplikatnya.

Bagaimana Cara Kerjanya?

Diagram Rencana di dbForge Studio mengungkapkan bagaimana SQL Server menghasilkan hasil yang ditunjukkan pada Gambar 1. Lihat:

Untuk menginterpretasikan Gambar 2, mulai dari kanan ke kiri:

  1. Kami mengambil 3 record dari setiap operator Table Scan. Itulah 3 pernyataan SELECT dari contoh di atas. Setiap baris yang keluar menunjukkan '3' yang berarti masing-masing 3 catatan.
  2. Operator Penggabungan melakukan penggabungan hasil. Garis yang keluar darinya menunjukkan '9' – keluaran dari 9 record dari kombinasi hasil.
  3. Operator Distinct Sort memastikan catatan unik menjadi hasil akhir. Garis yang keluar darinya menunjukkan '3,' yang konsisten dengan jumlah record pada Gambar 1.

Diagram di atas menunjukkan bagaimana UNION diproses oleh SQL Server. Jumlah dan tipe operator yang digunakan mungkin berbeda bergantung pada kueri dan sumber data yang mendasarinya. Namun secara ringkas, UNION berfungsi sebagai berikut:

  • Ambil hasil setiap pernyataan SELECT.
  • Gabungkan hasil dengan operator Penggabungan.
  • Jika hasil gabungan tidak unik, SQL Server akan memfilter duplikatnya.

Semua contoh sukses dengan UNION mengikuti langkah-langkah dasar ini.

2. Gunakan SQL UNION ALL untuk Menggabungkan Catatan dengan Duplikat

Menggunakan UNION ALL menggabungkan kumpulan hasil dengan duplikat yang disertakan.

Mengapa Ini Penting?

Anda mungkin ingin menggabungkan kumpulan hasil dan kemudian mendapatkan catatan dengan duplikat untuk diproses nanti. Tugas ini berguna untuk membersihkan data Anda.

Cara Menggunakannya

Anda menggabungkan hasil pernyataan SELECT dengan UNION ALL di antaranya. Lihat contohnya:

SELECT
 c.LastName
,c.FirstName
,c.AccountNumber
FROM dbo.Customer1 c
UNION ALL  
SELECT
 c2.LastName
,c2.FirstName
,c2.AccountNumber
FROM dbo.Customer2 c2
UNION ALL  
SELECT
 c3.LastName
,c3.FirstName
,c3.AccountNumber
FROM dbo.Customer3 c3

Kode di atas menampilkan 9 record seperti yang ditunjukkan pada Gambar 3:

Bagaimana Cara Kerjanya?

Seperti sebelumnya, kami menggunakan diagram Plan untuk mengetahui cara kerjanya:

Kecuali Sort Distinct pada Gambar 2, diagram di atas adalah sama. Itu pas karena kami tidak ingin memfilter duplikat.

Diagram di atas menunjukkan cara kerja UNION ALL. Singkatnya, ini adalah langkah-langkah yang akan diikuti SQL Server:

  • Ambil hasil setiap pernyataan SELECT.
  • Kemudian, gabungkan hasilnya dengan operator Penggabungan.

Contoh sukses dengan UNION ALL mengikuti pola ini.

3. Anda Dapat Mencampur SQL UNION dan UNION ALL tetapi Mengelompokkannya dengan Tanda kurung

Anda dapat menggabungkan penggunaan UNION dan UNION ALL dalam setidaknya tiga pernyataan SELECT.

Bagaimana Cara Menggunakannya?

Anda menggabungkan hasil pernyataan SELECT dengan UNION atau UNION ALL di antaranya. Tanda kurung mengelompokkan hasil yang digabungkan. Mari kita gunakan data yang sama untuk contoh berikutnya:

SELECT
 c.LastName
,c.FirstName
,c.AccountNumber
FROM dbo.Customer1 c
UNION ALL  
(
  SELECT
   c2.LastName
  ,c2.FirstName
  ,c2.AccountNumber
  FROM dbo.Customer2 c2
  UNION
  SELECT
   c3.LastName
  ,c3.FirstName
  ,c3.AccountNumber
  FROM dbo.Customer3 c3
)

Contoh di atas menggabungkan hasil dari dua pernyataan SELECT terakhir tanpa duplikat. Kemudian, menggabungkannya dengan hasil dari pernyataan SELECT pertama. Hasilnya ada pada Gambar 5 di bawah ini:

4. Kolom Setiap Pernyataan SELECT Harus Memiliki Tipe Data yang Kompatibel

Kolom pada setiap pernyataan SELECT yang menggunakan UNION dapat memiliki tipe data yang berbeda. Ini dapat diterima selama mereka kompatibel dan memungkinkan konversi implisit di atasnya. Tipe data akhir dari hasil gabungan akan menggunakan tipe data dengan prioritas tertinggi. Juga, dasar dari ukuran data akhir adalah data dengan ukuran terbesar. Dalam kasus string, ini akan menggunakan data dengan jumlah karakter terbanyak.

Mengapa Ini Penting?

Jika Anda perlu memasukkan hasil UNION ke tabel, tipe dan ukuran data akhir akan menentukan apakah cocok dengan kolom tabel target atau tidak. Jika tidak, akan terjadi kesalahan. Misalnya, salah satu kolom di UNION memiliki tipe akhir NVARCHAR(50). Jika kolom tabel target adalah VARCHAR(50), maka Anda tidak dapat memasukkannya ke dalam tabel.

Bagaimana Cara Kerjanya?

Tidak ada cara yang lebih baik untuk menjelaskannya selain sebuah contoh:

SELECT N'김지수' AS FullName
  UNION
SELECT N'김제니' AS KoreanName
  UNION
SELECT N'박채영' AS KoreanName
  UNION
SELECT N'ลลิษา มโนบาล' AS ThaiName 
  UNION
SELECT 'Kim Ji-soo' AS EnglishName
  UNION
SELECT 'Jennie Kim' AS EnglishName
  UNION
SELECT 'Roseanne Park' AS EnglishName
  UNION
SELECT 'Lalisa Manoban' AS EnglishName

Contoh di atas berisi data dengan nama karakter bahasa Inggris, Korea, dan Thailand. Thailand dan Korea adalah karakter Unicode. Karakter bahasa Inggris tidak. Jadi, menurut Anda seperti apa tipe dan ukuran data akhir? dbForge Studio menunjukkannya di set hasil:

Apakah Anda memperhatikan tipe data akhir pada Gambar 6? Itu tidak bisa VARCHAR karena karakter Unicode. Jadi, itu harus NVARCHAR. Sedangkan ukuran tidak boleh kurang dari 14 karena data dengan jumlah karakter terbanyak memiliki 14 karakter. Lihat keterangan berwarna merah pada Gambar 6. Sebaiknya sertakan tipe dan ukuran data di header kolom di dbForge Studio.

Kasusnya tidak hanya untuk tipe data string. Ini juga berlaku untuk angka dan tanggal. Sedangkan jika mencoba menggabungkan data dengan tipe data yang tidak kompatibel akan terjadi error. Lihat contoh di bawah ini:

SELECT CAST('12/25/2020' AS DATE) AS col1
  UNION
SELECT CAST('10' AS INT) AS col1

Kami tidak dapat menggabungkan tanggal dan bilangan bulat menjadi satu kolom. Jadi, harapkan kesalahan seperti di bawah ini:

5. Nama Kolom Hasil Gabungan Akan Menggunakan Nama Kolom Pernyataan SELECT Pertama

Masalah ini berkaitan dengan tip sebelumnya. Perhatikan nama kolom dalam kode di Tip #4. Ada nama kolom yang berbeda di setiap pernyataan SELECT. Namun, kami melihat nama kolom terakhir dalam hasil gabungan pada Gambar 6 sebelumnya. Jadi, basisnya adalah nama kolom dari pernyataan SELECT pertama.

Mengapa Ini Penting?

Ini bisa berguna ketika Anda perlu membuang hasil UNION di tabel sementara. Jika Anda perlu merujuk ke nama kolomnya di pernyataan berikutnya, Anda harus yakin dengan namanya. Kecuali Anda menggunakan editor kode tingkat lanjut dengan IntelliSense, Anda akan menghadapi kesalahan lain dalam kode T-SQL Anda.

Bagaimana Cara Kerjanya?

Lihat Gambar 8 untuk hasil yang lebih jelas dalam menggunakan dbForge Studio:

6. Tambahkan ORDER BY dalam Pernyataan SELECT Terakhir dengan SQL UNION untuk Mengurutkan Hasil

Anda perlu mengurutkan hasil gabungan. Dalam serangkaian pernyataan SELECT dengan UNION di antaranya, Anda dapat melakukannya dengan klausa ORDER BY di pernyataan SELECT terakhir.

Mengapa Ini Penting?

Pengguna ingin mengurutkan data sesuai keinginan mereka di aplikasi, halaman web, laporan, spreadsheet, dan lainnya.

Cara Menggunakannya

Gunakan ORDER BY dalam pernyataan SELECT terakhir. Ini contohnya:

SELECT
 e.BusinessEntityID
,p.FirstName
,p.MiddleName
,p.LastName
,'Employee' AS PersonType
FROM HumanResources.Employee e
INNER JOIN Person.Person p ON e.BusinessEntityID = p.BusinessEntityID
UNION
SELECT
 c.PersonID
,p.FirstName
,p.MiddleName
,p.LastName
,'Customer' AS PersonType
FROM Sales.Customer c
INNER JOIN Person.Person p ON c.PersonID = p.BusinessEntityID
ORDER BY p.LastName, p.FirstName

Contoh di atas membuatnya tampak seperti penyortiran hanya terjadi pada pernyataan SELECT terakhir. Tapi tidak. Ini akan bekerja untuk hasil gabungan. Anda akan berada dalam masalah jika Anda menempatkannya di setiap pernyataan SELECT. Lihat hasilnya:

Tanpa ORDER BY, kumpulan hasil akan memiliki semua Karyawan PersonType pertama diikuti oleh semua Pelanggan PersonType . Namun, Gambar 9 menunjukkan bahwa nama menjadi urutan hasil gabungan.

Jika Anda mencoba menempatkan ORDER BY di setiap pernyataan SELECT untuk diurutkan, inilah yang akan terjadi:

Apakah Anda melihat garis berlekuk-lekuk pada Gambar 10? Ini peringatan. Jika Anda tidak menyadarinya dan melanjutkan, kesalahan akan muncul di jendela Daftar kesalahan dbForge Studio.

7. Klausa WHERE dan GROUP BY Dapat Digunakan di Setiap Pernyataan SELECT dengan SQL UNION

Klausa ORDER BY tidak berfungsi di setiap pernyataan SELECT dengan UNION di antaranya. Namun, klausa WHERE dan GROUP BY berfungsi.

Mengapa Ini Penting?

Anda mungkin ingin menggabungkan hasil kueri berbeda yang memfilter, menghitung, atau meringkas data. Misalnya, Anda dapat melakukan ini untuk mendapatkan total pesanan penjualan untuk Januari 2012 dan membandingkannya dengan Januari 2013, Januari 2014, dan seterusnya.

Cara Menggunakannya

Tempatkan klausa WHERE dan/atau GROUP BY di setiap pernyataan SELECT. Lihat contoh di bawah ini:

USE AdventureWorks
GO

-- Get the number of orders for January 2012, 2013, 2014 for comparison
SELECT
 YEAR(soh.OrderDate) AS OrderYear
,COUNT(*) AS NumberOfJanuaryOrders
FROM Sales.SalesOrderHeader soh
WHERE soh.OrderDate BETWEEN '01/01/2012' AND '01/31/2012'
GROUP BY YEAR(soh.OrderDate)
UNION
SELECT
 YEAR(soh.OrderDate) AS OrderYear
,COUNT(*) AS NumberOfJanuaryOrders
FROM Sales.SalesOrderHeader soh
WHERE soh.OrderDate BETWEEN '01/01/2013' AND '01/31/2013'
GROUP BY YEAR(soh.OrderDate)
UNION
SELECT
 YEAR(soh.OrderDate) AS OrderYear
,COUNT(*) AS NumberOfJanuaryOrders
FROM Sales.SalesOrderHeader soh
WHERE soh.OrderDate BETWEEN '01/01/2014' AND '01/31/2014'
GROUP BY YEAR(soh.OrderDate)

Kode di atas menggabungkan jumlah pesanan Januari selama tiga tahun berturut-turut. Sekarang, periksa outputnya:

Contoh ini menunjukkan bahwa dimungkinkan untuk menggunakan WHERE dan GROUP BY di masing-masing dari tiga pernyataan SELECT dengan UNION.

8. SELECT INTO Bekerja dengan SQL UNION

Saat Anda perlu menyisipkan hasil kueri dengan SQL UNION ke dalam tabel, Anda dapat melakukannya dengan menggunakan SELECT INTO.

Mengapa Ini Penting?

Akan ada saatnya Anda perlu memasukkan hasil kueri dengan UNION ke dalam tabel untuk diproses lebih lanjut.

Cara Menggunakannya

Tempatkan klausa INTO dalam pernyataan SELECT pertama. Ini contohnya:

SELECT
 YEAR(soh.OrderDate) AS OrderYear
,COUNT(*) AS NumberOfJanuaryOrders
INTO JanuaryOrders
FROM Sales.SalesOrderHeader soh
WHERE soh.OrderDate BETWEEN '01/01/2012' AND '01/31/2012'
GROUP BY YEAR(soh.OrderDate)
UNION
SELECT
 YEAR(soh.OrderDate) AS OrderYear
,COUNT(*) AS NumberOfJanuaryOrders
FROM Sales.SalesOrderHeader soh
WHERE soh.OrderDate BETWEEN '01/01/2013' AND '01/31/2013'
GROUP BY YEAR(soh.OrderDate)
UNION
SELECT
 YEAR(soh.OrderDate) AS OrderYear
,COUNT(*) AS NumberOfJanuaryOrders
FROM Sales.SalesOrderHeader soh
WHERE soh.OrderDate BETWEEN '01/01/2014' AND '01/31/2014'
GROUP BY YEAR(soh.OrderDate)

Ingatlah untuk menempatkan hanya satu klausa INTO ke dalam pernyataan SELECT pertama.

Bagaimana Cara Kerjanya

SQL Server mengikuti pola pemrosesan UNION. Kemudian, ia memasukkan hasilnya ke dalam tabel yang ditentukan dalam klausa INTO.

9. Bedakan SQL UNION dari SQL JOIN

Baik SQL UNION dan SQL JOIN menggabungkan data tabel, tetapi perbedaan sintaks dan hasilnya seperti siang dan malam.

Mengapa Ini Penting?

Jika laporan Anda atau persyaratan apa pun membutuhkan GABUNG tetapi Anda melakukan UNION, hasilnya akan salah.

Bagaimana SQL UNION dan SQL JOIN Digunakan

Ini SQL UNION vs. BERGABUNG. Ini adalah salah satu kueri penelusuran terkait dan pertanyaan yang dilakukan pemula di Google saat mempelajari SQL UNION. Berikut tabel perbedaannya:

SQL UNION SQL GABUNG
Apa yang digabungkan Baris Kolom (menggunakan kunci)
Jumlah kolom per tabel Sama untuk semua tabel Variabel (Nol untuk semua kolom/tabel)

Di semua proyek yang pernah saya tangani, SQL JOIN paling sering diterapkan. Saya hanya punya beberapa kasus yang menggunakan SQL UNION. Tapi seperti yang Anda lihat sejauh ini, SQL UNION jauh dari tidak berguna.

10. SQL UNION ALL Lebih Cepat Dari UNION

Diagram Rencana pada Gambar 2 dan Gambar 4 sebelumnya menunjukkan bahwa UNION membutuhkan operator tambahan untuk memastikan hasil yang unik. Itulah mengapa UNION ALL lebih cepat.

Mengapa Ini Penting?

Anda, pengguna Anda, pelanggan Anda, bos Anda, semuanya menginginkan hasil yang cepat. Mengetahui bahwa UNION ALL lebih cepat daripada UNION membuat Anda bertanya-tanya apa yang harus dilakukan jika Anda membutuhkan hasil gabungan yang unik. Ada satu solusi, seperti yang akan Anda lihat nanti.

SQL UNION ALL vs. Kinerja UNION

Gambar 2 dan Gambar 4 sudah memberi Anda gambaran tentang mana yang lebih cepat. Tetapi contoh kode yang digunakan sederhana dengan kumpulan hasil yang kecil. Mari tambahkan beberapa perbandingan lagi menggunakan jutaan catatan untuk membuatnya menarik.

Untuk memulainya, mari kita siapkan datanya:

SELECT TOP (2000000)
  val = ROW_NUMBER() OVER (ORDER BY sod.SalesOrderDetailID)
INTO dbo.TestNumbers
FROM AdventureWorks.Sales.SalesOrderDetail sod
CROSS JOIN AdventureWorks.Sales.SalesOrderDetail sod2

Itu 2 juta catatan. Saya harap itu cukup menarik. Sekarang, mari kita lihat dua contoh kueri berikutnya di bawah ini.

-- Using UNION ALL
SELECT
  val
FROM TestNumbers tn
UNION ALL
SELECT 
val
FROM TestNumbers tn

-- Using UNION
SELECT
  val
FROM TestNumbers tn
UNION
SELECT 
val
FROM TestNumbers tn

Mari kita periksa proses yang terlibat dalam kueri ini dimulai dengan yang lebih cepat.

Analisis Diagram Rencana

Diagram pada Gambar 12 terlihat khas dari proses UNION ALL. Namun, hasilnya adalah 4 juta hasil gabungan. Lihat panah keluar dari operator Penggabungan. Namun, biasanya karena tidak menangani duplikat.

Sekarang, mari kita lihat diagram kueri UNION pada Gambar 13:

Yang satu ini tidak lagi tipikal. Rencana tersebut menjadi rencana kueri paralel untuk menangani penghapusan duplikat dalam empat juta baris. Paket kueri paralel berarti SQL Server perlu membagi proses dengan jumlah inti prosesor yang tersedia untuknya.

Mari kita interpretasikan, mulai dari operator kanan ke kiri:

  1. Karena kita menggabungkan tabel dengan dirinya sendiri, SQL Server perlu mengambilnya dua kali. Lihat dua Pemindaian Tabel dengan masing-masing dua juta catatan.
  2. Operator Aliran Partisi akan mengontrol distribusi setiap baris ke utas berikutnya yang tersedia.
  3. Penggabungan menggandakan hasilnya menjadi empat juta. Ini masih mempertimbangkan jumlah core prosesor.
  4. Hash Match berlaku untuk menghapus duplikat. Ini adalah proses yang mahal dengan biaya operator 65,8%. Akibatnya, dua juta catatan dibuang.
  5. Kumpulkan Aliran menggabungkan kembali hasil yang dilakukan di setiap inti prosesor atau utas menjadi satu.

Itu terlalu banyak pekerjaan meskipun prosesnya dibagi menjadi beberapa utas. Oleh karena itu, Anda akan menyimpulkan bahwa itu akan berjalan lebih lambat. Tapi bagaimana jika ada solusi untuk mendapatkan record unik dengan UNION ALL tapi lebih cepat dari ini?

Hasil Unik tetapi Perbaikan Lebih Cepat dengan UNION ALL – Bagaimana caranya?

Aku tidak akan membuatmu menunggu. Ini kodenya:

SELECT DISTINCT
val
FROM
  (
    SELECT
      val
    FROM TestNumbers tn
    UNION ALL
    SELECT 
    val
    FROM TestNumbers tn
  ) AS uniqtn

Ini bisa menjadi solusi yang lemah. Tapi lihat Diagram Rencananya pada Gambar 14:

Jadi, apa yang membuatnya lebih baik? Jika Anda membandingkannya dengan Gambar 13, Anda melihat operator Repartition Stream hilang. Namun, masih menggunakan banyak utas untuk menyelesaikan pekerjaan. Di sisi lain, ini menyiratkan bahwa pengoptimal kueri menganggap proses ini lebih mudah dilakukan daripada kueri yang menggunakan UNION.

Bisakah kita menyimpulkan dengan aman bahwa kita harus menghindari penggunaan UNION dan menggunakan pendekatan ini sebagai gantinya? Tidak semuanya! Selalu periksa diagram rencana eksekusi! Itu selalu tergantung pada apa yang Anda ingin SQL Server berikan kepada Anda. Yang ini hanya menunjukkan bahwa jika Anda menabrak tembok kinerja, Anda perlu mengubah pendekatan kueri Anda.

Bagaimana dengan Statistik I/O?

Kami tidak dapat mengabaikan berapa banyak sumber daya yang dibutuhkan SQL Server untuk memproses contoh kueri kami. Itu sebabnya kita juga perlu memeriksa STATISTICS IO mereka. Membandingkan tiga pertanyaan di atas, kita mendapatkan bacaan logis di bawah ini:

Dari Gambar 15, kita masih dapat menyimpulkan bahwa UNION ALL lebih cepat dari UNION meskipun pembacaan logikanya sama. Kehadiran Meja Kerja dan File Kerja tampilkan menggunakan tempdb untuk menyelesaikan pekerjaan. Sementara itu, ketika kita menggunakan SELECT DISTINCT dari tabel turunan dengan UNION ALL, tempdb penggunaan kurang dibandingkan dengan UNION. Ini menegaskan kembali bahwa analisis kami dari Diagram Rencana sebelumnya adalah benar.

Bagaimana dengan Statistik Waktu?

Meskipun waktu yang berlalu dapat berubah dalam setiap eksekusi yang kami lakukan untuk kueri yang sama, ini dapat memberi kami beberapa ide dan menambahkan lebih banyak bukti untuk analisis kami. dbForge Studio menampilkan perbedaan waktu dari ketiga query di atas. Perbandingan ini konsisten dengan analisis yang kami lakukan sebelumnya.

Kesimpulan

Kami membahas banyak latar belakang untuk menyediakan apa yang Anda butuhkan untuk menggunakan SQL UNION dan UNION ALL. Anda mungkin tidak mengingat semuanya setelah membaca postingan ini, jadi pastikan untuk menandai halaman ini.

Jika Anda menyukai postingan ini, jangan ragu untuk membagikannya ke media sosial.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hapus Posting dan Komentar dari Penjadwal Tindakan

  2. Apa sih DTU itu?

  3. Memecahkan masalah kegagalan saat mencoba membuat model IMDB besar

  4. Kesalahan ORA-65048 saat mengubah kata sandi pengguna di basis data wadah (CDB)

  5. Pandas:Cara Membaca dan Menulis File