Anda di halaman 1dari 11

Complex Query (Join Operator, Correlated Subqueries)

1. COMPLEX QUERY

Obyektif :
Setelah menyelesaikan bahasan ini, diharapkan dapat melakukan hal berikut:

1. Memahami sintaks query yang lebih kompleks.

2. Menyebutkan dan menjelaskan tipe-tipe operator JOIN dalam SQL Server

3. Memahami sintaks Join lebih dari dua tabel

4. Memahami penggunaan Correlated Subquery

5. Membuat sintaks subquery yang tepat untuk menampilakan data yang


dibutuhkan

LEPKOM 2016 1-1


Complex Query (Join Operator, Correlated Subqueries)

Sebuah query kompleks adalah query parameter yang menggunakan lebih dari satu
nilai parameter pada dua atau lebih kriteria.

1.1. Join Operator


Sebuah klausa Join pada Micorsoft SQL Server 2008 merupakan gabungan dari dua
atau lebih tabel dalam database relasional menjadi satu hasil dalam sebuah atau
beberapa record. Hasil tersebut dapat menciptakan suatu set yang dapat disimpan
sebagai tabel atau hanya digunakan sebagai informasi yang ditampilkan seperti itu.
Operator Join diterapkan untuk tabel dan view. Join antara tabel akan dibahas
dalam bab ini. Terdapat lima jenis Join untuk menggabungkan beberapa tabel, yaitu :
1. Using Equijoin
2. Using Cartesian Product
3. Using Natural Join
4. Using Thetajoin
5. Using Outer Join

1.2. Equijoin
Equijoin adalah jenis tertentu dari komparator berbasis join, yang hanya
menggunakan perbandingan kesetaraan dalam predikat join. Menggunakan operator
perbandingan lainnya (seperti < ) mendiskualifikasi bergabung sebagai equi join.
Equijoin menggunakan tanda equal (=) untuk membandingkan operatornya.
Terdapat 2 sintaks yang berbeda untuk menuliskan equijoin, yaitu ANSI Join
Syntax dan SQL Server Join Syntax.
Contoh :
ANSI Join Syntax
Select emp.empno, emp.ename, dept.loc, emp.job
From emp JOIN dept
ON emp.deptno = dept.deptno
SQL Server Join Syntax
Select emp.empno, emp.ename, dept.loc, emp.job
From emp, dept Where emp.deptno = dept.deptno

LEPKOM 2016 1-2


Complex Query (Join Operator, Correlated Subqueries)

1.3. Cartesian Product


Cartesian Product adalah operasi untuk menghasilkan tabel hasil perkalian
kartesian. Operasi cartesian product memungkinkan kita mengkombinasikan
informasi beberapa relasi. Dalam operasi ini kita harus memilih atribut-atribut untuk
relasi yang dihasilkan dari cartesian product.
Contoh:
ANSI Join Syntax
SELECT e.deptno, e.empno, e.ename, d.loc, e.job
FROM emp e CROSS JOIN dept d
Where e.deptno = 10 ;
SQL Server Join Syntax
SELECT e.deptno, e.empno, e.ename, d.loc, e.job
FROM emp e, dept d Where e.deptno = 10 ;

LEPKOM 2016 1-3


Complex Query (Join Operator, Correlated Subqueries)

1.4. Natural Join


Natural Join bisa digunakan jika pada tabel yang di join terdapat kolom
(atribut) yang memiliki nama yang sama dan tipe data yang sama. Pada waktu JOIN
kolom tersebut secara otomatis akan digunakan untuk dibandingkan, dan kita tidak
bisa menentukan kolom mana yang akan digunakan untuk dibandingkan. Jika natural
join ini digunakan pada tabel yang ternyata memiliki kolom yang sama tetapi berbeda
tipe data maka akan terjadi error.
Contohnya :
ANSI Join Syntax
SELECT emp.*, dname, loc
FROM emp JOIN dept
ON emp.deptno = dept.deptno
WHERE loc = ‘CHICAGO’
SQL Server Join Syntax
SELECT emp.*, dname, loc
FROM emp, dept
WHERE emp.deptno = dept.deptno
AND loc = ‘CHICAGO’ ;

