Apa itu kesatuan?
Kesatuan menggabungkan hasil dari beberapa pertanyaan SELECT ke dalam set hasil gabungan.
Satu-satunya syarat untuk berfungsi ialah bilangan lajur harus sama dari semua pertanyaan PILIH yang perlu digabungkan.
Katakan kita mempunyai dua jadual seperti berikut
Sekarang mari buat pertanyaan UNION untuk menggabungkan kedua-dua jadual menggunakan DISTINCT
SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;
Di sini baris pendua dikeluarkan dan hanya baris unik dikembalikan.
Catatan: MySQL menggunakan klausa DISTINCT sebagai lalai semasa menjalankan pertanyaan UNION jika tidak ada yang ditentukan.
Sekarang mari buat pertanyaan UNION untuk menggabungkan kedua-dua jadual menggunakan SEMUA
SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;
Di sini baris pendua disertakan dan kerana kami menggunakan SEMUA.
Mengapa menggunakan kesatuan
Katakan ada kekurangan dalam reka bentuk pangkalan data anda dan anda menggunakan dua jadual berbeza yang bertujuan untuk tujuan yang sama. Anda mahu menggabungkan dua jadual ini menjadi satu sambil menghilangkan sebarang catatan pendua daripada merayap ke jadual baru. Anda boleh menggunakan UNION dalam kes seperti itu.
Ringkasan
- Perintah UNION digunakan untuk menggabungkan lebih dari satu hasil pertanyaan SELECT menjadi satu pertanyaan yang mengandungi baris dari semua pertanyaan terpilih.
- Bilangan lajur dan jenis data dalam pernyataan PILIH mesti sama agar perintah UNION berfungsi.
- Klausa DISTINCT digunakan untuk menghilangkan nilai pendua dari set hasil pertanyaan UNION. MySQL menggunakan klausa DISTINCT sebagai lalai semasa melaksanakan pertanyaan UNION jika tidak ada yang ditentukan.
- Klausa SEMUA digunakan untuk mengembalikan semua baris pendua dalam pertanyaan UNION.
Contoh praktikal menggunakan meja kerja MySQL
Di myFlixDB kami mari menggabungkan
keahlian_nombor dan nama penuh dari jadual Ahli
dengan
movie_id dan tajuk dari jadual filem
Kita boleh menggunakan pertanyaan berikut
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;
Melaksanakan skrip di atas di meja kerja MySQL terhadap myflixdb memberi kita hasil berikut seperti yang ditunjukkan di bawah.
membership_number | full_names |
---|---|
1 | Janet Jones |
2 | Janet Smith Jones |
3 | Robert Phil |
4 | Gloria Williams |
5 | Leonard Hofstadter |
6 | Sheldon Cooper |
7 | Rajesh Koothrappali |
8 | Leslie Winkle |
9 | Howard Wolowitz |
16 | 67% Guilty |
6 | Angels and Demons |
4 | Code Name Black |
5 | Daddy's Little Girls |
7 | Davinci Code |
2 | Forgetting Sarah Marshal |
9 | Honey mooners |
19 | movie 3 |
1 | Pirates of the Caribean 4 |
18 | sample movie |
17 | The Great Dictator |
3 | X-Men |