Apa perbedaan antara JOIN dan UNION?


Jawaban:


301

UNIONmenempatkan garis dari kueri satu sama lain, sementara JOINmembuat produk kartesius dan mengelompokkannya - operasi yang sama sekali berbeda. Contoh sepele dari UNION:

mysql> SELECT 23 AS bah
    -> UNION
    -> SELECT 45 AS bah;
+-----+
| bah |
+-----+
|  23 | 
|  45 | 
+-----+
2 rows in set (0.00 sec)

contoh sepele yang serupa dari JOIN:

mysql> SELECT * FROM 
    -> (SELECT 23 AS bah) AS foo 
    -> JOIN 
    -> (SELECT 45 AS bah) AS bar
    -> ON (33=33);
+-----+-----+
| foo | bar |
+-----+-----+
|  23 |  45 | 
+-----+-----+
1 row in set (0.01 sec)

6
Bisakah Anda memberi tahu saya apa itu UNION-JOINdan bagaimana saya bisa mencapainya dalam SQL standar? Maria DB memiliki perintah union join, tetapi database lain tidak. Terima kasih.
Erran Morad

73

Bergabung dan Serikat dapat digunakan untuk menggabungkan data dari satu atau lebih tabel. Perbedaannya terletak pada bagaimana data digabungkan.

Secara sederhana, bergabung menggabungkan data ke dalam kolom baru . Jika dua tabel digabungkan, maka data dari tabel pertama ditampilkan dalam satu set kolom di samping kolom tabel kedua di baris yang sama.

Serikat pekerja menggabungkan data ke dalam baris baru. Jika dua tabel "bersatu" bersama, maka data dari tabel pertama adalah dalam satu set baris, dan data dari tabel kedua di set lain. Baris dalam hasil yang sama.

Berikut ini adalah penggambaran visual dari bergabung. Kolom Tabel A dan B digabungkan menjadi satu hasil.

masukkan deskripsi gambar di sini

Setiap baris dalam hasil berisi kolom dari KEDUA tabel A dan B. Baris dibuat ketika kolom dari satu tabel cocok dengan kolom lainnya. Pertandingan ini disebut kondisi bergabung.

Ini membuat penggabungan sangat bagus untuk mencari nilai dan memasukkannya dalam hasil. Ini biasanya merupakan hasil dari denormalisasi (membalikkan normalisasi) dan melibatkan penggunaan kunci asing dalam satu tabel untuk mencari nilai kolom dengan menggunakan kunci primer di tabel lain.

Sekarang bandingkan penggambaran di atas dengan penggabungan. Dalam sebuah serikat, setiap baris dalam hasilnya berasal dari satu tabel ATAU yang lainnya. Dalam gabungan, kolom tidak digabungkan untuk membuat hasil, baris digabungkan.

masukkan deskripsi gambar di sini

Gabungan dan gabungan dapat digunakan untuk menggabungkan data dari satu atau lebih tabel ke dalam satu hasil. Mereka berdua pergi tentang cara ini berbeda. Jika gabungan digunakan untuk menggabungkan kolom dari tabel yang berbeda, gabungan digunakan untuk menggabungkan baris.

Sumber


4
Ini adalah contoh visual yang luar biasa. Saya cukup yakin saya mengerti setelah jawaban yang lain, tetapi ini benar-benar jelas.
seadoggie01

Untuk contoh bergabung, secara teknis, tidakkah harus ada seperti 10 kolom untuk hasilnya?
Bharath Ram

60

UNION menggabungkan hasil dari dua atau lebih kueri ke dalam satu set hasil tunggal yang mencakup semua baris yang menjadi milik semua kueri di dalam serikat.

Dengan menggunakan BERGABUNG , Anda dapat mengambil data dari dua tabel atau lebih berdasarkan pada hubungan logis antara tabel. Bergabung menunjukkan bagaimana SQL harus menggunakan data dari satu tabel untuk memilih baris di tabel lain.

Operasi UNION berbeda dari menggunakan BERGABUNG yang menggabungkan kolom dari dua tabel.

Contoh UNION:

SELECT 1 AS [Column1], 2 AS [Column2]
UNION
SELECT 3 AS [Column1], 4 AS [Column2]

