Iklan

Microsoft Access adalah alat yang paling kuat di seluruh rangkaian Microsoft Office, namun itu membingungkan (dan terkadang membuat takut) pengguna listrik Office. Dengan kurva belajar yang lebih curam daripada Word atau Excel, bagaimana mungkin ada orang yang membungkus penggunaan alat ini? Minggu ini, Bruce Epper akan melihat beberapa masalah yang dipicu oleh pertanyaan ini dari salah satu pembaca kami.

Pembaca bertanya:

Saya mengalami kesulitan menulis kueri di Microsoft Access.

Saya punya basis data dengan dua tabel produk yang berisi kolom umum dengan kode produk numerik dan nama produk terkait.

Saya ingin mencari tahu produk mana dari Tabel A yang dapat ditemukan di Tabel B. Saya ingin menambahkan kolom bernama Hasil yang berisi nama produk dari Tabel A jika ada, dan nama produk dari Tabel B ketika itu tidak ada di Tabel A.

Apakah Anda punya saran?

Balasan Bruce:

Microsoft Access adalah Sistem Manajemen Basis Data (DBMS) yang dirancang untuk digunakan pada mesin Windows dan Mac. Ini menggunakan mesin basis data Jet Microsoft untuk pemrosesan dan penyimpanan data. Ini juga menyediakan antarmuka grafis untuk pengguna yang hampir menghilangkan kebutuhan untuk memahami Structured Query Language (SQL).

instagram viewer

SQL adalah bahasa perintah yang digunakan untuk menambah, menghapus, memperbarui, dan mengembalikan informasi yang disimpan di serta memodifikasi komponen basis data inti seperti menambah, menghapus, atau memodifikasi tabel atau indeks.

Titik pangkal

Jika Anda belum terbiasa dengan Access atau RDBMS lain, saya sarankan Anda mulai dengan sumber daya ini sebelum melanjutkan:

  • Jadi Apa Itu Basis Data? Jadi Apa Itu Basis Data? [MakeUseOf Menjelaskan]Bagi seorang programmer atau penggila teknologi, konsep basis data adalah sesuatu yang benar-benar dapat diterima begitu saja. Namun, bagi banyak orang konsep database itu sendiri agak asing ... Baca lebih banyak di mana Ryan Dube menggunakan Excel untuk menunjukkan dasar-dasar database relasional.
  • Panduan Cepat Untuk Memulai Dengan Microsoft Access 2007 Panduan Cepat Untuk Memulai Dengan Microsoft Access 2007 Baca lebih banyak yang merupakan ikhtisar tingkat tinggi dari Access dan komponen yang terdiri dari database Access.
  • Tutorial Cepat Untuk Tabel di Microsoft Access 2007 Tutorial Cepat Untuk Tabel di Microsoft Access 2007 Baca lebih banyak melihat membuat database dan tabel pertama Anda untuk menyimpan data terstruktur Anda.
  • Tutorial Cepat Pada Pertanyaan Di Microsoft Access 2007 Tutorial Cepat Pada Pertanyaan Di Microsoft Access 2007 Baca lebih banyak melihat cara untuk mengembalikan bagian tertentu dari data yang disimpan dalam tabel database.

Memiliki pemahaman dasar tentang konsep-konsep yang disediakan dalam artikel-artikel ini akan membuat hal-hal berikut sedikit lebih mudah dicerna.

Hubungan dan Normalisasi Basis Data

Bayangkan Anda menjalankan perusahaan yang menjual 50 jenis widget di seluruh dunia. Anda memiliki basis klien 1.250 dan dalam sebulan rata-rata menjual 10.000 widget kepada klien ini. Anda saat ini menggunakan spreadsheet tunggal untuk melacak semua penjualan ini - secara efektif satu tabel basis data. Dan setiap tahun menambahkan ribuan baris ke spreadsheet Anda.

flat-table-1flat-table-2

Gambar di atas adalah bagian dari spreadsheet pelacakan pesanan yang Anda gunakan. Sekarang katakanlah kedua klien ini membeli widget dari Anda beberapa kali setahun sehingga Anda memiliki lebih banyak baris untuk keduanya.

Jika Joan Smith menikahi Ted Baines dan menggunakan nama keluarganya, setiap baris yang berisi namanya sekarang perlu diubah. Masalahnya diperparah jika Anda memiliki dua klien berbeda dengan nama 'Joan Smith'. Ini menjadi jauh lebih sulit untuk menjaga data penjualan Anda konsisten karena peristiwa yang cukup umum.

Dengan menggunakan database dan menormalkan data, kami dapat memisahkan item menjadi beberapa tabel seperti inventaris, klien, dan pesanan.

normalisasi

