8.1. Natural Join

Sekarang Anda dapat membuat tampilan yang sama dengan query yang lebih singkat, yaitu menggunakan NATURAL JOIN. Seperti yang ditunjukkan pada gambar berikut dengan query:
Gambar 8. 1 Menampilkan data pemesanan menggunakan NATURAL JOIN

8.2. Left Join dan Right Join

Left Join akan menampilkan semua record dari tabel sebelah kiri, dan record dari tabel sebelah kanan yang cocok. Hasilnya akan NULL untuk bagian kanan jika tidak ada kecocokan. Misal diminta untuk ditampilkan tabel customer  yang menampilkan juga tanggal oleh customer melakukan transaksi. Query yang tepat jika menggunakan left join adalah sebagai berikut:
Gambar 8. 2 Contoh penggunaan left join untuk menampilkan tanggal transaksi
Right join adalah join yang serupa dengan left join, hanya saja posisi tabel yang kanan akan ditampilkan semua record nya. Sedangkan tabel yang kiri hanya record yang bersesuaian saja. Untuk right join sebagai berikut :
Gambar 8. 3 Contoh penggunaan right join untuk menampilkan nama_customer

8.3. Inner Join

Versi aman dari left join maupun right join adalah inner join. Inner join tidak mementingkan posisi tabel pada query dan fungsinya sama dengan klausa where. Misalkan diperlukan tampilan dari pengelolaan pemesanan, dimana menampilkan nama_transaksi dan tanggal dimana customer melakukan transaksi, query nya adalah sebagai berikut:
Gambar 8. 4 Contoh penggunaan inner join













SUBQUERY BERSARANG

7.1. SELECT

Berdasarkan kasus yang sudah ada, ada beberapa permasalahan yang mungkin saja agak rumit jika diselesaikan dengan query SQL dasar. Misal Anda diminta untuk menampilkan data customer. Untuk menyelesaikan ini Anda dapat menggunakan subquery bersarang:
Gambar 7. 1 Query bersarang untuk kasus SELECT
DISTINCT digunakan untuk jika dalam suatu tampilan data terdapat baris yang duplikat (lebih dari satu baris dengan isi yang sama), maka hanya ditampilkan satu baris data saja. 

7.2. INSERT

Jika Anda diminta untuk memasukkan data baru, dimana memiliki detail sebagai berikut: Maka Anda dapat menggunakan query bersarang berikut untuk tabel transaksi:
Gambar 7. 2 Query bersarang untuk INSERT

7.3. UPDATE

Perhatikan tampilan data berikut:

Misalkan ada kesalahan pada data di atas data email “Rina” seharusnya Cahyo Maka query bersarang yang bisa Anda gunakan adalah:
Misalkan ada kesalahan pada data di atas data email “Anita” seharusnya cahyo Maka query bersarang yang bisa Anda gunakan adalah:

Gambar 7. 3 Query bersarang untuk kasus UPDATE

7.4. DELETE

Sama seperti kasus sebelumnya, jika diminta untuk menghapus data nama cahyo dengan jk perempuan, maka query yang dapat digunakan adalah sebagai berikut:
Gambar 7. 4 Query bersarang untuk kasus DELETE

















MULTIPLE RELATIONS

Pada pertemuan sebelumnya, telah dibangun dan diisi tabel kpl_marketing dan tabel kpl_produksi. Pada pertemuan kali ini, kedua tabel tersebut akan dihapus terlebih dahulu karena kedua tabel tersebut tidak dibangun atas dasar database relasional:
Kemudian kita akan rancang database relasional sederhana untuk kasus studikasus_transaksi_penjualan, seperti yang digambarkan pada ERD berikut:
Gambar 6. 1 ERD sederhana untuk database studikasus_transaksi_penjualan

6.1. DDL untuk Multiple Relations

Perhatikan pada Gambar 6.1, entitas customer dan entitas transaksi memiliki atribut foreign key (FK) di dalamnya. Anda bisa membuat tabel customer dan transaksi terlebih dahulu.
Gambar 6. 2 Pembangunan tabel customer kasus multiple relations
 
Gambar 6. 3 Pembangunan tabel transaksi kasus multiple relations
Gambar 6. 4 Pembangunan tabel ukuran_barang kasus multiple relations
Gambar 6. 5 Pembangunan tabel barang kasus multiple relations
Gambar 6. 6 Pembangunan tabel kpl_produksi kasus multiple relations
Gambar 6. 7 Pembangunan tabel kpl_marketing kasus multiple relations
Gambar 6. 8 Pembangunan tabel sales kasus multiple relations
Gambar 6. 9 Pembangunan tabel email kasus multiple relations
Gambar 6. 10 Pembangunan tabel pemesanan kasus multiple relations

6.2. DML untuk Multiple Relation

Untuk menginputkan data pada tabel yang memiliki atribut Foreign Key, harus dipastikan terlebih dahulu apakah pada tabel masternya sudah terisi atau belum. Dipastikan juga apakah nilai FK yang akan dimasukkan sudah ada pada tabel master atau belum. Misal, tabel barang masih kosong. Sekarang kita akan mengisikan tabel barang dimana terdapat FK id_barang . Kita akan isikan id_barang dengan nilai 1:
Gambar 6. 11 Peringatan kesalahan diberikan karena batasan FK
Seperti terlihat pada gambar di atas, akan keluar pesan kesalahan akibat nilai id_barang yang dimasukkan pada tabel barang  tidak ada pada tabel barang (tabel master). 
Lain halnya jika Anda menginputkan nilai NULL untuk id_barang, walaupun pada tabel barang belum memiliki data, tidak menjadi masalah.
Gambar 6. 12 Penginputan dengan FK bernilai NULL
     Pada Gambar 6.7 nilai id_barang adalah NULL. Nilai tersebut dapat diubah dengan nilai referensi (Primary Key) pada tabel barang.
