Sistem Basis Data – Bab 10 QUERY ANTAR TABEL
1. Pendahuluan Tabel pertama bernama infoprib, dapat dilihat pada Gambar 1.
Gambar 1. Isi tabel infoprib id_bin nama tgl_lahir sex DREWB Drew Barrymore 1975-02-22 W STONE Sharon Stone 1958-03-10 SYLVE Sylvester Stallone 1946-07-06 P KEVIN Kevin Costner 1955-01-18 HAKIM Cristine Hakim 1957-12-25 JULIA Julia Roberts 1967-10-28 DEMIM Demi Moore 1962-11-11 CINDY Cindy Crawford 1966-02-20 CDIAZ Cameron Diaz 1972-08-30 KEANU Keanu Reeves 1964-09-02 SANDR Sandra Bullock RGERE Richard Gere 1948-08-29 RAHAR Slamet Rahardjo KELLY Kelly McGillis 1957-07-09 JOLIE Angelina Jolie 1975-06-04 Gambar 1. Isi tabel infoprib
Tabel kedua berupa film, yg dibuat melalui pernyataan SQL: CREATE TABLE film ( kode_film CHAR(5) NOT NULL PRIMARY KEY, judul CHAR(25), tahun CHAR(4)); Isi tabel film ditunjukkan pada Gambar 2.
Gambar 2. Isi tabel film kode_film judul tahun DABAN Daun di Atas Bantal 1998 OTONO Nemuru Otoko 1994 BASIC Basic Instinct 1992 SPESI The Spesialist 1995 BATFO Batman Forever NOWAY No Way Out 1987 FAIRG Fair Game DISCL Disclosure GJANE G. I. Jane 1997 BODYG Bodyguard GLORI Gloria 1999 CLIFF Cliffhanger 1993 RAMBO Rambo: First Blood II 1985 SPEED Speed BRIDE Runaway Bride Gambar 2. Isi tabel film
Tabel ketiga berupa main, yg dibuat melalui pernyataan SQL : CREATE TABLE main ( id_bin CHAR(5) NOT NULL, kode_film CHAR(5) NOT NULL , peran CHAR(25), PRIMARY KEY (id_bin)); Isi tabel main ditunjukkan pada Gambar 3.
Gambar 3. Isi tabel main id_bin kode_film peran HAKIM DABAN Asih OTOKO Tia STONE BASIC Catherine Tramell SPESI May Munro GLORI Gloria DREWB BATFO Sugar SYLVE Ray Quick CINDY FAIRG Kate McQueen DEMIM GJANE Jordan O’Neil DISCL Meredith Johson KEVIN BODYG Frank Farmer CLIFF Gbe Walker RAMBO John Rambo KEANU SPEED Jack Traven SANDR Annie Porter JULIA BRIDE Maggie Carpenter RGERE Ike Graham Gambar 3. Isi tabel main
2. Menggabungkan Tabel SQL mempunyai kemampuan untuk menggabungkan 2 tabel atau lebih untuk membentuk informasi. Prosesnya sdisebut join. Sebagai gambaran dapat dilihat pada Gambar 4, berdasarkan 3 buah tabel di atas dapat diperoleh informasi seperti berikut melalui join.
Gambar 4. Informasi yg dibentuk dari tabel infoprib, main dan film id_bin judul peran STONE Basic Intinct Catherine Tramell DREWB Batman Forever Sugar KEVIN Bodyguard Frank Farmer JULIA Runaway Bride Maggie Carpenter RGERE Ike Graham SYLVE Cliffhanger Gabe Walker HAKIM Daun di Atas Bantal Asih DEMIM Disclosdure Meredith Johson CINDY Fair Game Kate McQueen G. I. Jane Jordan O’Neil Gloria Nemuru Otoko Tia Rambor First Blood II John Rambo KEANU Speed Jack Traven SANDR Annie Porter The Spesialist May Munro Ray Quick Gambar 4. Informasi yg dibentuk dari tabel infoprib, main dan film
3. Query dengan Dua Buah Tabel Untuk memahami bagaimana menggabungkan beberapa tabel, cobalah pernyataan SQL berikut: SELECT main.nama, film.judul, main.peran FROM main, film WHERE main.kode_film=film.kode_film Query di atas digunakan untuk memperoleh identitas bintang film beserta judul dan peran yg dimainkan. Hasil yg diperoleh dapat dilihat pada Gambar 5.
Gambar 5. Hasil query terhadap 2 buah tabel nama judul peran Sharon Stone Basic Intinct Catherine Tramell Drew Barrymore Batman Forever Sugar Kevin Costner Bodyguard Frank Farmer Julia Roberts Runaway Bride Maggie Carpenter Richard Gere Ike Graham Sylvester Stallone Cliffhanger Gabe Walker Christine Hakim Daun di Atas Bantal Asih Demi Moore Disclosdure Meredith Johson Cindy Crawford Fair Game Kate McQueen G. I. Jane Jordan O’Neil Gloria Nemuru Otoko Tia Rambor First Blood II John Rambo Keanu Reeves Speed Jack Traven Sandra Bullock Annie Porter The Spesialist May Munro Ray Quick Gambar 5. Hasil query terhadap 2 buah tabel
Beberapa hal yg perlu diperhatikan dalam query antar tabel: Setiap kolom disebutkan dengan bentuk: nama_tabel.nama_kolom Sebagai contoh, film.kode_film berarti kolom kode_film yg terdapat pada tabel film. Hal ini merupakan mekanisme untuk membedakan kolom kode_film milik tabel film dengan kode_film milik tabel main yg ditulis dengan main.kode_film. Tabel-tabel yg dilibatkan dalam query perlu disebutkan dalam klausa FROM dengan antar tabel dipisah oleh tanda koma. Contoh: FROM main, film yg berarti ada 2 tabel yg dilibatkan yaitu main dan film. Urutan tabel tidaklah penting. Jadi: FROM main, film dan FROM film, main sama saja. Kondisi dalam klausa WHERE menentukan macam join yg terbentuk.
Contoh berikut digunakan untuk menggabungkan data yg terdapat pada tabel main dan infoprib maka pernyataan SQL sbb: SELECT infoprib.nama, main.kode_film FROM infoprib, main WHERE main.id_bin=infoprib.id_bin; Hasil query di atas dapat dilihat pada Gambar 6.
Gambar 6. Hasil query nama kode_film Cindy Crawford FAIRG Demi Moore DISCL GJANE Drew Barrymore BATFO Cristine Hakim DABAN OTOKO Julia Roberts BRIDE Keanu Reeves SPEED Kevin Costner BODYG Richard Gere Sandra Bullock Sharon Stone BASIC GLORI SPESI Sylvester Stallone CLIFF RAMBO Gambar 6. Hasil query
4. Menggunakan Alias Nama tabel yg digunakan dalam query antar tabel bisa diberi nama alias. Bentuk pernyataan SQL pemberian alias: SELECT alias1.kolom, alias2.kolom FROM tabel1 alias, tabel2 alias WHERE kondisi; Dalam hal ini, kondisi bisa menggunakan alias. Contoh pernyataan SQL : SELECT main.id_bin, film.judul, main.peran FROM main, film WHERE main.kode_film=film.kode_film;
Dapat ditulis menjadi: SELECT M.id_bin, F.judul, M.peran FROM main M, film F WHERE main.kode_film=film.kode_film; Pada contoh di atas M dan F adalah nama alias tabel. Dalam hal ini, M adalah nama alias dari tabel main dan F adalah nama alias dari tabel film.
5. Perkalian Kartesian Bentuk paling sederhana dari penggabungan 2 buah tabel akan membentuk perkalian kartesian (cartesian Product) atau biasa juga disebut cross join atau full join. Cross join diperoleh kalau klausa WHERE tdk disebutkan. Sebagai contoh, terdapat pada Gambar 7.
Gambar 7. Isi tabel1 dan tabel2 3 4 X Y 5 6 7 8 Gambar 7. Isi tabel1 dan tabel2
Gambar 8. Hasil perkalian kartesian Pada gambar 8, jika dikenakan operasi seperti berikut: SELECT * FROM tabel1, tabel2; Maka akan dihasilkan informasi sebagai berikut. A B X Y 1 2 5 6 3 4 7 8 Gambar 8. Hasil perkalian kartesian
6. Equijoin dan Non-Equijoin Equijoin adalah penggabungan antar tabel yg menggunakan operator sama dengan (=) pada kondisi dalam klausa WHERE untuk membandingkan satu kolom dengan kolom lainnya. Hasil yg diberikan hanya berupa baris-baris yg muncul pada kedua tabel.
Bentuk yg lebih kompleks ditunjukkan pada contoh pernyataan SQL berikut: SELECT infoprib.nama, film.judul, main.peran FROM infoprib, main, film WHERE main.kode_film = film.kode_film AND main.id_bin=infoprib.id_bin; Contoh ini melibatkan 3 buah tabel. Perhatikan kondisi yg digunakan pada klausa WHERE. Kondisi main.kode_film = film.kode_film Digunakan untuk menghubungkan tabel main dan film dan kondisi: main.id_bin = infoprib.id_bin Dipakai untuk menghubungkan tabel main dengan infoprib. Kedua kondisi tersebut dihubungkan melalui operator AND. Hasil query pernyataan di atas dapat dilihat pd Gambar 4 di depan. Apabila operator yg digunakan untuk menghubungkan satu tabel dengan tabel lainnya tdk berupa sama dengan (=) melainkan berupa operator seperti <> atau >= maka join akan disebut sebagai non-equijoin.
7. Self-Join Self join merupakan upaya penggabungan dari tabel yg sama. Contoh self-join yaitu untuk memperoleh pasangan bintang film pria dan wanita yg terdapat pada infoprib. Cara melakukannya adalah seperti berikut: SELECT X.nama, Y.nama FROM infoprib X, infoprib Y WHERE X.sex = ‘P’ AND Y.sex=‘W’ Tampak bahwa penanganannya menggunakan nama alias. Alias pertama berupa X dan alias kedua berupa Y. Penggalan hasil query dari pernyataan di atas diperlihatkan pada gambar 9.
Gambar 9. Hasil query dalam bentuk self-join nama Sylvester Stallone Drew Barrymore Kevin Costner Keanu Reeves Richard Gere Slamet Rahardjo Sharon Stone Keanu Reeves Christine Hakim Julia Roberts Gambar 9. Hasil query dalam bentuk self-join
8. Operator UNION Operator UNION berguna untuk menggabungkan hasil dari 2 buah query. Sebagai contoh, terdapat 2 buah tabel bernama ditolak dan diterima, dapat dilihat pada Gambar 10 dan Gambar 11.
Gambar 10. Isi tabel ditolak no_uji nama alasan 1 Yuyun - 3 Farkhan 5 Karun 6 Sita Devi no_uji nama 2 Kartika 4 Edi Putra 7 Johan 8 Friska 9 Rukmana 10 Santosa Gambar 10. Isi tabel ditolak Gambar 11. Isi tabel diterima
Gambar 12 memperlihatkan hasil dari pernyataan SQL di atas. Tabel ditolak dan diterima dapat digabungkan dengan menggunakan UNION. Adapun pernyataan SQL nya adalah : SELECT no_uji, nama FROM ditolak UNION FROM diterima; Gambar 12 memperlihatkan hasil dari pernyataan SQL di atas.
no_uji nama 1 Yuyun 10 Santosa 2 Kartika 3 Farkhan 4 Edi Putra 5 Karun 6 Sita Devi 7 Johan 8 Friska 9 Rukmana Gambar 12. Hasil UNION
Hasil query di atas dapat dilihat pada Gambar 13. Jika hasil UNION ingin diurutkan menurut kolom tertentu, klausa ORDER BY hanya boleh disertakan pada SELECT yg kedua. Contoh: SELECT no_uji, nama FROM ditolak UNION FROM diterima ORDER BY nama Hasil query di atas dapat dilihat pada Gambar 13.
Gambar 13. Hasil UNION diurutkan menurut nama no_uji nama 4 Edi Putra 3 Farkhan 8 Friska 7 Johan 2 Kartika 5 Karun 9 Rukmana Santosa 6 Sita Dewi 1 Yuyun Gambar 13. Hasil UNION diurutkan menurut nama
Secara bawaan UNION akan menghilangkan baris yg kembar. Untuk melihat efek ini, perhatikan 2 tabel pada Gambar 14 dan 15.
Gambar 14. Isi tabel hewanair Katak Ikan mas Ular Ikan nila hewan Katak Kuda Sapi Ular Gambar 14. Isi tabel hewanair Gambar 15. Isi tabel hewandrt
Selanjutnya, bisa mencoba perintah berikut: SELECT * FROM hewanair UNION FROM hewandrt; Hasilnya diperlihatkan pada Gambar 16.
Gambar 16. Baris yg kembar dihilangkan hewan Ikan mas Ikan nila Katak Kuda Sapi Ular Gambar 16. Baris yg kembar dihilangkan
Seandainya menghendaki agar data yg kembar tetap disertakan, perlu menggunakan kata ALL di belakang UNION. Contoh: SELECT * FROM hewanair UNION ALL FROM hewandrt; Hasilnya diperlihatkan pada Gambar 17.
Gambar 17. Efek UNION ALL. Baris yg kembar tetap disertakan hewan Katak Ikan mas Ular Ikan nila Kuda Sapi Gambar 17. Efek UNION ALL. Baris yg kembar tetap disertakan
9. Inner Join dan Outer Join Equijoin seringkali dibedakan menjadi 2 kategori yaitu inner equijoin (atau disingkat inner join) dan outer equijoin (atau disingkat outer join). Untuk melihat perbedaan kedua macam equijoin ini, perhatikan query berikut beserta hasilnya. SELECT infoprib.nama, main.kode_film, main.peran FROM infoprib, main WHERE infoprib.id_bin=main.id_bin; Hasil query di atas dapat dilihat pada Gambar 18.
Gambar 18. Contoh hasil inner join nama kode_film peran Cindy Crawford FAIRG Kate McQueen Demi Moore DISCL Meredith Johson GJANE Jordan O’Neil Drew Barrymore BATFO Sugar Cristine Hakim DABAN Asih OTOKO Tia Julia Roberts BRIDE Maggie Carpenter Keanu Reeves SPEED Jack Traven Kevin Costner BODYG Frank Farmer Richard Gere Ike Graham Sandra Bullock Annie Porter Sharon Stone BASIC Catherine Tramell GLORI Gloria SPESI May Munro Sylvester Stallone CLIFF Gabe Walker RAMBO John Rambo Ray Quick Gambar 18. Contoh hasil inner join
Kalau perhatikan isi tabel infoprib (Gambar 1) maka sesungguhnya banyak bintang film yg tdk terlihat pada hasil (Gambar 18). Hasil (Gambar 18) yaitu hanya berupa baris yg memiliki data pada kedua tabel yg disebut inner join. Memang betul bahwa bintang film yg tdk ditampilkan tersebut tdk memiliki entri pada tabel main (lihat Gambar 3). Namun bagaimana seandainya dikehendaki agar bintang film yg tdk tercantum pada tabel main ikut ditampilkan pada hasil query? Misalnya seperti pada Gambar 19.
Gambar 19. Contoh hasil outer join nama kode_film peran Angelina Jolie Cameron Diaz Cristine Hakim DABAN Asih OTOKO Tia Cindy Crawford FAIRG Kate McQueen Demi Moore DISCL Meredith Johson GJANE Jordan O’Neil Drew Barrymore BATFO Sugar Julia Roberts BRIDE Maggie Carpenter Keanu Reeves SPEED Jack Traven Kelly Mcgillis Kevin Costner BODYG Frank Farmer Richard Gere Ike Graham Sandra Bullock Annie Porter Sharon Stone BASIC Catherine Tramell GLORI Gloria SPESI May Munro Slamet Rahardjo Sylvester Stallone CLIFF Gabe Walker RAMBO John Rambo Ray Quick Gambar 19. Contoh hasil outer join
Perlu diketahui terlebih dulu bahwa hasil seperti Gambar 19 disebut outer join. Adapun cara memperolehnya ada beberapa cara. Salah satu di antaranya adalah melalui operator UNION, sebagaimana diperlihatkan berikut ini: SELECT infoprib.nama, main.kode_film, main.peran FROM infoprib, main WHERE infoprib.id_bin=main.id_bin UNION SELECT nama, NULL, NULL FROM infoprib WHERE id_bin NOT IN (SELECT id_bin FROM main);
10. Natural Join dan Unnatural Join Penggabungan 2 tabel atau lebih yg menggunakan kolom yg berkedudukan sebagai kunci tamu dan kunci primer (sekalipun hanya dalam desain basis data) sebagai penghubung biasa disebut dengan istilah natural join. Sebagai contoh, hubungan antar tabel infoprib dan main menggunakan kolom id_bin merupakan contoh natural join. SELECT infoprib.nama, main.kode_film, main.peran FROM infoprib,main WHERE infoprib.id_bin=main.id_bin Unnatural join mengungkapkan penggabungan dengan kondisi penghubung antar tabel tdk mencerminkan hubungan yg lazim.
11. Operator INTERSECT Operator INTERSECT berguna untuk memperoleh baris-baris yg terdapat pada kedua tabel. Dengan mengacu pada tabel hewanair dan hewandrt (Gambar 14 dan 15), bisa mencoba perintah berikut: SELECT hewan FROM hewanair INTERSECT FROM hewandrt; Hasil query di atas dapat dilihat pada Gambar 20.
Gambar 20. Hasil INTERSECT hewan Katak Ular Gambar 20. Hasil INTERSECT
12. Operator EXCEPT / MINUS Jika terdapat tabel A dan B, operasi A EXCEPT B akan menghasilkan semua yg ada pada A tetapi tidak terdapat pada B. Contoh: SELECT hewan FROM hewanair EXCEPT FROM hewandrt; Hasilnya dapat dilihat pada Gambar 21. Tampak pada Gambar 21 bahwa hasil yg diberikan berupa semua baris pada tabel hewanair yg tdk terdapat pada tabel hewandrt.
hewan Ikan mas Ikan nila Gambar 21. Hasil EXCEPT
Perlu diketahui, A EXCEPT B dan B EXCEPT A memberikan hasil yg berbeda Perlu diketahui, A EXCEPT B dan B EXCEPT A memberikan hasil yg berbeda. Contoh: SELECT hewan FROM hewandrt EXCEPT FROM hewanair; Hasilnya dapat dilihat pada Gambar 22.
Gambar 22. Semua baris pada hewandrt yg tdk terdapat pada hewanair Kuda Sapi Gambar 22. Semua baris pada hewandrt yg tdk terdapat pada hewanair