Hanya dengan melihat bagian klien dari contoh kami, kami akan menghapus kolom untuk Nama Klien dan Alamat Klien dan menempatkannya di tabel baru. Pada gambar di atas, saya juga memecahkan hal-hal yang lebih baik untuk akses lebih rinci ke data. Tabel baru juga berisi kolom untuk Kunci Utama (ClientID) - nomor yang akan digunakan untuk mengakses setiap baris dalam tabel ini.

Di tabel asli tempat kami menghapus data ini, kami akan menambahkan kolom untuk Kunci Asing (ClientID) yang merupakan tautan ke baris yang tepat yang berisi informasi untuk klien tertentu ini.

Sekarang, ketika Joan Smith mengubah namanya menjadi Joan Baines, perubahan hanya perlu dilakukan satu kali di tabel Klien. Setiap referensi lain dari tabel yang digabungkan akan menarik nama klien yang tepat dan laporan yang mencari apa yang telah dibeli Joan 5 tahun terakhir akan mendapatkan semua pesanan di bawah nama gadis dan namanya menikah tanpa harus mengubah bagaimana laporan itu dihasilkan.

Sebagai manfaat tambahan, ini juga mengurangi jumlah keseluruhan penyimpanan yang dikonsumsi.

Gabung Jenis

SQL mendefinisikan lima jenis gabungan: INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER, dan CROSS. Kata kunci OUTER adalah opsional dalam pernyataan SQL.

Microsoft Access memungkinkan penggunaan INNER (default), LEFT OUTER, RIGHT OUTER, dan CROSS. FULL OUTER tidak didukung seperti itu, tetapi dengan menggunakan LEFT OUTER, UNION ALL, dan RIGHT OUTER, itu dapat dipalsukan dengan biaya lebih banyak siklus CPU dan operasi I / O.

Output dari gabungan CROSS berisi setiap baris dari tabel kiri dipasangkan dengan setiap baris dari tabel kanan. Satu-satunya waktu saya pernah melihat gabungan CROSS digunakan adalah selama pengujian server database.

Mari kita lihat cara kerja dasar bergabung, maka kita akan memodifikasinya sesuai dengan kebutuhan kita.

Mari kita mulai dengan membuat dua tabel, ProdA dan ProdB, dengan properti desain berikut.

access-table-defs

AutoNumber adalah bilangan bulat panjang yang ditambahkan secara otomatis yang ditugaskan untuk entri saat ditambahkan ke tabel. Opsi Teks tidak dimodifikasi, sehingga akan menerima string teks hingga 255 karakter.

Sekarang, isi mereka dengan beberapa data.

tabel akses

Untuk menunjukkan perbedaan cara kerja 3 tipe gabung, saya telah menghapus entri 1, 5, dan 8 dari ProdA.

Selanjutnya, buat kueri baru dengan masuk ke Buat> Desain Kueri. Pilih kedua tabel dari dialog Tampilkan Tabel dan klik Tambah, kemudian Menutup.

permintaan baru

Klik ProductID di tabel ProdA, seret ke ProductID di tabel ProdB dan lepaskan tombol mouse untuk membuat hubungan di antara tabel.

design_view

Klik kanan pada garis antara tabel yang mewakili hubungan antara item dan pilih Gabung Properti.

join_properties

Secara default, gabung tipe 1 (INNER) dipilih. Opsi 2 adalah join LEFT OUTER dan 3 adalah join RIGHT OUTER.

Kami akan melihat bergabung dengan INNER terlebih dahulu, jadi klik OK untuk mengabaikan dialog.

Di desainer kueri, pilih bidang yang ingin kita lihat dari daftar turun bawah.

desain-tampilan-2

Saat kami menjalankan kueri (tanda seru merah di pita), itu akan menampilkan bidang ProductName dari kedua tabel dengan nilai dari tabel ProdA di kolom pertama dan ProdB di kedua.

inner_join

Perhatikan bahwa hasil hanya menunjukkan nilai di mana ProductID sama di kedua tabel. Meskipun ada entri untuk ProductID = 1 di tabel ProdB, itu tidak muncul dalam hasil karena ProductID = 1 tidak ada di tabel ProdA. Hal yang sama berlaku untuk ProductID = 11. Itu ada di tabel ProdA tetapi tidak di tabel ProdB.

desain-pita

Dengan menggunakan tombol Lihat pada pita dan beralih ke Tampilan SQL, Anda dapat melihat kueri SQL yang dihasilkan oleh perancang yang digunakan untuk mendapatkan hasil ini.

PILIH ProdA.ProductName, ProdB.ProductName DARI ProdA INNER GABUNG ProdB PADA ProdA.ProductID = ProdB.ProductID;