1.5. Theta Join


Theta Join, di mana hubungan adalah kesetaraan yang disebut Equijoin.
Meskipun semua penghubung adalah legal. Pada kenyataannya jarang terjadi dan tidak
akan pernah menghadapi tunggal theta - join ( atau jika melakukannya , akan melihat
semacam kesalahan ) . Kasus-kasus umum selalu ganda theta join.
Theta Join dan Equijoin adalah operasi untuk menggabungkan operasi
selection dan cartesian product dengan suatu kriteria.

LEPKOM 2016 1-4


Complex Query (Join Operator, Correlated Subqueries)

Contoh :
ANSI Join Syntax
Select emp.empno, emp.ename, d.*
FROM emp JOIN dept
ON dname < loc

SQL Server Join Syntax


Select e.empno, e.ename, d.*
FROM emp e, dept d
WHERE dname < loc

1.6. Menggabungkan Lebih dari Dua Tabel


Contoh sintaks dengan melibatkan lebih dari dua tabel :
ANSI Join Syntax
SELECT a. DEPTNO, a.EMPNO, a. ENAME, b. DNAME, a.JOB, c. GRADE
FROM EMP a JOIN DEPT b
ON b. DEPTNO = a. DEPTNO
JOIN SALGRADE c ON a. SAL BETWEEN c. LOSAL AND c. HISAL
AND a.job = ‘ANALYST’

SQL Server Join Syntax


SELECT a. DEPTNO, a.EMPNO, a. ENAME, b. DNAME, a.JOB, c. GRADE
FROM EMP a, DEPT b, SALGRADE c

LEPKOM 2016 1-5


Complex Query (Join Operator, Correlated Subqueries)

WHERE b. DEPTNO = a. DEPTNO


AND a. SAL BETWEEN c. LOSAL AND c. HISAL
AND a.job = ‘ANALYST’

1.7. Self Join


Self Join adalah Join yang dilakukan antar kolom dari tabel itu sendiri (dalam
satu tabel yang sama).
Contoh :
ANSI Join Syntax
SELECT a.deptno, a.dname, a.loc
FROM dept a JOIN dept b
ON a.deptno = b.deptno
WHERE a.deptno = 10
SQL Server Join Syntax
SELECT DISTINCT a.deptno, a.dname, a.loc
FROM dept a, dept b
WHERE a.deptno = b.deptno
AND a.deptno = 10

1.8. OUTER JOIN


Perintah OUTER JOIN tidak hanya menampilkan kolom yang sesuai dengan
yang dibandingkan, tetapi juga kolom yang tidak sesuai dengan yang dibandingkan.
Dengan kata lain, perintah ini menghasilkan data dari kedua tabel dimana :
- Akan menampilkan data yang memiliki kesamaan nilai pada kedua tabel.
- Akan menampilkan data yang tidak memiliki kesamaan nilai pada kedua
nilai dengan memberikan nilai NULL pada ‘JOIN CONDITION’.

LEPKOM 2016 1-6


Complex Query (Join Operator, Correlated Subqueries)

Sintaks :
SELECT <SELECT list>
FROM <the table you want to be the ‘LEFT’ table>
<LEFT | RIGHT> [OUTER]
JOIN < the table you want to be the ‘RIGHT’ table>
ON <JOIN CONDITION> [OTHER OPTION]

Jenis – jenis Outer Join :


1. Left Outer Join
Menampilkan semua baris pada tabel yang terletak pada kiri syntax JOIN
walapun tidak sesuai dengan tabel yang berada pada sebelah kanan JOIN.
Contoh:
SELECT emp.empno, emp.ename, dept.loc, emp.sal
FROM emp LEFT OUTER JOIN dept
ON emp.deptno = dept.deptno
AND sal >2000

2. Right Outer Join


Menampilkan semua baris pada tabel yang terletak pada kanan syntax JOIN
walapun tidak sesuai dengan tabel yang berada pada sebelah kiri JOIN.
Contoh :
SELECT emp. ename, dept. dname, emp. comm

