id_bin

advertisement
QUERY ANTAR TABEL
1. Pendahuluan
• Tabel pertama bernama infoprib, dapat
dilihat pada Gambar 1.
id_bin
nama
tgl_lahir
sex
DREWB
Drew Barrymore
1975-02-22
W
STONE
Sharon Stone
1958-03-10
W
SYLVE
Sylvester Stallone
1946-07-06
P
KEVIN
Kevin Costner
1955-01-18
P
HAKIM
Cristine Hakim
1957-12-25
W
JULIA
Julia Roberts
1967-10-28
W
DEMIM
Demi Moore
1962-11-11
W
CINDY
Cindy Crawford
1966-02-20
W
CDIAZ
Cameron Diaz
1972-08-30
W
KEANU
Keanu Reeves
1964-09-02
P
SANDR
Sandra Bullock
1964-09-02
W
RGERE
Richard Gere
1948-08-29
P
RAHAR
Slamet Rahardjo
KELLY
Kelly McGillis
1957-07-09
W
JOLIE
Angelina Jolie
1975-06-04
W
P
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.
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
1995
NOWAY
No Way Out
1987
FAIRG
Fair Game
1995
DISCL
Disclosure
1994
GJANE
G. I. Jane
1997
BODYG
Bodyguard
1992
GLORI
Gloria
1999
CLIFF
Cliffhanger
1993
RAMBO
Rambo: First Blood II
1985
SPEED
Speed
1994
BRIDE
Runaway Bride
1999
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.
id_bin
kode_film
peran
HAKIM
DABAN
Asih
HAKIM
OTOKO
Tia
STONE
BASIC
Catherine Tramell
STONE
SPESI
May Munro
STONE
GLORI
Gloria
DREWB
BATFO
Sugar
SYLVE
SPESI
Ray Quick
CINDY
FAIRG
Kate McQueen
DEMIM
GJANE
Jordan O’Neil
DEMIM
DISCL
Meredith Johson
KEVIN
BODYG
Frank Farmer
SYLVE
CLIFF
Gbe Walker
SYLVE
RAMBO
John Rambo
KEANU
SPEED
Jack Traven
SANDR
SPEED
Annie Porter
JULIA
BRIDE
Maggie Carpenter
RGERE
BRIDE
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.
id_bin
judul
peran
STONE
Basic Intinct
Catherine Tramell
DREWB
Batman Forever
Sugar
KEVIN
Bodyguard
Frank Farmer
JULIA
Runaway Bride
Maggie Carpenter
RGERE
Runaway Bride
Ike Graham
SYLVE
Cliffhanger
Gabe Walker
HAKIM
Daun di Atas Bantal
Asih
DEMIM
Disclosdure
Meredith Johson
CINDY
Fair Game
Kate McQueen
DEMIM
G. I. Jane
Jordan O’Neil
STONE
Gloria
Gloria
HAKIM
Nemuru Otoko
Tia
SYLVE
Rambor First Blood II
John Rambo
KEANU
Speed
Jack Traven
SANDR
Speed
Annie Porter
STONE
The Spesialist
May Munro
SYLVE
The Spesialist
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.
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
Runaway Bride
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
Demi Moore
G. I. Jane
Jordan O’Neil
Sharon Stone
Gloria
Gloria
Christine Hakim
Nemuru Otoko
Tia
Sylvester Stallone
Rambor First Blood II
John Rambo
Keanu Reeves
Speed
Jack Traven
Sandra Bullock
Speed
Annie Porter
Sharon Stone
The Spesialist
May Munro
Sylvester Stallone
The Spesialist
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.
nama
kode_film
Cindy Crawford
FAIRG
Demi Moore
DISCL
Demi Moore
GJANE
Drew Barrymore
BATFO
Cristine Hakim
DABAN
Cristine Hakim
OTOKO
Julia Roberts
BRIDE
Keanu Reeves
SPEED
Kevin Costner
BODYG
Richard Gere
BRIDE
Sandra Bullock
SPEED
Sharon Stone
BASIC
Sharon Stone
GLORI
Sharon Stone
SPESI
Sylvester Stallone
CLIFF
Sylvester Stallone
RAMBO
Sylvester Stallone
SPESI
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.
Tabel 1
A
1
3
B
2
4
Tabel 2
X
5
7
Y
6
8
Gambar 7. Isi tabel1 dan tabel2
• 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
5
6
1
2
7
8
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.
nama
nama
Sylvester Stallone
Drew Barrymore
Kevin Costner
Drew Barrymore
Keanu Reeves
Drew Barrymore
Richard Gere
Drew Barrymore
Slamet Rahardjo
Drew Barrymore
Sylvester Stallone
Sharon Stone
Kevin Costner
Sharon Stone
Keanu Reeves
Sharon Stone
Richard Gere
Sharon Stone
Slamet Rahardjo
Sharon Stone
Sylvester Stallone
Christine Hakim
Kevin Costner
Christine Hakim
Keanu Reeves
Christine Hakim
Richard Gere
Christine Hakim
Slamet Rahardjo
Christine Hakim
Sylvester Stallone
Julia Roberts
Kevin Costner
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.
no_uji
nama
alasan
no_uji
nama
1
Yuyun
-
2
Kartika
3
Farkhan
-
4
Edi Putra
5
Karun
-
7
Johan
6
Sita Devi
-
8
Friska
9
Rukmana
10
Santosa
Gambar 10. Isi tabel ditolak
Gambar 11. Isi tabel diterima
• Tabel ditolak dan diterima dapat digabungkan
dengan menggunakan UNION. Adapun
pernyataan SQL nya adalah :
SELECT no_uji, nama
FROM ditolak
UNION
SELECT no_uji, nama
FROM diterima;
• Gambar 12 memperlihatkan
pernyataan SQL di atas.
hasil
dari
no_uji
1
10
2
3
4
5
6
7
8
9
nama
Yuyun
Santosa
Kartika
Farkhan
Edi Putra
Karun
Sita Devi
Johan
Friska
Rukmana
Gambar 12. Hasil UNION
• 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
SELECT no_uji, nama
FROM diterima
ORDER BY nama
• Hasil query di atas dapat dilihat pada Gambar 13.
no_uji
4
3
8
7
2
5
9
7
6
1
nama
Edi Putra
Farkhan
Friska
Johan
Kartika
Karun
Rukmana
Santosa
Sita Dewi
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.
hewan
hewan
Katak
Katak
Ikan mas
Kuda
Ular
Sapi
Ikan nila
Ular
Gambar 14. Isi tabel hewanair
Gambar 15. Isi tabel hewandrt
• Selanjutnya, bisa mencoba perintah berikut:
SELECT *
FROM hewanair
UNION
SELECT *
FROM hewandrt;
• Hasilnya diperlihatkan pada Gambar 16.
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
SELECT *
FROM hewandrt;
• Hasilnya diperlihatkan pada Gambar 17.
hewan
Katak
Ikan mas
Ular
Ikan nila
Katak
Kuda
Sapi
Ular
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.
nama
kode_film
peran
Cindy Crawford
FAIRG
Kate McQueen
Demi Moore
DISCL
Meredith Johson
Demi Moore
GJANE
Jordan O’Neil
Drew Barrymore
BATFO
Sugar
Cristine Hakim
DABAN
Asih
Cristine Hakim
OTOKO
Tia
Julia Roberts
BRIDE
Maggie Carpenter
Keanu Reeves
SPEED
Jack Traven
Kevin Costner
BODYG
Frank Farmer
Richard Gere
BRIDE
Ike Graham
Sandra Bullock
SPEED
Annie Porter
Sharon Stone
BASIC
Catherine Tramell
Sharon Stone
GLORI
Gloria
Sharon Stone
SPESI
May Munro
Sylvester Stallone
CLIFF
Gabe Walker
Sylvester Stallone
RAMBO
John Rambo
Sylvester Stallone
SPESI
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.
nama
kode_film
peran
Cristine Hakim
DABAN
Asih
Cristine Hakim
OTOKO
Tia
Cindy Crawford
FAIRG
Kate McQueen
Demi Moore
DISCL
Meredith Johson
Demi Moore
GJANE
Jordan O’Neil
Drew Barrymore
BATFO
Sugar
Julia Roberts
BRIDE
Maggie Carpenter
Keanu Reeves
SPEED
Jack Traven
Kevin Costner
BODYG
Frank Farmer
Richard Gere
BRIDE
Ike Graham
Sandra Bullock
SPEED
Annie Porter
Sharon Stone
BASIC
Catherine Tramell
Sharon Stone
GLORI
Gloria
Sharon Stone
SPESI
May Munro
Sylvester Stallone
CLIFF
Gabe Walker
Sylvester Stallone
RAMBO
John Rambo
Sylvester Stallone
SPESI
Ray Quick
Angelina Jolie
Cameron Diaz
Kelly Mcgillis
Slamet Rahardjo
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
SELECT hewan
FROM hewandrt;
• Hasil query di atas dapat dilihat pada Gambar 20.
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
SELECT hewan
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.
Contoh:
SELECT hewan
FROM hewandrt
EXCEPT
SELECT hewan
FROM hewanair;
• Hasilnya dapat dilihat pada Gambar 22.
hewan
Kuda
Sapi
Gambar 22. Semua baris pada hewandrt yg tdk
terdapat pada hewanair
Download