Kembali ke Tampilan Desain, ubah tipe gabungan menjadi 2 (LEFT OUTER). Jalankan kueri untuk melihat hasilnya.

left_outer_join

Seperti yang Anda lihat, setiap entri dalam tabel ProdA diwakili dalam hasil sementara hanya yang di ProdB yang memiliki entri ProductID yang sesuai di tabel ProdB muncul di hasil.

Ruang kosong di kolom ProdB.ProductName adalah nilai khusus (NULL) karena tidak ada nilai yang cocok di tabel ProdB. Ini akan terbukti penting nanti.

PILIH ProdA.ProductName, ProdB.ProductName DARI ProdA LEFT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Coba hal yang sama dengan tipe ketiga bergabung (RIGHT OUTER).

right_outer_join

Hasil menunjukkan semuanya dari tabel ProdB saat itu menunjukkan nilai kosong (dikenal sebagai NULL) di mana tabel ProdA tidak memiliki nilai yang cocok. Sejauh ini, ini membawa kita paling dekat dengan hasil yang diinginkan dalam pertanyaan pembaca kami.

PILIH ProdA.ProductName, ProdB.ProductName DARI ProdA TEPAT BERGABUNG ProdB PADA ProdA.ProductID = ProdB.ProductID;

Menggunakan Fungsi dalam Query

Hasil dari suatu fungsi juga dapat dikembalikan sebagai bagian dari permintaan. Kami ingin kolom baru bernama 'Hasil' muncul di set hasil kami. Nilainya akan menjadi konten dari kolom ProductName pada tabel ProdA jika ProdA memiliki nilai (bukan NULL), jika tidak maka harus diambil dari tabel ProdB.

Fungsi Immediate IF (IIF) dapat digunakan untuk menghasilkan hasil ini. Fungsi ini mengambil tiga parameter. Yang pertama adalah kondisi yang harus dievaluasi ke nilai True atau False. Parameter kedua adalah nilai yang akan dikembalikan jika kondisinya benar, dan parameter ketiga adalah nilai yang akan dikembalikan jika kondisinya salah.

Konstruksi fungsi lengkap untuk situasi kita terlihat seperti ini:

IIF (ProdA.ProductID Is Null, ProdB.ProductName, ProdA.ProductName)

Perhatikan bahwa parameter kondisi tidak memeriksa kesetaraan. Nilai Null dalam database tidak memiliki nilai yang dapat dibandingkan dengan nilai lain, termasuk Null lain. Dengan kata lain, Null tidak sama dengan Null. Pernah. Untuk melewati ini, kami memeriksa nilai menggunakan kata kunci ‘Is’.

Kami juga bisa menggunakan 'Tidak Null' dan mengubah urutan parameter Benar dan Salah untuk mendapatkan hasil yang sama.

Saat memasukkan ini ke dalam Desainer Kueri, Anda harus mengetikkan seluruh fungsi ke dalam entri Field:. Untuk mendapatkannya untuk membuat kolom 'Hasil', Anda perlu menggunakan alias. Untuk melakukan ini, prakata fungsi dengan ‘Hasil:’ seperti yang terlihat pada tangkapan layar berikut.

desain hasil kanan-luar-alias

Kode SQL yang setara untuk melakukan ini adalah:

SELECT ProdA.ProductName, ProdB.ProductName, IIF (ProdA.ProductID Null, ProdB.ProductName, ProdA.ProductName) SEBAGAI HASIL DARI ProdA KANAN BERGABUNG DENGAN ProdB PADA ProdA.ProductID = ProdB.ProductID;

Sekarang, ketika kita menjalankan kueri ini, itu akan menghasilkan hasil ini.

right_outer_with_aliased_results

Di sini kita melihat untuk setiap entri di mana tabel ProdA memiliki nilai, nilai itu tercermin di kolom Hasil. Jika tidak ada entri di tabel ProdA, entri dari ProdB muncul di Hasil yang persis seperti yang diminta pembaca kami.

Untuk sumber daya lainnya untuk mempelajari Microsoft Access, periksa Joel Lee's Cara Belajar Microsoft Access: 5 Sumber Daya Online Gratis Cara Belajar Microsoft Access: 5 Sumber Daya Online GratisApakah Anda harus mengelola sejumlah besar data? Anda harus melihat ke dalam Microsoft Access. Sumber belajar gratis kami dapat membantu Anda memulai dan mempelajari keterampilan untuk proyek yang lebih kompleks. Baca lebih banyak .

Bruce telah bermain dengan elektronik sejak tahun 70-an, komputer sejak awal tahun 80-an, dan secara akurat menjawab pertanyaan tentang teknologi yang belum pernah digunakan atau dilihatnya sepanjang waktu. Dia juga mengganggu dirinya dengan mencoba bermain gitar.