Gambar 6. 13 Mengupdate nilai FK pada tabel barang
                Selanjutnya kita selesaikan penginputan untuk tabel-tabel lainnya.

Gambar 6. 14 Penginputan tabel customer
Gambar 6. 15 Penginputan tabel kpl_produksi
Gambar 6. 16 Penginputan ukuran_barang
Gambar 6. 17 Penginputan transaksi
Gambar 6. 18 Penginputan kpl_marketing
Gambar 6. 19 Penginputan email
Gambar 6. 20 Penginputan sales

Gambar 6. 21 Penginputan pemesanan

6.3. SELECT dengan Klausa Where

Jika melihat tampilan tabel barang dan id_barang cukup tidak user friendly karena pengguna hanya mendapatkan informasi nomor ID untuk barang dan ukuran_barang. Hal itu terjadi karena untuk menampilkan data pada tabel barang dan ukuran_barang menggunakan bahasa SQL standar. Agar dapat menampilkan nama barang di setiap daftar barang, kita bisa menghubungkan antara id_barang pada tabel barang (sebagai FK) dengan id_ukuranbarang pada tabel barang (sebagai PK). Tapi sebelumnya harus ditentukan terlebih dahulu atribut apa saja yang ingin ditampilkan. Misalkan kita ingin menampilkan atribut id_barang, nama_barang, harga_barang, stok_barang dan ukuran maka query yang dapat digunakan adalah sebagai berikut:
Gambar 6. 22 Menampilkan data barang dan ukuran_barang
tersebut FROM diikuti oleh dua tabel. Hal ini dikarenakan yang ingin ditampilkan kepada pengguna adalah atribut-atribut yang berasal dari dua tabel tersebut. Sementara WHERE diikuti dengan menyamakan atribut FK dan PK, yaitu id_barang pada tabel barang dan id_ukuranbarang pada tabel barang. Nama tabel disebutkan agar tidak terjadi ambiguitas dari sistem, karena kedua atribut yang disamakan nilainya memiliki nama yang sama.
Anda juga dapat menampilkan hubungan antara barang dan ukuran_barang Query yang digunakan adalah sebagai berikut.
Gambar 6. 23 Menampilkan nama_barang dan ukuran
















SET OPERATIONS

Pada pertemuan ini diperlukan lebih dari satu tabel untuk database studikasus_transaksi_penjualan. Tabel tersebut memiliki karakteristik yang serupa dengan tabel kpl_marketing. Misal tabel yang dimaksud adalah tabel yang menyimpan data-data kpl_marketing, sehingga memiliki nama kpl_produksi:
Gambar 5. 1 Tabel agen baru
 Perhatikan pada CREATE TABLE yang dilakukan untuk kpl_produksi diberikan AUTO_INCREMENT. Dengan demikian pada saat penginputan data baru, id_kplpro tidak perlu diisikan karena akan terisi sendiri dengan otomatis dengan nilai yang selalu meningkat (increment). Sekarang Anda bisa mengisi tabel kpl_produksi dengan data sebagai berikut:
Gambar 5. 2 Penginputan agen baru

5.1. Operasi Union

Operasi Union digunakan ketika mendapati kasus diperlukannya penggabungan data dari dua tabel yang memiliki kesesuaian. Format dari operasi ini adalah:
(SELECT …) UNION (SELECT …)
Sebagai contoh diperlukan data yang menggambarkan data seluruh kpl_marketing ataupun kpl_produksi. Dengan demikian diperlukan operasi union antara tabel kpl_marketing dengan tabel kpl_produksi:
Gambar 5. 3 Konsep UNION pada MySQL

5.2. Operasi Intersect

Operasi Intersect digunakan ketika mendapati kasus diperlukannya irisan data dari dua tabel yang bersesuaian. Pada MySQL tidak terdapat perintah INTERSECT, sehingga dapat digunakan format berikut untuk menggantikannya: SELECT a FROM b WHERE a IN (SELECT a FROM c);
Sebagai contoh diperlukan data buku yang terdapat pada tabel kpl_marketing dan juga terdapat pada tabel kpl_produksi:
Gambar 5. 4 Konsep INTERSECT pada MySQL

5.3. Operasi Except

Operasi Except adalah kebalikan dari Intersect, dimana diperlukan tampilan data dari suatu tabel x yang tidak ada di tabel y. Formatnya pada MySQL adalah sebagai berikut:
SELECT a FROM b WHERE a NOT IN (SELECT a FROM c)
Sebagai contoh diperlukan data kpl_produksi, sehingga tidak ada di tabel kpl_marketing:
Gambar 5. 5 Konsep EXCEPT pada MySQL





BAB VIII JOIN 8.1. Natural Join Sekarang Anda dapat membuat tampilan yang sama dengan query yang lebih singkat, yaitu menggunakan ...