Terkadang, Anda mungkin ingin menggabungkan rekaman dari satu tabel atau kueri dengan catatan dari satu atau beberapa tabel lain menjadi satu hasil. Itulah yang dilakukan kueri gabungan di Access.
Untuk memahami kueri gabungan secara efektif, Anda harus terlebih dahulu mengetahui hal-hal terkait desain kueri pemilihan dasar di Access. Untuk mempelajari selengkapnya tentang mendesain kueri pemilihan, lihat Membuat kueri pemilihan sederhana.
Mempelajari contoh kueri gabungan yang dapat dimodifikasi
Jika Anda belum pernah membuat kueri gabungan sebelumnya, mungkin ada baiknya Anda mempelajari contoh kerja terlebih dahulu di templat Northwind Access. Anda dapat mencari templat sampel Northwind di halaman mulai Access dengan memilih File>Baru. Anda juga dapat mengunduh salinan langsung dari templat sampel Northwind.
Setelah Access membuka database Northwind, tutup kotak dialog masuk yang pertama kali muncul, lalu perluas Panel Navigasi. Pilih bagian atas Panel Navigasi, lalu pilih Tipe Objek untuk mengatur semua objek database berdasarkan jenisnya. Selanjutnya, perluas grup Kueri , dan Anda akan melihat kueri bernama Transaksi Produk.
Kueri gabungan mudah dibedakan dari objek kueri lain karena adanya ikon khusus yang menyerupai dua lingkaran terkait yang mewakili sebuah gabungan dari dua kumpulan:
Tidak seperti kueri pilih dan tindakan normal, tabel tidak terkait dalam kueri gabungan. Artinya, Anda tidak dapat menggunakan desainer kueri grafis Access untuk membuat atau mengedit kueri gabungan. Jika Anda membuka kueri gabungan dari Panel Navigasi, Access akan membukanya dan menampilkan hasilnya dalam tampilan lembar data. Di bawah tab Tampilan di Beranda , perhatikan bahwa Tampilan Desain tidak tersedia saat Anda bekerja dengan kueri serikat pekerja. Anda hanya dapat beralih antara Tampilan Lembar Data dan Tampilan SQL.
Untuk melanjutkan studi Anda tentang contoh kueri gabungan ini, klikTampilan Beranda>> SQLView untuk melihat SQL sintaks yang menentukannya. Dalam ilustrasi ini, kami telah menambahkan beberapa spasi tambahan sehingga SQL Anda dapat dengan mudah melihat berbagai bagian yang membentuk kueri gabungan.
Mari kita lihat SQL sintaks kueri gabungan ini dari database Northwind secara detail:
SELECT [Product ID], [Order Date], [Company Name], [Transaction], [Quantity]
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity]
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
Bagian pertama dan ketiga dari pernyataan SQL ini pada dasarnya adalah dua kueri pemilihan. Kueri-kueri ini mengambil dua kumpulan data yang berbeda, satu dari tabel Pesanan Produk dan yang lain dari tabel Pembelian Produk.
Bagian kedua dari pernyataan ini SQL adalah UNION kata kunci, yang memberi tahu Access untuk menggabungkan dua set rekaman ini.
Bagian terakhir dari pernyataan ini SQL menentukan urutan catatan yang digabungkan dengan menggunakan sebuah ORDER BY pernyataan. Dalam contoh ini, Access mengurutkan semua catatan berdasarkan bidang Tanggal Pesanan dalam urutan menurun.
Catatan
Kueri gabungan selalu bersifat baca saja di Access. Anda tidak dapat mengubah nilai apa pun dalam tampilan lembar data.
Membuat kueri gabungan dengan membuat dan menggabungkan kueri pemilihan
Meskipun Anda dapat membuat kueri gabungan dengan menulis SQL sintaks langsung dalam SQL View, Anda mungkin merasa lebih mudah untuk membangunnya dalam beberapa bagian dengan kueri tertentu. Anda kemudian dapat menyalin dan menempelkan bagian SQL ke dalam kueri gabungan yang telah digabungkan.
Jika tidak ingin membaca langkah-langkah dan ingin langsung menonton contoh yang tersedia, lihat bagian berikutnya, Menonton contoh pembuatan kueri gabungan.
- Pada tab Buat, di grup Kueri, klik Desain Kueri.
- Klik dua kali tabel yang berisi bidang yang ingin Anda sertakan. Tabel tersebut ditambahkan ke jendela desain kueri.
- Di jendela desain kueri, klik ganda tiap bidang yang ingin Anda sertakan. Saat Anda memilih bidang, pastikan bahwa Anda menambahkan jumlah bidang yang sama, dengan urutan yang sama, yang Anda tambahkan ke kueri pemilihan yang lain. Perhatikan dengan baik tipe data dari bidang, dan pastikan bidang-bidang tersebut memiliki tipe data yang kompatibel pada posisi yang sama di dalam kueri lain yang Anda gabungkan. Misalnya, jika kueri pemilihan pertama Anda memiliki lima bidang, bidang pertama berisi data tanggal/waktu, pastikan tiap kueri pemilihan yang lain yang Anda gabungkan juga memiliki lima bidang, dan bidang pertamanya berisi data tanggal/waktu, dan seterusnya.
- Sebagai alternatif, tambahkan kriteria ke bidang Anda dengan mengetikkan ekspresi yang tepat di baris Kriteria dari kisi bidang.
- Setelah selesai menambahkan bidang dan kriteria bidang, Anda harus menjalankan kueri pemilihan dan meninjau outputnya. Di tab Desain, dalam grup Hasil, klik Jalankan.
- Alihkan kueri tersebut ke tampilan Desain.
- Simpan kueri pemilihan tersebut, dan biarkan terbuka.
- Ulangi prosedur ini untuk tiap kueri pemilihan yang ingin Anda gabungkan.
Setelah membuat kueri pilihan, saatnya untuk menggabungkannya. Pada langkah ini, Anda membuat kueri gabungan dengan menyalin dan menempelkan SQL pernyataan.
- Di tab Buat, dalam grup Kueri, klik Desain Kueri.
- Pada tab Desain, dalam grup Kueri, klik Gabungan. Access menyembunyikan jendela desain kueri dan memperlihatkan tab objek SQL View . Pada titik ini, tab kosong.
- Klik tab untuk kueri pemilihan pertama yang ingin Anda gabungkan di dalam kueri gabungan.
- Pada tab Beranda , klik Tampilkan>SQL View.
- Salin
SQLpernyataan untuk kueri pilih. Klik tab untuk kueri gabungan yang mulai Anda buat sebelumnya. - Tempelkan
SQLpernyataan untuk kueri pilih ke tab objek SQL View kueri gabungan. - Hapus titik koma (
;) di akhir pernyataan kueriSQLpilih. - Tekan Enter untuk memindahkan kursor ke bawah satu baris, lalu ketik
UNIONpada baris baru. - Klik tab untuk kueri pemilihan berikutnya yang ingin Anda gabungkan di dalam kueri gabungan.
- Ulangi langkah 5 hingga 10 hingga Anda telah menyalin dan menempelkan semua
SQLpernyataan untuk kueri select ke jendela SQL View kueri gabungan. Jangan hapus titik koma atau ketik apa pun setelahSQLpernyataan untuk kueri pilihan terakhir. - Pada tab Desain, di grup Hasil, klik Jalankan.
Hasil dari kueri gabungan akan muncul dalam tampilan Lembar Data.
Menonton contoh pembuatan kueri gabungan
Berikut adalah contoh yang dapat Anda buat ulang di database sampel Northwind. Kueri gabungan ini mengumpulkan nama orang-orang dari tabel Pelanggan dan menggabungkannya dengan nama orang-orang dari tabel Pemasok. Jika ingin mengikutinya, lakukan langkah-langkah ini dalam salinan contoh database Northwind Anda.
Berikut langkah-langkah yang diperlukan untuk membuat contoh ini:
Buat dua kueri pemilihan yang disebut Kueri1 dan Kueri2 dengan tabel Pelanggan dan Pemasok sebagai sumber data masing-masing. Gunakan bidang Nama Depan dan Nama Belakang sebagai nilai tampilan.
Buat kueri baru yang bernama Kueri3 tanpa sumber data awal, lalu klik perintah Gabungan pada tab Desain untuk menjadikan kueri ini kueri Gabungan.
Salin dan tempelkan pernyataan SQL dari Kueri1 dan Kueri2 ke Kueri3. Pastikan untuk menghapus titik koma tambahan dan menambahkan
UNIONkata kunci. Lalu, Anda dapat memeriksa hasil dalam tampilan lembar data.Tambahkan klausa pemesanan ke salah satu kueri, lalu tempelkan pernyataan tersebut
ORDER BYke dalam kueri gabungan di SQL View. Perhatikan bahwa dalam Kueri3, kueri gabungan, saat pengurutan akan ditambahkan, pertama-tama titik koma dihapus, lalu nama tabel dari nama bidang.Final
SQLyang menggabungkan dan mengurutkan nama untuk contoh kueri gabungan ini adalah sebagai berikut:SELECT Customers.Company, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers ORDER BY [Last Name], [First Name];
Jika Anda sangat nyaman menulis SQL sintaks, Anda dapat menulis pernyataan Anda sendiri SQL untuk kueri gabungan langsung di SQL View. Namun, sebaiknya Anda mengikuti pendekatan penyalinan dan penempelan SQL dari objek kueri lainnya. Setiap kueri dapat jauh lebih rumit dari contoh kueri pemilihan sederhana yang digunakan di sini. Sebaiknya Anda membuat dan menguji setiap kueri dengan hati-hati sebelum menggabungkannya dalam kueri gabungan. Jika kueri gabungan gagal dijalankan, Anda dapat menyesuaikan setiap kueri secara individual hingga berhasil dijalankan, lalu membuat kembali kueri gabungan dengan sintaks yang benar.
Tinjau bagian selanjutnya dalam artikel ini untuk mempelajari lebih banyak tips dan trik tentang menggunakan kueri gabungan.
Menggabungkan tiga atau lebih tabel dan kueri dalam kueri gabungan
Dalam contoh dari bagian sebelumnya yang menggunakan database Northwind, data dari hanya dua tabel yang digabungkan. Namun, Anda dapat menggabungkan tiga atau lebih tabel dalam kueri gabungan dengan mudah. Misalnya, jika menggunakan contoh sebelumnya, Anda juga dapat menyertakan nama karyawan dalam output kueri. Anda dapat menyelesaikan tugas tersebut dengan menambahkan kueri ketiga dan menggabungkannya dengan pernyataan SQL sebelumnya dan kata kunci UNION tambahan seperti ini:
SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers
UNION
SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers
UNION
SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees
ORDER BY [Last Name], [First Name];
Ketika Anda melihat hasil dalam tampilan lembar data, semua karyawan akan tercantum dengan contoh nama perusahaan, yang mungkin tidak terlalu berguna. Jika Anda ingin bidang tersebut menunjukkan apakah seseorang adalah karyawan internal, dari pemasok, atau dari pelanggan, Anda dapat menyertakan nilai tetap sebagai pengganti nama perusahaan. Berikut tampilannya SQL :
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers
UNION
SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers
UNION
SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees
ORDER BY [Last Name], [First Name];
Berikut tampilan hasil yang akan muncul dalam tampilan lembar data. Access menampilkan kelima contoh data ini:
| Pekerjaan | Nama Belakang | Nama Depan |
|---|---|---|
| Karyawan Kantor | Faradilla | Nadia |
| Karyawan Kantor | Giyanti | Larasati |
| Pemasok | Giandra | Surya |
| Pelanggan | Gunawan | Daniel |
| Pelanggan | Galih Saputra | Anton |
Anda dapat mengurangi kueri lebih jauh lagi karena Access membaca nama bidang output hanya dari kueri pertama dalam kueri gabungan. Di sini, output dari bagian kueri kedua dan ketiga dihapus:
SELECT "Customer" As Employment, [Last Name], [First Name]
FROM Customers
UNION
SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers
UNION
SELECT "In-house", [Last Name], [First Name]
FROM Employees
ORDER BY [Last Name], [First Name];
Pemfilteran dalam kueri gabungan
Dalam kueri gabungan Access, pemesanan hanya diperbolehkan sekali, tetapi Anda dapat memfilter setiap kueri satu per satu. Berdasarkan kueri gabungan bagian sebelumnya, berikut adalah contoh yang memfilter setiap kueri dengan menambahkan WHERE klausa.
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers
WHERE [State/Province] = "UT"
UNION
SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers
WHERE [Job Title] = "Sales Manager"
UNION
SELECT "In-house", Employees.[Last Name], Employees.[First Name]
FROM Employees
WHERE City = "Seattle"
ORDER BY [Last Name], [First Name];
Beralihlah ke tampilan lembar data dan Anda akan melihat hasil yang mirip dengan ini:
| Pekerjaan | Nama Belakang | Nama Depan |
|---|---|---|
| Pemasok | Anggraeni | Elisa A. |
| Karyawan Kantor | Faradilla | Nadia |
| Pelanggan | Haryono | Joni |
| Karyawan Kantor | Hani Lesmana | Anita |
| Pemasok | Herlina Ernawati | Amel |
| Pelanggan | Maryanto | Sandi |
| Pemasok | Santoso | Mikael |
| Pemasok | Satria | Laksmana |
| Karyawan Kantor | Tantowi | Syamsul |
| Pemasok | Wijaya | Citra |
| Karyawan Kantor | Zainuddin | Rian |
Mencampur tipe data
Jika kueri yang Anda satukan sangat berbeda, Anda mungkin mengalami situasi di mana bidang output harus menggabungkan data dari tipe data yang berbeda. Jika demikian, kueri gabungan seringkali hanya mengembalikan hasil sebagai tipe data teks karena tipe data tersebut dapat berisi teks dan angka.
Untuk memahami cara kerjanya, kami akan menggunakan kueri gabungan Transaksi Produk dalam contoh database Northwind. Buka contoh database, lalu buka kueri Transaksi Produk dalam tampilan lembar data. Sepuluh data terakhir seharusnya mirip dengan output ini:
| ID Produk | Tanggal Pemesanan | Nama Perusahaan | Transaksi | Jumlah |
|---|---|---|---|---|
| 77 | 22/1/2006 | Pemasok B | Pembelian | 60 |
| 80 | 22/1/2006 | Pemasok D | Pembelian | 75 |
| 81 | 22/1/2006 | Pemasok A | Pembelian | 125 |
| 81 | 22/1/2006 | Pemasok A | Pembelian | 200 |
| 7 | 20/1/2006 | Perusahaan D | Penjualan | 10 |
| 51 | 20/1/2006 | Perusahaan D | Penjualan | 10 |
| 80 | 20/1/2006 | Perusahaan D | Penjualan | 10 |
| 34 | 15/1/2006 | Perusahaan AA | Penjualan | 100 |
| 80 | 15/1/2006 | Perusahaan AA | Penjualan | 30 |
Anggap Anda ingin membagi bidang Kuantitas menjadi dua bidang: Beli dan Jual. Mari kita asumsikan juga bahwa Anda menginginkan nilai nol tetap untuk bidang tanpa nilai. Berikut tampilannya SQL untuk kueri serikat ini:
SELECT [Product ID], [Order Date], [Company Name], [Transaction], 0 As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, 0 As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
Jika beralih ke tampilan lembar data, Anda akan melihat sepuluh data terakhir ditampilkan seperti berikut:
| ID Produk | Tanggal Pemesanan | Nama Perusahaan | Transaksi | Beli | Jual |
|---|---|---|---|---|---|
| 74 | 22/1/2006 | Pemasok B | Pembelian | 20 | 0 |
| 77 | 22/1/2006 | Pemasok B | Pembelian | 60 | 0 |
| 80 | 22/1/2006 | Pemasok D | Pembelian | 75 | 0 |
| 81 | 22/1/2006 | Pemasok A | Pembelian | 125 | 0 |
| 81 | 22/1/2006 | Pemasok A | Pembelian | 200 | 0 |
| 7 | 20/1/2006 | Perusahaan D | Penjualan | 0 | 10 |
| 51 | 20/1/2006 | Perusahaan D | Penjualan | 0 | 10 |
| 80 | 20/1/2006 | Perusahaan D | Penjualan | 0 | 10 |
| 34 | 15/1/2006 | Perusahaan AA | Penjualan | 0 | 100 |
| 80 | 15/1/2006 | Perusahaan AA | Penjualan | 0 | 30 |
Melanjutkan contoh ini, bagaimana jika Anda ingin bidang dengan nilai nol kosong? Anda dapat mengubah SQL untuk menampilkan tidak menampilkan apa-apa, bukan nol dengan menambahkan Null kata kunci, seperti yang diperlihatkan di sini:
SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
Namun, seperti yang dapat dilihat jika beralih ke tampilan lembar data, kini Anda memiliki hasil yang tidak terduga. Dalam kolom Beli, setiap bidang kosong:
| ID Produk | Tanggal Pemesanan | Nama Perusahaan | Transaksi | Beli | Jual |
|---|---|---|---|---|---|
| 74 | 22/1/2006 | Pemasok B | Pembelian | ||
| 77 | 22/1/2006 | Pemasok B | Pembelian | ||
| 80 | 22/1/2006 | Pemasok D | Pembelian | ||
| 81 | 22/1/2006 | Pemasok A | Pembelian | ||
| 81 | 22/1/2006 | Pemasok A | Pembelian | ||
| 7 | 20/1/2006 | Perusahaan D | Penjualan | 10 | |
| 51 | 20/1/2006 | Perusahaan D | Penjualan | 10 | |
| 80 | 20/1/2006 | Perusahaan D | Penjualan | 10 | |
| 34 | 15/1/2006 | Perusahaan AA | Penjualan | 100 | |
| 80 | 15/1/2006 | Perusahaan AA | Penjualan | 30 |
Hal ini terjadi karena Access menentukan tipe data bidang dari kueri pertama. Dalam contoh ini, Null bukanlah angka.
Jadi apa yang terjadi jika Anda mencoba menyisipkan string kosong untuk nilai kosong bidang? Untuk SQL upaya ini mungkin terlihat seperti ini:
SELECT [Product ID], [Order Date], [Company Name], [Transaction], "" As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, "" As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
Ketika beralih ke tampilan lembar data, Anda akan melihat bahwa Access mengambil nilai Beli, tetapi mengonversi nilai tersebut menjadi teks. Anda dapat mengetahui bahwa ini adalah nilai teks karena sejajar ke kiri dalam tampilan lembar data. String kosong dalam kueri pertama bukanlah angka, itulah sebabnya Anda melihat hasil ini. Anda juga akan melihat bahwa nilai Jual juga dikonversi menjadi teks karena catatan pembelian berisi string kosong.
| ID Produk | Tanggal Pemesanan | Nama Perusahaan | Transaksi | Beli | Jual |
|---|---|---|---|---|---|
| 74 | 22/1/2006 | Pemasok B | Pembelian | 20 | |
| 77 | 22/1/2006 | Pemasok B | Pembelian | 60 | |
| 80 | 22/1/2006 | Pemasok D | Pembelian | 75 | |
| 81 | 22/1/2006 | Pemasok A | Pembelian | 125 | |
| 81 | 22/1/2006 | Pemasok A | Pembelian | 200 | |
| 7 | 20/1/2006 | Perusahaan D | Penjualan | 10 | |
| 51 | 20/1/2006 | Perusahaan D | Penjualan | 10 | |
| 80 | 20/1/2006 | Perusahaan D | Penjualan | 10 | |
| 34 | 15/1/2006 | Perusahaan AA | Penjualan | 100 | |
| 80 | 15/1/2006 | Perusahaan AA | Penjualan | 30 |
Lalu, bagaimana cara memecahkan teka-teki ini?
Salah satu solusinya adalah memaksa kueri untuk mengharapkan nilai bidang menjadi angka. Anda dapat melakukannya dengan ekspresi ini:
IIf(False, 0, Null)
Kondisi untuk memeriksa, False, tidak pernah True, sehingga ekspresi selalu mengembalikan Null. Namun, Access masih mengevaluasi kedua opsi output dan memperlakukan output sebagai numerik atau Null.
Berikut cara menggunakan ekspresi ini dalam contoh yang dapat dimodifikasi:
SELECT [Product ID], [Order Date], [Company Name], [Transaction], IIf(False, 0, Null) As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
Anda tidak perlu mengubah kueri kedua.
Jika beralih ke tampilan lembar data, Anda akan melihat hasil yang diinginkan:
| ID Produk | Tanggal Pemesanan | Nama Perusahaan | Transaksi | Beli | Jual |
|---|---|---|---|---|---|
| 74 | 22/1/2006 | Pemasok B | Pembelian | 20 | |
| 77 | 22/1/2006 | Pemasok B | Pembelian | 60 | |
| 80 | 22/1/2006 | Pemasok D | Pembelian | 75 | |
| 81 | 22/1/2006 | Pemasok A | Pembelian | 125 | |
| 81 | 22/1/2006 | Pemasok A | Pembelian | 200 | |
| 7 | 20/1/2006 | Perusahaan D | Penjualan | 10 | |
| 51 | 20/1/2006 | Perusahaan D | Penjualan | 10 | |
| 80 | 20/1/2006 | Perusahaan D | Penjualan | 10 | |
| 34 | 15/1/2006 | Perusahaan AA | Penjualan | 100 | |
| 80 | 15/1/2006 | Perusahaan AA | Penjualan | 30 |
Metode alternatif untuk mendapatkan hasil yang sama adalah menambahkan kueri dalam kueri gabungan dengan kueri lainnya pada bagian awal:
SELECT
0 As [Product ID], Date() As [Order Date],
"" As [Company Name], "" As [Transaction],
0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False
Untuk setiap bidang, Access mengembalikan nilai tetap dari tipe data yang ditentukan. Tentu saja, Anda tidak ingin output kueri ini mengganggu hasilnya, sehingga Anda perlu menyertakan klausul WHERE ke False:
WHERE False
Ini adalah trik kecil. Karena kondisinya selalu salah, kueri tidak mengembalikan apa pun. Gabungkan pernyataan ini dengan SQL yang ada dan pernyataan lengkap telah berhasil dibuat, yaitu:
SELECT
0 As [Product ID], Date() As [Order Date],
"" As [Company Name], "" As [Transaction],
0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False
UNION
SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
Catatan
Dalam contoh ini, kueri gabungan dalam database Northwind mengembalikan 100 catatan, sementara dua kueri individual menghasilkan 58 dan 43 catatan untuk total 101 catatan. Perbedaan ini terjadi karena dua rekaman tidak unik. Lihat Bekerja dengan catatan yang berbeda dalam kueri gabungan menggunakan UNION ALL untuk mempelajari cara mengatasi skenario ini dengan menggunakan UNION ALL.
Menambahkan total dalam kueri gabungan
Kegunaan khusus untuk kueri gabungan adalah menggabungkan sekumpulan rekaman dengan satu rekaman yang berisi jumlah satu atau beberapa bidang.
Berikut contoh lain yang dapat Anda buat dalam contoh database Northwind untuk menunjukkan cara mendapatkan total dalam kueri gabungan.
Buat kueri sederhana baru untuk menampilkan pembelian bir (ID Produk=34 dalam database Northwind) menggunakan sintaks SQL berikut:
SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity FROM [Purchase Order Details] WHERE ((([Purchase Order Details].[Product ID])=34)) ORDER BY [Purchase Order Details].[Date Received];Beralihlah ke tampilan lembar data, dan Anda akan melihat empat pembelian:
Tanggal Diterima Jumlah 22/1/2006 100 22/1/2006 60 4/4/2006 50 5/4/2006 300 Untuk mendapatkan total, buat kueri agregasi sederhana menggunakan SQL berikut:
SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity FROM [Purchase Order Details] WHERE ((([Purchase Order Details].[Product ID])=34))Beralihlah ke tampilan lembar data, dan Anda akan melihat satu data saja:
MaksTanggal Diterima TotalJumlah 5/4/2006 510 Gabungkan kedua kueri ini ke dalam kueri gabungan untuk menambahkan data dengan total kuantitas ke data pembelian:
SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity FROM [Purchase Order Details] WHERE ((([Purchase Order Details].[Product ID])=34)) UNION SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity FROM [Purchase Order Details] WHERE ((([Purchase Order Details].[Product ID])=34)) ORDER BY [Purchase Order Details].[Date Received];Beralihlah ke tampilan lembar data, dan Anda akan melihat empat pembelian dengan jumlah masing-masing, diikuti dengan data yang menjumlahkan kuantitas:
Tanggal Diterima Jumlah 22/1/2006 60 22/1/2006 100 4/4/2006 50 5/4/2006 300 5/4/2006 510
Penjelasan di atas mencakup dasar-dasar menambahkan total ke kueri gabungan. Anda mungkin juga ingin menyertakan nilai tetap di kedua kueri seperti "Detail" dan "Total" untuk memisahkan total catatan dari catatan lainnya secara visual. Anda dapat meninjau penggunaan nilai tetap dalam bagian Menggabungkan tiga atau lebih tabel dan kueri dalam kueri gabungan.
Bekerja dengan data yang berbeda dalam kueri gabungan menggunakan UNION ALL
Kueri gabungan di Access secara default hanya menyertakan data yang berbeda. Namun, bagaimana jika Anda ingin menyertakan semua data? Contoh lain mungkin berguna di sini.
Dalam bagian sebelumnya, kami menunjukkan cara membuat total dalam kueri gabungan. Ubah kueri SQL gabungan tersebut untuk menyertakan Product ID = 48:
SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))
UNION
SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))
ORDER BY [Purchase Order Details].[Date Received];
Beralihlah ke tampilan lembar data, dan Anda akan melihat hasil yang cenderung kurang tepat:
| Tanggal Diterima | Jumlah |
|---|---|
| 22/1/2006 | 100 |
| 22/1/2006 | 200 |
Tentu saja, satu rekaman tidak menghasilkan dua kali jumlah total.
Anda melihat hasil ini karena, dalam satu hari, jumlah cokelat yang sama terjual dua kali, seperti yang tercatat dalam tabel Detail Pesanan Pembelian. Berikut hasil kueri pemilihan sederhana yang menampilkan kedua data dalam contoh database Northwind:
| ID Pesanan Pembelian | Produk | Jumlah |
|---|---|---|
| 100 | Northwind Traders Chocolate | 100 |
| 92 | Northwind Traders Chocolate | 100 |
Dalam kueri gabungan yang disebutkan sebelumnya, Anda dapat melihat bahwa bidang ID Pesanan Pembelian tidak disertakan dan kedua bidang tersebut tidak membentuk dua rekaman yang berbeda.
Jika Anda ingin menyertakan semua catatan, gunakan UNION ALL alih-alih UNION di SQL. Hal ini kemungkinan besar akan memengaruhi pengurutan hasil, jadi Anda mungkin juga ingin menyertakan ORDER BY klausa untuk menentukan urutan pengurutan. Berikut yang diubah SQL berdasarkan contoh sebelumnya:
SELECT [Purchase Order Details].[Date Received], Null As [Total], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))
UNION ALL
SELECT Max([Date Received]), "Total" As [Total], Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))
ORDER BY [Total];
Beralihlah ke tampilan lembar data, dan selain total, Anda akan melihat semua detail sebagai data terakhir:
| Tanggal Diterima | Total | Jumlah |
|---|---|---|
| 22/1/2006 | 100 | |
| 22/1/2006 | 100 | |
| 22/1/2006 | Total | 200 |
Menggunakan kueri gabungan untuk memfilter data dalam formulir melalui kontrol kotak kombo
Kueri gabungan sering digunakan sebagai sumber data untuk kontrol kotak kombo pada formulir. Anda dapat menggunakan kotak kombo tersebut untuk memilih nilai guna memfilter data formulir. Misalnya, memfilter data karyawan menurut kota mereka.
Guna mengetahui cara kerjanya, berikut contoh lain yang dapat Anda buat dalam contoh database Northwind untuk menjelaskan skenario ini.
Buat kueri pilih sederhana dengan menggunakan sintaks ini
SQL:SELECT Employees.City, Employees.City AS Filter FROM Employees;Beralihlah ke tampilan lembar data, dan Anda akan melihat hasil berikut:
Kota Filter Semarang Semarang Bandung Bandung Rembang Rembang Kediri Kediri Semarang Semarang Rembang Rembang Semarang Semarang Rembang Rembang Semarang Semarang Saat mengamati hasil tersebut, Anda mungkin tidak melihat banyak nilai. Namun, perluas kueri dan ubah menjadi kueri gabungan dengan menggunakan hal berikut
SQL:SELECT Employees.City, Employees.City AS Filter FROM Employees UNION SELECT "<All>", "*" AS Filter FROM Employees ORDER BY City;Beralihlah ke tampilan lembar data, dan Anda akan melihat hasil berikut:
Kota Filter <Semua> * Bandung Bandung Kediri Kediri Rembang Rembang Semarang Semarang Access melakukan penyatuan sembilan rekaman, yang ditampilkan sebelumnya, dengan nilai bidang tetap Semua <> dan "*". Karena klausa gabungan ini tidak berisi
UNION ALL, Access hanya mengembalikan catatan yang berbeda. Itu berarti setiap kota dikembalikan hanya sekali dengan nilai identik tetap.Setelah memiliki kueri gabungan lengkap yang menampilkan nama kota sekali saja beserta opsi yang memilih semua kota dengan efektif, Anda dapat menggunakan kueri ini sebagai sumber data untuk kotak kombo pada formulir. Dengan menggunakan contoh ini sebagai model, Anda dapat membuat kontrol kotak kombo pada formulir, mengatur kueri ini sebagai sumber datanya, mengatur properti Lebar Kolom dari kolom Filter menjadi 0 (nol) untuk menyembunyikannya secara visual, lalu mengatur properti Kolom Terikat menjadi 1 untuk menunjukkan indeks kolom kedua. Di
Filterproperti formulir itu sendiri, Anda kemudian dapat menambahkan kode seperti berikut ini untuk mengaktifkan filter formulir menggunakan nilai yang dipilih dalam kontrol kotak kombo:Me.Filter = "[City] Like '" & Me![FilterComboBoxName].Value & "'" Me.FilterOn = TruePengguna formulir kemudian dapat memfilter catatan formulir ke nama kota tertentu atau memilih <Semua> untuk mencantumkan semua catatan untuk semua kota.