Menampilkan Data dari Beberapa Table JOIN Objektif Menggunakan

Menampilkan Data dari Beberapa Table “JOIN”

Objektif §Menggunakan SELECT statement utk meng-akses data dari bbrp tabel menggunakan equijoins dan nonequijoins §Pemakaian self-join untuk tabel itu sendiri §Penggunaan outer joins untuk view data §Menghasilkan “Cartesian product” dari seluruh “row” dari 2 tabel atau lebih

Mengambil data dari beberapa tabel

Beberapa jenis “JOINS” yang mengikuti standard “SQL: 1999” : v. NATURAL JOIN v. JOIN table-name USING column-name v. JOIN table-name ON column-name 1 = column-name 2 v. OUTER JOIN (“LEFT”, “RIGHT”, “FULL”) v. CROSS JOIN

Syntax men-Join tabel dengan standard “SQL: 1999 Penggunaan “JOIN” utk query data dari lebih dari 1 tabel

Membentuk “Natural Join” Ø“NATURAL JOIN” merujuk pada Kolom-kolom pada 2 tabel yang memiliki “nama sama” ØMengambil semua Row dari 2 tabel dari kolom yang berisi sama dan yang ber-nama sama ØJika Kolom yang memiliki nama sama tetapi berbeda type data, akan menghasilkan “error”

Mengambil record dengan “NATURAL JOIN” SELECT table 1. column, table 2. column FROM table 1 [NATURAL JOIN table 2] | [JOIN table 2 USING (column_name)] | [JOIN table 2 ON (table 1. column_name = table 2. column_name)]| [LEFT|RIGHT|FULL OUTER JOIN table 2 ON (table 1. column_name = table 2. column_name)]| [CROSS JOIN table 2]; SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations ;

Membentuk “JOIN” dengan perintah “USING” üJika beberapa Kolom yg memiliki “nama sama” tetapi berbeda “type data”, perintah “NATURAL JOIN” dapat dimodifikasi dgn perintah “USING” utk men-spesifikasi Kolom yg akan digunakan dalam sebuah “equijoin” üGunakan “USING” utk mencocokan hanya 1 kolom ketika ada beberapa kolom yang cocok üNama Tabel atau nama Alias tidak perlu dipergunakan utk Kolom yg dipakai dalam “men-join” dengan “USING” ü“NATURAL JOIN” dan “USING” dipergunakan secara sendiri 2


Mengambil record dgn perintah “USING” SELECT table 1. column, table 2. column FROM table 1 [NATURAL JOIN table 2] | [JOIN table 2 USING (column_name)] | [JOIN table 2 ON (table 1. column_name = table 2. column_name)]| [LEFT|RIGHT|FULL OUTER JOIN table 2 ON (table 1. column_name = table 2. column_name)]| [CROSS JOIN table 2]; SELECT employees. employee_id, employees. last_name, departments. location_id, department_id FROM employees JOIN departments USING (department_id) ;

Mempertegas “Nama Kolom” yang sama §Gunakan “prefix tabel” untuk memperjelas “Nama Kolom” yang ada dibeberapa tabel §“prefix Tabel” juga dapat memperbaiki performansi §Gunakan “nama alias Kolom” untuk membedakan “Kolom” yang bernama sama tetapi berada di tabel yang berbeda §Tidak diperbolehkan pengunaan “nama alias Kolom” yang dirujuk dalam perintah “USING” dan dipakai dalam perintah SQL

Penggunaan “Tabel Alias” ØUntuk memudahkan query ØUntuk meningkatkan performansi SELECT e. employee_id, e. last_name, d. location_id, department_id FROM employees e JOIN departments d USING (department_id) ;

Membentuk “JOIN” dgn perintah “ON” ü“JOIN condition” untuk sebuah “natural join” pada dasarnya adalah equijoin dari seluruh Kolom yg memiliki nama sama. üPerintah “ON” dimaksudkan untuk menentukan “sebuah kondisi” atau menentukan kolom yang dipakai untuk men-“join” ü“Join condition” dipisahkan dari “search condition” lainnya üPerintah “ON” mempermudah pemahaman

Mengambil record dengan perintah “ON” SELECT table 1. column, table 2. column FROM table 1 [NATURAL JOIN table 2] | [JOIN table 2 USING (column_name)] | [JOIN table 2 ON (table 1. column_name = table 2. column_name)]| [LEFT|RIGHT|FULL OUTER JOIN table 2 ON (table 1. column_name = table 2. column_name)]| [CROSS JOIN table 2]; SELECT e. employee_id, e. last_name, e. department_id, d. location_id FROM employees e JOIN departments d ON (e. department_id = d. department_id) ;


Self-Joins menggunakan perintah “ON” SELECT e. last_name emp, m. last_name mgr FROM employees e JOIN employees m ON (e. manager_id = m. employee_id);

Penerapan tambahan kondisi pada sebuah Join SELECT e. employee_id, e. last_name, e. department_id, d. location_id FROM employees e JOIN departments d ON (e. department_id = d. department_id) AND e. manager_id = 149 ;

Membuat 3 Join dengan perintah “ON” SELECT employee_id, city, department_name FROM employees e JOIN departments d ON d. department_id = e. department_id JOIN locations l ON d. location_id = l. location_id ;


Mengambil record dengan Nonequijoin SELECT e. last_name, e. salary, j. grade_level FROM employees e JOIN job_grades j ON e. salary BETWEEN j. lowest_sal AND j. highest_sal;

Mengambil record dengan Nonequijoin …lanjutan JOBS tabel SELECT e. last_name, e. salary, j. job_id FROM employees e JOIN jobs j ON e. salary BETWEEN j. min_salary AND j. max_salary;


Inner Joins VS Outer Joins v. Join 2 tabel yang menghasilkan hanya row yang cocok (match) disebut sebagai “inner join” (in SQL: 1999) v. Join 2 tabel yang menghasilkan “inner join” dan juga menghasilkan row yg tidak cocok (unmatch) dari tabel kiri (tabel kanan) disebut outer join kiri atau (outer join kanan) v. Join dari 2 tabel yang menghasilkan “inner join” dan juga menghasilkan outer join kiri dan outer join kanan disebut “Full outer join”

Outer Join kiri SELECT e. last_name, e. department_id, d. department_name FROM employees e LEFT OUTER JOIN departments d ON (e. department_id = d. department_id) ;

Outer Join Kanan SELECT e. last_name, e. department_id, d. department_name FROM employees e RIGHT OUTER JOIN departments d ON (e. department_id = d. department_id) ;

Cara lain menuliskan perintah LEFT, RIGHT Outer Join LEFT OUTER JOIN : SELECT FROM WHERE e. last_name, e. department_id, d. department_name employees e departments d e. department_id = d. department_id (+) ; RIGHT OUTER JOIN : SELECT FROM WHERE e. last_name, e. department_id, d. department_name employees e departments d e. department_id (+) = d. department_id ;

Full Outer Join SELECT e. last_name, d. department_id, d. department_name FROM employees e FULL OUTER JOIN departments d ON (e. department_id = d. department_id) ;

Cartesian Product ØSebuah “Cartesian Product” akan terbentuk jika : “join condition” dihilangkan “join condition” salah Semua row dr 2 buah tabel di “join” semua ØGunakan “join condition” yang “valid” untuk menghindari “Cartesian Product”


CROSS JOIN §Perintah CROSS JOIN menghasilkan cross-product dari 2 tabel §Hasil ini disebut juga “Cartesian Product” antara 2 tabel SELECT last_name, department_name FROM employees CROSS JOIN departments ;

- Slides: 31