Menggunakan 2 where mysql
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. Show
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 dimodifikasiJika 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 pemilihan dan tindakan normal, tabel tidak terkait dalam kueri gabungan, yang berarti akses perancang kueri grafis tidak bisa digunakan untuk membuat atau mengedit kueri gabungan. Anda akan mengalami ini jika Anda membuka kueri gabungan dari panel navigasi; Access membuka dan menampilkan hasil 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 ketika 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 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];2 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 pemilihanMeskipun 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, .
Setelah Anda membuat kueri pemilihan, ini saatnya untuk menggabungkannya. Dalam langkah ini, Anda membuat kueri gabungan dengan menyalin dan menempelkan pernyataan SQL.
Hasil dari kueri gabungan akan muncul dalam tampilan Lembar Data. Menonton contoh pembuatan kueri gabunganBerikut 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:
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. Menggabungkan tiga atau lebih tabel dan kueri dalam kueri gabunganDalam 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];4 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 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];5 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 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];6 Pemfilteran dalam kueri gabunganDalam 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 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];7 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 dataJika 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 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];8 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 tanggal 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 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];9 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 "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];0 Saat Anda beralih ke tampilan lembar data, Anda akan melihat bahwa Access mengambil nilai beli, namun ia mengonversinya menjadi teks. Anda bisa mengatakan ini adalah nilai teks karena rata kiri dalam tampilan lembar data. String kosong dalam kueri pertama bukan angka yang menyebabkan 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 tanggal 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: 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];1 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 "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];2 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 tanggal 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 "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];3 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: 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];4 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 "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];5 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 untuk mempelajari cara mengatasi skenario ini dengan menggunakan UNION ALL. Menambahkan total dalam kueri gabunganKasus 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.
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 . Bekerja dengan data yang berbeda dalam kueri gabungan menggunakan UNION ALLKueri 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 "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];9 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 "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];0 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 komboKueri 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.
|