2. MYSQL mendukung beberapa metode yang dapat mengakses beberapa tabel
sekaligus dengan sebuah statement SQL.
cara yang dapat digunakan adalah dengan menggunakan JOIN atau dapat
menambah SUBQUERY pada statement utama SQL.
Mengakses Banyak Tabel
3. Mengakses Menggunakan Join Tabel
Id Title Year Category
1 ASSASSIN'S CREED: EMBERS 2011 Animations
2 Real Steel 2012 Animations
3 Alvin and the Chipmunks 2007 Animations
4 The Adventures of Tin Tin 2011 Animations
5 Safe 2012 Action
6 Safe House 2012 Action
7 GIA 1998 18+
8 Deadline 2009 18+
9 The Dirty Picture 2011 18+
10 Marley and me 2008 Romance
Tabel Movies
4. Mengakses Menggunakan Join Tabel
Tabel Movies
CREATE TABLE movies (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(30),
year YEAR,
category VARCHAR(15)
)ENGINE=Innodb;
INSERT INTO movies VALUES
(1,'ASSASSIN'S CREED : EMBERS','2011','Animations'),
(2,'Real Steel','2012','Animations'),
(3,'Alvin and the Chipmunks','2007','Animations'),
(4,'The Adventures of Tin Tin','2011','Animations'),
(5,'Safe','2012','Action'),
(6,'Safe House','2012','Action'),
(7,'GIA','1998','18+'),
(8,'Deadline','2009','18+'),
(9,'The Dirty Picture','2011','18+'),
(10,'Marley and me','2008','Romance');
5. Mengakses Menggunakan Join Tabel
id first_name last_name movie_id
1 Adam Smith 1
2 Ravi Kumar 2
3 Susan Davidson 5
4 Jenny Adrianna 8
6 Lee Pong 10
Tabel Members
6. Mengakses Menggunakan Join Tabel
Tabel Members
CREATE TABLE members (
id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(15) NOT NULL,
last_name VARCHAR(15) NOT NULL,
movie_id INT,
FOREIGN KEY (movie_id) REFERENCES
movies(id) ON DELETE CASCADE ON
UPDATE CASCADE
)ENGINE=Innodb;
INSERT INTO members VALUES
(1,'Adam','Smith',1),
(2,'Ravi','Kumar',2),
(3,'Susan','Davidson',5),
(4,'Jenny','Adrianna',8),
(5,'Lee','Pong',10);
8. Full Cross Join
Cross JOIN adalah bentuk JOIN yang paling sederhana yang cocok dengan setiap
baris dari satu tabel database ke semua baris baris lainnya.
Dengan kata lain, Cross Join memberi kita kombinasi setiap baris tabel pertama
dengan semua baris di tabel kedua.
Misalkan kita ingin mendapatkan semua catatan anggota terhadap semua
rekaman film, kita bisa menggunakan script yang ditunjukkan di bawah ini untuk
mendapatkan hasil yang kita inginkan.
SELECT * FROM movies CROSS JOIN members
10. Full Inner Join
INNER JOIN digunakan untuk mengembalikan baris dari kedua tabel yang
memenuhi kondisi yang diberikan.
Misalkan, Anda ingin mendapatkan daftar anggota yang telah menyewa film
bersama dengan judul film yang disewa oleh mereka. Anda bisa menggunakan
INNER JOIN untuk itu, yang mengembalikan baris dari kedua tabel yang sesuai
dengan kondisi yang ada.
11. Full Inner Join
SELECT members.first_name , members.last_name , movies.title FROM members
,movies
WHERE movies.id = members.movie_id
SELECT A.first_name, A.last_name, B.title FROM members AS A
INNER JOIN movies AS B ON B.id = A.movie_id
14. Left / Right Outer Join
SELECT A.title , B.first_name , B.last_name FROM movies AS A
LEFT JOIN members AS B ON B.movie_id = A.id
SELECT A.title , B.first_name , B.last_name FROM movies AS A
RIGHT JOIN members AS B ON B.movie_id = A.id
SELECT A.first_name , A.last_name, B.title FROM members AS A
LEFT JOIN movies AS B ON B.id = A.movie_id
SELECT A.first_name , A.last_name, B.title FROM members AS A
RIGHT JOIN movies AS B ON B.id = A.movie_id
LEFT JOIN
RIGHT JOIN
15. SELECT A.title , B.first_name , B.last_name FROM movies AS A
RIGHT JOIN members AS B ON B.movie_id = A.id
ON
Digunakan untuk kunci relasi yang memiliki nama atribut berbeda
USING
Digunakan untuk kunci relasi yang memiliki nama atribut yang sama.
“ON” & “Using” pada klausa Join
ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;
16. “ON” & “Using” pada klausa Join
SELECT A.first_name, A.last_name, B.title FROM members AS A
INNER JOIN movies AS B ON B.id = A.movie_id
SELECT A.first_name, A.last_name, B.title FROM members AS A
INNER JOIN movies AS B USING(movie_id)
ALTER TABLE movies CHANGE id movie_id INT(1) NOT NULL AUTO_INCREMENT;
17. Natural JOIN dapat menspesifikasikan letak JOIN (FULL, LEFT, RIGHT).
Pada NATURAL JOIN tidak ada kondisi ON / USING. Hal ini dikarenakan NATURAL
JOIN secara otomatis menghubungkan kata kunci yang sama antar tabel yang
berelasi.
Natural Join
SELECT A.first_name , A.last_name, B.title FROM members AS A
NATURAL RIGHT JOIN movies AS B
SELECT A.first_name , A.last_name, B.title FROM members AS A
NATURAL JOIN movies AS B
18. Subquery adalah query nested / sebuah query yang ada di dalam query.
Subquery digunakan untuk menangani masalah dalam query yang kompleks
bahkan untuk nilai yang tidak diketahui berapa yang akan di select atau di insert.
Mengakses Menggunakan Subquery
Kegunaan :
1. Untuk menyelesaikan persoalan dimana terdapat suatu nilai yang
tidak diketahui (unknown values)
2. Meng-copy data dari satu tabel ke tabel lain
3. Mengubah / Menghapus baris dari satu tabel berdasarkan baris dari
tabel lain.
20. Tabel Music
Musicid Judul TahunTerbit
11001Tak Ada Yang Abadi 2005
22002Diantara Kalian 2006
33003Jangan Menyerah 2005
44004Sang Mantan 2008
55005Saat Kau Jauh 2009
66006Okelah Klo Begitu 2007
77007Menghapus Jejakmu 2007
Tabel Studio
StudioID NamaStudio Pemilik Studio
0010 Sony Music Sony
0011 Burning Studio Audy
0012 Abadi Music Abdi
0013 Sunny Music Mutia
0014 Ceria Studio Risna
0015 Persib Studio Kadiman
0016 Logitech Spectrum Taufik
Tabel Album
StudioID MusicID
0010 33003
0011 44004
0012 77007
0013 11001
0014 22002
0015 55005
0016 66006
21. Insert Menggunakan Subquery
CREATE TABLE studio2(
StudioID INT NOT NULL PRIMARY KEY,
NamaStudio VARCHAR(50) NOT NULL,
PemilikStudio VARCHAR(50) NOT NULL
)ENGINE=InnoDB;
INSERT INTO studio2 SELECT * FROM studio;
INSERT INTO studio2 (StudioID,NamaStudio,PemilikStudio) SELECT
StudioID,NamaStudio,PemilikStudio from studio;
22. Contoh Subquery
SELECT NamaStudio FROM studio WHERE studioid=(SELECT a.studioid FROM
album AS a, music AS m WHERE a.musicid=m.musicid AND judul='diantara
kalian');
Bagaimana menampilkan hal yang sama menggunakan join ???
SELECT namastudio FROM studio
INNER JOIN album ON album.studioid=studio.studioid
INNER JOIN music ON music.musicid=album.musicid
WHERE judul='diantara kalian';
23. Join VS Subquery
SELECT NamaStudio FROM studio WHERE studioid=(SELECT a.studioid FROM
album AS a, music AS m WHERE a.musicid=m.musicid);
SELECT namastudio FROM studio
INNER JOIN album ON album.studioid=studio.studioid
INNER JOIN music ON music.musicid=album.musicid;
Dalam segi pemanfaatan penggunana JOIN lebih baik daripada SUBQUERY
karena jika menggunakan SUBQUERY terdapat dua / lebih data yang sama, maka
data tersebut tidak dapat ditampilkan, berbeda dengan JOIN.
25. Operator pada Subquery
1. Operator Any dan Some
SELECT judul,tahunterbit
FROM music WHERE tahunterbit > ANY | SOME(
SELECT m.tahunterbit
FROM music AS m JOIN album AS a USING (musicid)
JOIN studio AS s USING(studioid)
WHERE judul='menghapus jejakmu‘
);
26. Operator pada Subquery
2. Operator ALL
SELECT judul,tahunterbit
FROM music WHERE tahunterbit > ALL (
SELECT m.tahunterbit
FROM music AS m JOIN album AS a USING (musicid)
JOIN studio AS s USING(studioid)
WHERE judul='menghapus jejakmu‘
);
27. Operator pada Subquery
3. Operator IN dan NOT IN
SELECT judul,tahunterbit
FROM music WHERE tahunterbit IN | NOT IN (
SELECT m.tahunterbit
FROM music AS m JOIN album AS a USING (musicid)
JOIN studio AS s USING(studioid)
WHERE judul='menghapus jejakmu‘
);
28. Operator pada Subquery
3. Operator EXISTS dan NOT EXISTS
SELECT MusicID, Judul
FROM music AS m
WHERE EXISTS (
SELECT MusicID
FROM album AS a
WHERE m.MusicID=a.MusicID
);
SELECT MusicID, Judul
FROM music AS m
WHERE EXISTS (
SELECT a.musicid from album AS a
INNER JOIN music AS m
ON a.MusicID=m.Musicid
);
Hapus terlebih dahulu data album yang memiliki musicid 22002
29. Contoh Update Multiple Table
UPDATE album
INNER JOIN studio ON studio.StudioID=album.StudioID
INNER JOIN music ON music.Musicid=album.MusicID
SET NamaStudio='angkasa'
WHERE judul='jangan menyerah';
UPDATE studio SET NamaStudio='angkasa'
WHERE StudioID=(
SELECT StudioID FROM music AS m, album AS a
WHERE m.musicid=a.musicid AND judul='jangan menyerah'
);
30. Contoh Delete Multiple Table
DELETE a,s FROM studio as s
INNER JOIN album AS a ON s.StudioID=a.StudioID
INNER JOIN music AS m ON m.Musicid=a.MusicID
WHERE judul='jangan menyerah';
DELETE a,s FROM studio as s, album AS a
WHERE s.StudioID=(SELECT s.StudioID FROM music AS m
WHERE m.musicid=a.musicid AND judul='jangan menyerah'
);