Keluaran:

Column1    Column2
-------------------
1          2
3          4

GABUNG Contoh:

SELECT a.Column1, b.Column2 FROM TableA a INNER JOIN TableB b ON a.Id = b.AFKId

Ini akan menampilkan semua baris dari kedua tabel yang kondisinya a.Id = b.AFKIdbenar.


Gabung dapat mengambil data dari satu * atau lebih tabel. Tidak harus dua
Kennet Celeste

51

Anda mungkin melihat penjelasan skematis yang sama untuk keduanya, tetapi ini benar-benar membingungkan.

Untuk UNION:

Masukkan deskripsi gambar di sini

Untuk BERGABUNG:

Masukkan deskripsi gambar di sini


9
Gambar-gambar ini menyiratkan bahwa FULL OUTER JOINitu sama dengan UNION, yang memang memiliki perbedaan
icc97

1
Jawaban ini menunjukkan bahwa gambar-gambar itu membingungkan (IMO yang mana) tetapi kemudian tidak menjelaskan mengapa atau menawarkan klarifikasi apa pun terhadap pertanyaan awal.
Josh D.

1
Setiap gambar dengan diagram menjelaskan dengan sempurna situasinya. Tidak ada gambar tunggal selain yang dapat menggabungkan semua diagram. Itu akan lebih membingungkan.
Java Main

41

IKUTI:

Gabung digunakan untuk menampilkan kolom dengan nama yang sama atau berbeda dari tabel yang berbeda. Output yang ditampilkan akan memiliki semua kolom yang ditampilkan secara individual. Artinya, kolom akan disejajarkan di sebelah satu sama lain.

PERSATUAN:

Operator set UNION digunakan untuk menggabungkan data dari dua tabel yang memiliki kolom dengan tipe data yang sama. Ketika UNION dilakukan, data dari kedua tabel akan dikumpulkan dalam satu kolom yang memiliki tipe data yang sama.

Sebagai contoh:

Lihat dua tabel di bawah ini:

Table t1
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2

Table t2
manufacturer_id manufacturer
1 ABC Gmbh
2 DEF Co KG

Sekarang untuk melakukan tipe JOIN, query ditunjukkan di bawah ini.

SELECT articleno, article, manufacturer
FROM t1 JOIN t2 ON (t1.manufacturer_id =
t2.manufacturer_id);

articelno article manufacturer
1 hammer ABC GmbH
2 screwdriver DEF Co KG

Itu sebuah join.

UNION berarti Anda harus tabel atau hasil dengan jumlah dan jenis kolom yang sama dan Anda menambahkan ini ke tabel / hasil bersama. Lihat contoh ini:

Table year2006
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2

Table year2007
Articleno article price manufacturer_id
1 hammer 6 $ 3
2 screwdriver 7 $ 4

SELECT articleno, article, price, manufactruer_id
FROM year2006
UNION
SELECT articleno, article, price, manufacturer_id
FROM year2007

articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2
1 hammer 6 $ 3
2 screwdriver 7 $ 4

21

Mereka hal yang sangat berbeda.

Sebuah bergabung memungkinkan Anda untuk berhubungan data yang sama dalam tabel yang berbeda.

Serikat pekerja mengembalikan hasil dari dua kueri yang berbeda sebagai satu set rekaman.


9

Persatuan membuat dua kueri terlihat seperti satu. Bergabung adalah untuk memeriksa dua atau lebih tabel dalam pernyataan kueri tunggal


3

Bergabung dan serikat dapat digunakan untuk menggabungkan data dari satu atau lebih tabel. Perbedaannya terletak pada bagaimana data digabungkan.

Secara sederhana, bergabung menggabungkan data ke dalam kolom baru. Jika dua tabel digabungkan, maka data dari tabel pertama ditampilkan dalam satu set kolom di samping kolom tabel kedua di baris yang sama.

Serikat pekerja menggabungkan data ke dalam baris baru. Jika dua tabel "bersatu" bersama, maka data dari tabel pertama adalah dalam satu set baris, dan data dari tabel kedua di set lain. Baris dalam hasil yang sama.


1

