Menggunakan kueri gabungan untuk menggabungkan beberapa kueri ke dalam satu hasil

Menggunakan kueri gabungan untuk menggabungkan beberapa kueri ke dalam satu hasil

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.

Catatan:  Konten di artikel ini ditujukan untuk penggunaan dengan database desktop Access. Anda tidak dapat membuat atau menggunakan kueri gabungan di database web Access atau aplikasi web Access.

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:

Cuplikan layar ikon kueri gabungan di Access.

Tidak seperti kueri pemilihan dan tindakan biasa, tabel tidak terkait dalam kueri gabungan. Artinya, desainer kueri grafik Access tidak dapat digunakan untuk membuat atau mengedit kueri gabungan. Anda akan mengalami hal ini jika membuka kueri gabungan dari Panel Navigasi. Access akan membukanya dan menampilkan hasilnya dalam tampilan lembar data. Di bawah perintah Tampilan pada tab Beranda, Anda akan melihat bahwa Tampilan Desain tidak tersedia saat bekerja dengan kueri gabungan. Anda hanya dapat 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.

Browser Anda tidak mendukung video. Instal Microsoft Silverlight, Adobe Flash Player, atau Internet Explorer 9.

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.

  1. Pada tab Buat, di grup Kueri, klik Desain Kueri.

  2. Di dalam kotak dialog Perlihatkan Tabel, klik ganda tabel yang memiliki bidang yang ingin Anda sertakan. Tabel tersebut ditambahkan ke jendela desain kueri.

  3. Tutup kotak dialog Perlihatkan Tabel.

  4. 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.

  5. Sebagai alternatif, tambahkan kriteria ke bidang Anda dengan mengetikkan ekspresi yang tepat di baris Kriteria dari kisi bidang.

  6. Setelah selesai menambahkan bidang dan kriteria bidang, Anda harus menjalankan kueri pemilihan dan meninjau outputnya. Di tab Desain, dalam grup Hasil, klik Jalankan.

  7. Alihkan kueri tersebut ke tampilan Desain.

  8. Simpan kueri pemilihan tersebut, dan biarkan terbuka.

  9. 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.

  1. Pada tab Buat, di grup Kueri, klik Desain Kueri.

  2. Tutup kotak dialog Perlihatkan Tabel.

  3. 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.

  4. Klik tab untuk kueri pemilihan pertama yang ingin Anda gabungkan di dalam kueri gabungan.

  5. Di tab Beranda, klik Tampilan > Tampilan SQL.

  6. Salin pernyataan SQL untuk kueri pemilihan. Klik tab untuk kueri gabungan yang mulai Anda buat sebelumnya.

  7. Tempelkan pernyataan SQL untuk kueri pemilihan ke dalam tab objek tampilan SQL dari kueri gabungan.

  8. Hapus tanda titik koma (;) di akhir pernyataan SQL kueri pemilihan.

  9. Tekan Enter untuk memindahkan kursor satu baris ke bawah, lalu ketikkan UNION di baris yang baru.

  10. Klik tab untuk kueri pemilihan berikutnya yang ingin Anda gabungkan di dalam kueri gabungan.

  11. 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.

  12. 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.

Browser Anda tidak mendukung video. Instal Microsoft Silverlight, Adobe Flash Player, atau Internet Explorer 9.

Berikut langkah-langkah yang diperlukan untuk membuat contoh ini:

  1. 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.

  2. Buat kueri baru yang bernama Kueri3 tanpa sumber data awal, lalu klik perintah Gabungan pada tab Desain untuk menjadikan kueri ini kueri Gabungan.

  3. 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.

  4. 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.

  5. 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 tersebut menjadi teks. Anda dapat mengetahui bahwa ini nilai teks karena nilai tersebut berformat rata kiri dalam tampilan lembar data. String kosong di kueri pertama bukanlah angka. Itulah mengapa Anda melihat hasil ini. Anda juga akan melihat bahwa nilai Jual dikonversi menjadi teks karena data 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.

  1. 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];
  2. 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

  3. 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))
  4. Beralihlah ke tampilan lembar data, dan Anda akan melihat satu data saja:

    MaksTanggal Diterima

    TotalJumlah

    5/4/2006

    510

  5. 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];
  6. 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.

  1. Buat kueri pemilihan sederhana menggunakan sintaks SQL ini:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
  2. 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

  3. 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;
  4. 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.

  5. 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.

Atas Halaman

Kembangkan keterampilan Office Anda
Jelajahi pelatihan
Dapatkan fitur baru terlebih dahulu
Gabung ke Office Insiders

Apakah informasi ini bermanfaat?

Terima kasih atas umpan balik Anda!

Terima kasih atas umpan balik Anda! Sepertinya menghubungkan Anda ke salah satu agen dukungan Office kami akan sangat membantu.

×