LEPKOM 2016 1-7


Complex Query (Join Operator, Correlated Subqueries)

FROM emp RIGHT OUTER JOIN dept


ON emp. deptno = dept. deptno
ORDER BY ename ASC

Hasil Join table akan sama seperti pada Left Outer Join dimana data yang tidak
terdefinisi pada table sebelah kiri akan memunculkan isi data berupa NULL.

3. Full Outer Join


Full Outer Join akan mencocokkan dari kedua tabel baik dari tabel kiri ke
tabel kanan maupun dari tabel kanan ke tabel kiri, baik yang mempunyai pasangan
nilai maupun tidak.
Sintaks :
SELECT <SELECT list>
FROM <the table you want to be the ‘LEFT’ table>
FULL [OUTER]
JOIN < the table you want to be the ‘RIGHT’ table>
ON <JOIN CONDITION> [OTHER OPTION]
Contoh:
SELECT emp. ename, dept. dname, emp. sal
FROM emp FULL JOIN dept
ON emp. deptno = dept. deptno
ORDER BY ename ASC

LEPKOM 2016 1-8


Complex Query (Join Operator, Correlated Subqueries)

1.9. CORRELATED SUBQUERIES


Correlated subquery adalah subquery dimana data berjalan dua arah yaitu dari
query luar ke query dalam dan dari query dalam ke query luar. Pada Correlated
query terjadi 3 langkah yaitu :
1. Query luar melewatkan parameter record yang berupa referensi ke query
dalam.
2. Query dalam mengeksekusi berdasarkan nilai parameter record tadi.
3. Query dalam mengembalikan hasil ke query luar yang kemudian digunakan
untuk menyelesaikan perintah.

Contoh:
SELECT ename
FROM emp
WHERE empno IN ( SELECT empno FROM emp
WHERE deptno = 30)

LEPKOM 2016 1-9


Complex Query (Join Operator, Correlated Subqueries)

SELECT a. deptno, a. ename, a. job, a. sal


FROM emp a
WHERE a. sal = (SELECT MAX (b. sal) FROM emp b
WHERE a. deptno = b. deptno)
ORDER BY deptno

SELECT a.*
FROM dept a
WHERE a.loc IN (SELECT b.loc FROM dept b
WHERE a.deptno = b.deptno)

1. 10 OPERATOR EXISTS DAN NOT EXISTS PADA


SUBQUERIES
Operator EXISTS dan NOT EXISTS dirancang hanya untuk digunakan di
subquery. Fungsi ini menghasilkan nilai TRUE atau FALSE, EXISTS akan
mengirim nilai TRUE jika terdapat sedikitnya satu baris atau lebih di table hasil
yang dikirim oleh subquery. EXISTS mengirim nilai FALSE jika subquery
mengirim table kosong, NOT EXISTS kebalikan dari EXISTS. Karena EXISTS
dan NOT EXISTS hanya memeriksa keberadaan baris-baris di table hasil subquery.

Contoh :
SELECT ename
FROM emp
WHERE EXISTS (SELECT * FROM dept

LEPKOM 2016 1-10


Complex Query (Join Operator, Correlated Subqueries)

WHERE emp.deptno = dept.deptno


AND deptno = 10)

SELECT ename, job


FROM emp
WHERE NOT EXISTS (SELECT * FROM dept
WHERE emp.deptno = dept.deptno
AND loc = ‘CHICAGO’)

Haruskah menggunakan Operator JOIN atau SUBQUERY ?


Hampir semua statement Select yang menyertai Join Tabel, dan menggunakan
operator Join dapat ditulis kembali sebagai Subquery dan sebaliknya. Menuliskan
statement Select didalam form Join lebih mudah dibaca dan dimengerti oleh
programmer SQL, serta dapat membantu SQL Server menemukan strategi yang lebih
efisien untuk menampilkan data. Terdapat beberapa masalah yang dapat diselesaikan
lebih mudah dengan menggunakan Subquery dan juga Join.

LEPKOM 2016 1-11

Anda mungkin juga menyukai