Ingat bahwa penyatuan akan menggabungkan hasil ( SQL Server untuk memastikan) (fitur atau bug?)

select 1 as id, 3 as value
union
select 1 as id, 3 as value

id, nilai

1,3

select * from (select 1 as id, 3 as value) t1 inner join (select 1 as id, 3 as value) t2 on t1.id = t2.id

id, nilai, id, nilai

1,3,1,3


6
Ini sesuai dengan standar ANSI, UNION ALL tidak menggabungkan hasil
vzczc

1
Lihat juga UNIONvs UNION ALL stackoverflow.com/questions/49925/…
Jaider

0

1. Klausa SQL Joins digunakan untuk menggabungkan catatan dari dua atau lebih tabel dalam database. GABUNG adalah sarana untuk menggabungkan bidang dari dua tabel dengan menggunakan nilai yang umum untuk masing-masing.

2. Operator SQL UNION menggabungkan hasil dari dua atau lebih pernyataan SELECT. Setiap pernyataan SELECT dalam UNION harus memiliki jumlah kolom yang sama. Kolom juga harus memiliki tipe data yang serupa. Juga, kolom dalam setiap pernyataan SELECT harus dalam urutan yang sama.

misalnya: pesanan tabel 1 pelanggan / table 2

bergabung dalam:

SELECT ID, NAME, AMOUNT, DATE

DARI PELANGGAN


INNER BERGABUNG PESANAN


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Persatuan:

SELECT ID, NAME, AMOUNT, DATE


DARI PELANGGAN


PESAN GABUNG KIRI


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID

PERSATUAN

ID PILIH, NAMA, JUMLAH, TANGGAL DARI PELANGGAN


BERGABUNG DENGAN PESANAN


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;


0

Menggunakan UNION

UNION menggabungkan hasil dari dua atau lebih kueri menjadi satu set hasil tunggal yang mencakup semua baris yang menjadi milik semua kueri di dalam serikat.

Contoh UNION:
SELECT 121 AS [Kolom1], 221 AS [Kolom2]
PERSATUAN
SELECT 321 AS [Kolom1], 422 AS [Kolom2]
Keluaran:

Kolom1 Kolom2
-------------------
121 221
321 422

Menggunakan GABUNG

BERGABUNG, Anda dapat mengambil data dari dua tabel atau lebih berdasarkan hubungan logis antara tabel.

GABUNG Contoh:
PILIH a.Column1, b.Column2 DARI TblA a INNER GABUNG TblB b PADA a.Id = b.id


-1

Dalam abstrak, keduanya serupa, dalam dua tabel atau set hasil digabungkan, tetapi UNION benar-benar untuk menggabungkan set hasil dengan JUMLAH KOLOM YANG SAMA dengan JENIS-JENIS DATA YANG MENGUMPULKAN KOLOM. STRUKTURnya sama, hanya baris baru yang ditambahkan.

Dalam gabungan, Anda dapat menggabungkan set tabel / hasil dengan struktur apa pun yang mungkin, termasuk gabungan kartesian di mana TIDAK ada kolom bersama / serupa.


-1

Operator UNION hanya untuk menggabungkan dua atau lebih pernyataan SELECT.

Sementara BERGABUNG adalah untuk memilih baris dari setiap tabel, baik dengan metode dalam, luar, kiri atau kanan.

Lihat di sini dan di sini . Ada penjelasan yang lebih baik dengan contoh-contoh.


-1

Operasi Union adalah hasil gabungan dari Agregat Vertikal dari baris, Operasi Union adalah hasil gabungan dari Agregat Horisontal dari Kolom.


-3

Saya suka memikirkan perbedaan umum sebagai:

  • GABUNG bergabung dengan tabel
  • UNION (dan semuanya) menggabungkan kueri.

1
Ini menimbulkan pertanyaan - bergabung disebutkan dalam istilah "bergabung" & serikat disebutkan dalam istilah "gabungan" yang tidak dijelaskan. Ngomong-ngomong, menurut Anda apa yang akan Anda tambahkan di luar jawaban berumur 10 tahun yang sangat terpilih yang menjadikan ini "berguna"? (Retorika.) Lihat teks voting panah mouseover.
philipxy
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.