Terkadang, Anda mungkin ingin mencantumkan data dari satu tabel atau kueri dengan data yang berasal dari satu atau beberapa tabel lainnya untuk membuat sekumpulan data, atau dengan kata lain sebuah daftar yang berisi semua data dari dua tabel atau lebih. Inilah tujuan dari 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 belum pernah membuat kueri gabungan, Anda dapat melihat templat Access Northwind untuk mempelajari terlebih dahulu contoh yang dapat dimodifikasi. Anda dapat mencari templat contoh Northwind mengenai halaman mulai Access dengan mengklik File > Baru atau langsung mengunduh salinan dari lokasi ini: Templat contoh Northwind.
Setelah Access membuka database Northwind, tutup dialog masuk yang muncul pertama kali dan perluas Panel Navigasi. Klik bagian atas Panel Navigasi, lalu pilih Tipe Objek untuk menata semua objek database menurut tipenya. Berikutnya, perluas grup Kueri dan Anda akan melihat kueri yang disebut 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 pilihan dan tindakan normal, tabel tidak terkait dalam kueri gabungan, yang berarti desainer kueri grafik Access tidak bisa digunakan untuk menyusun atau mengedit kueri gabungan. Anda akan mengalami ini jika Membuka kueri gabungan dari Panel Navigasi; Access membukanya dan menampilkan hasilnya dalam tampilan lembar data. Di bawah perintah Tampilan pada tab Beranda , Anda akan melihat bahwa Tampilan Desain tidak tersedia saat Anda bekerja dengan kueri gabungan. Anda hanya bisa beralih antara Tampilan Lembar Data dan Tampilan SQL saat bekerja dengan kueri gabungan.
Untuk terus mempelajari contoh kueri gabungan ini, klik Beranda > Tampilan > Tampilan SQL untuk menampilkan sintaks SQL yang menentukannya. Dalam ilustrasi ini, kami telah menambahkan beberapa penspasian tambahan dalam SQL sehingga Anda dapat dengan mudah melihat berbagai bagian yang menyusun kueri gabungan.
Mari kita pelajari sintaks SQL kueri gabungan ini dari database Northwind secara mendetail:
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 SQL ini adalah kata kunci UNION yang memberi tahu Access bahwa kueri ini akan menggabungkan kedua kumpulan data ini.
Bagian terakhir dari pernyataan SQL ini menentukan urutan gabungan data dengan menggunakan pernyataan ORDER BY. Dalam contoh ini, Access akan mengurutkan semua data berdasarkan bidang Tanggal Pemesanan 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 kueri gabungan dapat dibuat dengan langsung menuliskan sintaks SQL dalam tampilan SQL, Anda dapat membuatnya secara lebih mudah dengan menjadikannya bagian-bagian dengan kueri pemilihan. 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 ganda tabel yang memiliki 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 Anda membuat kueri pemilihan, ini saatnya untuk menggabungkannya. Dalam langkah ini, Anda membuat kueri gabungan dengan menyalin dan menempelkan pernyataan SQL.
-
Pada tab Buat, di grup Kueri, klik Desain Kueri.
-
Pada tab Desain, dalam grup Kueri, klik Gabungan. Access menyembunyikan jendela desain kueri dan memperlihatkan tab objek tampilan SQL. Untuk saat ini, tab objek tampilan SQL kosong.
-
Klik tab untuk kueri pemilihan pertama yang ingin Anda gabungkan di dalam kueri gabungan.
-
Di tab Beranda, klik Tampilan > Tampilan SQL.
-
Salin pernyataan SQL untuk kueri pemilihan. Klik tab untuk kueri gabungan yang mulai Anda buat sebelumnya.
-
Tempelkan pernyataan SQL untuk kueri pemilihan ke dalam tab objek tampilan SQL dari kueri gabungan.
-
Hapus tanda titik koma (;) di akhir pernyataan SQL kueri pemilihan.
-
Tekan Enter untuk memindahkan kursor satu baris ke bawah, lalu ketikkan UNION di baris yang baru.
-
Klik tab untuk kueri pemilihan berikutnya yang ingin Anda gabungkan di dalam kueri gabungan.
-
Ulangi langkah 5 sampai 10 sampai Anda selesai menyalin dan menempelkan semua pernyataan SQL untuk kueri pemilihan ke dalam jendela tampilan SQL dari kueri gabungan. Jangan menghapus tanda titik koma atau mengetikkan apa pun setelah pernyataan SQL untuk kueri pemilihan 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 contoh yang dapat Anda buat ulang di contoh database 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 tanda titik koma tambahan dan menambahkan kata kunci UNION. Lalu, Anda dapat memeriksa hasil dalam tampilan lembar data.
-
Tambahkan klausul pengurutan ke salah satu kueri, lalu tempelkan pernyataan ORDER BY ke dalam tampilan SQL kueri gabungan. Perhatikan bahwa dalam Kueri3, kueri gabungan, saat pengurutan akan ditambahkan, pertama-tama titik koma dihapus, lalu nama tabel dari nama bidang.
-
SQL akhir yang 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 sudah terbiasa menulis sintaks SQL, Anda tentu saja dapat menulis sendiri pernyataan SQL untuk kueri gabungan secara langsung ke tampilan SQL. 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.
Dalam contoh dari bagian sebelumnya yang menggunakan database Northwind, hanya data dari 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 melihat hasil dalam tampilan lembar data, semua karyawan akan tercantum dengan contoh nama perusahaan, yang mungkin tidak begitu berguna. Jika ingin bidang itu menunjukkan apakah seseorang adalah karyawan kantor, dari pemasok, atau dari pelanggan, Anda dapat menyertakan nilai tetap sebagai alternatif untuk nama perusahaan. Berikut tampilan SQL-nya:
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 |
Kueri di atas dapat lebih dikurangi karena Access hanya membaca nama bidang output dari kueri pertama dalam kueri gabungan. Di sini, kami telah menghapus output dari bagian kueri kedua dan ketiga:
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];
Dalam sebuah kueri gabungan Access, pengurutan hanya diperbolehkan sekali, tetapi setiap kueri dapat difilter satu per satu. Dengan menggunakan kueri gabungan bagian sebelumnya, berikut contoh pemfilteran setiap kueri dengan menambahkan klausul WHERE.
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 |
Jika kueri yang digabungkan sangat berbeda, bidang output harus menggabungkan data dari tipe 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 saja Anda ingin bidang Jumlah dipisahkan menjadi dua, yaitu Beli dan Jual. Anda juga ingin mengisi nilai nol tetap untuk bidang tanpa nilai. Berikut tampilan SQL untuk kueri gabungan 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 |
Masih dengan contoh ini, bagaimana jika Anda ingin bidang dengan nilai nol menjadi kosong? Anda dapat mengubah SQL agar tidak menampilkan apa pun sebagai ganti nilai nol dengan menambahkan kata kunci Null seperti berikut:
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.
Oleh karena itu, apa yang terjadi jika Anda mencoba dan menyisipkan string kosong untuk nilai bidang yang kosong? SQL untuk percobaan ini dapat 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;
Saat beralih ke tampilan lembar data, Anda akan melihat bahwa Access mengambil nilai Beli, tetapi telah mengonversi nilai menjadi teks. Anda bisa mengetahui ini adalah nilai teks karena nilai teks diratakan kiri dalam tampilan lembar data. String kosong dalam kueri pertama bukanlah angka yang mengapa Anda melihat hasil ini. Anda juga akan melihat bahwa nilai Jual juga dikonversi menjadi teks karena rekaman 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?
Solusinya adalah memaksa kueri untuk menganggap nilai bidang menjadi angka. Hal ini dapat dilakukan dengan ekspresi:
IIf(False, 0, Null)
Syarat untuk diperiksa, False, tidak akan menjadi True, maka ekspresi tersebut akan selalu mengembalikan Null, tetapi Access masih mengevaluasi kedua opsi output dan menentukan output menjadi angka 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;
Perlu diingat bahwa mengubah kueri kedua tidak harus dilakukan.
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 trik sederhana karena selalu bersifat false dan 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: Kueri yang digabungkan dalam contoh ini yang menggunakan database Northwind mengembalikan 100 data, sementara dua kueri individu mengembalikan 58 dan 43 data untuk total data sebanyak 101. Perbedaan ini terjadi karena dua catatan tidak bersifat unik. Lihat bagian Bekerja dengan data yang berbeda dalam kueri gabungan menggunakan UNION ALL untuk mempelajari cara mengatasi skenario ini dengan menggunakan UNION ALL.
Kasus khusus untuk kueri gabungan adalah menggabungkan serangkaian data dengan sebuah data yang berisi jumlah dari satu bidang atau lebih.
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 dalam kedua kueri seperti “Detail” dan “Total” untuk memisahkan total data dari data lainnya secara visual. Anda dapat meninjau penggunaan nilai tetap dalam bagian Menggabungkan tiga atau lebih tabel dan kueri dalam kueri gabungan.
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 SQL kueri gabungan tersebut untuk menyertakan ID Produk= 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 data tidak mengembalikan dua kali jumlah secara keseluruhan.
Hal tersebut terjadi karena pada satu hari, jumlah cokelat yang sama terjual dua kali, seperti yang dicatat 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 bahwa dua bidang tersebut tidak terdiri dari dua catatan yang berbeda.
Jika ingin menyertakan semua catatan, gunakan UNION ALL sebagai ganti UNION dalam SQL Anda. Kemungkinan besar ini akan berdampak pada pengurutan hasil, sehingga Anda perlu menyertakan klausul ORDER BY untuk menentukan urutan pengurutan. Berikut SQL yang diubah dari 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 |
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 pemilihan sederhana menggunakan sintaks SQL ini:
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. Perluas kueri dan ubah menjadi kueri gabungan dengan menggunakan SQL berikut:
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 penggabungan sembilan catatan yang sebelumnya ditampilkan dengan nilai bidang tetap, yaitu <All> dan "*".
Karena klausul penggabungan ini tidak berisi UNION ALL, Access hanya mengembalikan data yang berbeda. Artinya, setiap kota dikembalikan sekali saja dengan nilai tetap yang identik.
-
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. Dalam properti Filter dari formulir itu sendiri, Anda dapat menambahkan kode seperti berikut untuk mengaktifkan filter formulir menggunakan nilai yang dipilih dalam kontrol kotak kombo:
Me.Filter = "[City] Like '" & Me![FilterComboBoxName].Value & "'" Me.FilterOn = True
Pengguna formulir kemudian dapat memfilter data formulir untuk nama kota tertentu atau memilih <Semua> guna menampilkan semua data untuk semua kota.