Tipe-tipe pada Join

Resume4 STIKOM SURABAYA

Menampilkan Data Dari Beberapa Tabel

Suatu laporan menampilkan data dari dua tabel yang terpisah:
• Nomor-nomor pegawai ada pada tabel EMPLOYEES.
• Nomor-nomordepartemen ada pada tabel EMPLOYEES dan tabel DEPARTEMENTS.
• Nama-nama departemen ada pada tabel DEPARTEMENTS.

TipeTipe pada Join
• Cross joins
• Natural joins
• Klausa USING
• Full (atau twosided) outer joins
• Kondisi-kondisi penggabungan tidak tetap untuk outer join

• Mendefinisikan Join
Dalam sintak: table1.column menunjukkan tabel dan kolom dari mana data diperoleh NATURAL JOIN menggabungkan dua tabel berdasarkan nama kolom yang sama JOIN table USING column_name melakukan suatu equijoin berdasarkan nama kolom. JOIN table ON table1.column_name melakukan suatu equijoin berdasarkan suatu kondisi pada klausa ON, = table2.column_name LEFT/RIGHT/FULL OUTER digunakan untuk melakukan outer joins. CROSS JOIN mengembalikan suatu Cartesian product dari dua tabel.
Untuk informasi lebih lanjut, lihat “SELECT” pada Oracle SQL reference.
• Membuat Natural Joins
• Klausa NATURAL JOIN : didasarkan pada semua kolom pada dua tabel yang memiliki nama yang sama.
• NATURAL JOIN memilih baris-baris dari dua tabel yang memiliki nilai-nilai yang sama dalam semua kolom yang sesuai.
• Jika kolomkolom memiliki nama yang sama memiliki tipe data berbeda, menghasilkan suatu error.

• Mendapatkan Record-Record dengan Natural Joins
Jika terdapat kolom lain yang sama, join akan menggunakan semua kolom-kolom tersebut.
Natural Join dengan suatu klausa WHERE Pembatasan tambahan pada suatu natural join diterapkan dengan menggunakan klausa WHERE.
Contoh berikut membatasi baris-baris sebagai outputnya pada suatu department ID sama dengan 20
atau 50 :
SELECT department_id, department_name, location_id, city
FROM departments
NATURAL JOIN locations
WHERE department_id IN(20,50);
• Klausa USING
Natural joins menggunakan semua kolom dengan menyesuaikan nama-nama dan tipe datatipe data untuk menggabungkan table-tabel. Klausa USING dapat digunakan untuk menentukan hanya kolom-kolom tertentu yang akan digunakan untuk suatu equijoin. Kolom-kolom yang direferensikan pada klausa USING tidak akan memiliki suatu perubah/qualifier (nama tabel atau alias) di manapun pada pernyataan SQL.
SELECT l.city, d.department_name
FROM locations l JOIN departments d USING (location_id)
WHERE location_id = 1400;

Pernyataan berikut tidak tepat karena LOCATION_ID dirubah (qualified) pada klausa WHERE :
SELECT l.city, d.department_name
FROM locations l JOIN department d USING (location_id)
WHERE d.location_id = 1400;
ORA25154:
column part of USING clause cannot have qualifier Pembatasan yang sama juga berlaku untuk NATURAL join. Oleh karena itu, kolomkolom yang memiliki nama yang sama pada kedua tabel harus digunakan tanpa ada qualifier/perubah.

• Klausa USING untuk Equijoins
Untuk menentukan nama departement dari para pekerja, Anda membandingkan nilai pada kolom
DEPARTMENT_ID di dalam tabel EMPLOYEES dengan nilai-nilai DEPARTMENT_ID di dalam
tabel DEPARTMENTS. Hubungan antara table-tabel EMPLOYEES dan DEPARTMENTS adalah suatu
equijoin; karena itu, nilai-nilai pada kolom DEPARTMENT_ID di kedua tabel harus sama.
Seringkali, tipe dari join ini melibatkan kelengkapan-kelengkapan primary dan foreign key.
Catatan: Equijoins juga disebut simple joins atau inner joins.
Mendapatkan Record-Record dengan Klausa USING
Contoh pada slide join kolom DEPARTMENT_ID di dalam tabeltabel
EMPLOYEES dan tabel
DEPARTMENTS, dan juga ditampilkan lokasi dimana seorang pekerja bekerja.

Merubah Nama-Nama Kolom Ambigu
Merubah nama-nama kolom dengan nama tabel untuk menghindari ambiguitas (kerancuan). Tanpa awalan-awalan tabel, kolom DEPARTMENT_ID pada daftar SELECT bisa jadi baik dari tabel DEPARTMENTS atau tabel EMPLOYEES. Hal tersebut penting untuk menambah awalan tabel untuk mengeksekusi query :
SELECT employees.employee_id, employees.last_name,
departments.department_id, departments.location_id
FROM employees JOIN departments
ON employees.department_id = departments.department_id;

Catatan: Saat menggabungkan dengan klausa USING, Anda tidak bisa merubah suatu kolom yang
digunakan pada klausa USING itu sendiri. Lagipula, jika kolom tersebut digunakan dimana-mana
pada pernyataan SQL, Anda tidak dapat mengaliaskannya.
• Menggunakan Tabel-Tabel Alias
Merubah nama-nama kolom dengan nama-nama tabel bisa sangat menghabiskan banyak waktu,
khususnya jika nama-nama tabel yang digunakan panjang. Dapat menggunakan table-tabel
alias daripada nama-nama tabel. Seperti suatu kolom alias memberikan nama lain suatu kolom, suatu
tabel alias memberikan nama lain suatu tabel. Tabel-tabel alias membantu menjaga kode SQL menjadi lebih sederhana, sehingga menghemat penggunaan memory.
Perhatikan bagaimana table-tabel alias diidentifikasi pada klausa FROM dalam contoh. Suatu nama
tabel disebutkan secara utuh, diikuti oleh spasi dan kemudian suatu tabel alias. Tabel EMPLOYEES
diberikan suatu alias e, dan tabel DEPARTMENTS memiliki suatu alias d.

Pedoman-pedoman

• Tabel-tabel alias dapat mencapai 30 karakter panjangnya, tapi alias-alias pendek lebih baik daripada alias-alias panjang.
• Jika suatu tabel alias digunakan untuk nama tabel khusus pada suatu klausa FROM, maka table alias itu harus diganti dengan nama tabel sepanjang pernyataan SELECT.
• Tabel-tabel alias sebaiknya mempunyai arti.
• Tabel alias berlaku hanya pada pernyataan SELECT saat ini.

Membuat Join-Join dengan Klausa ON
• Kondisi join untuk natural join pada dasarnya adalah suatu equijoin pada seluruh kolom-kolom dengan nama yang sama.
• Gunakan klausa ON untuk menentukkan kondisi-kondisi perubahan atau menentukan kolom-kolom untuk digabungkan.
• Kondisi penggabungan adalah dipisahkan dari kondisikondisi pencarian lain.
• Klausa ON membuat kode mudah untuk dipahami.

Menggabungkan Suatu Tabel dengan Tabel itu Sendiri

Klausa ON juga dapat digunakan untuk menggabungkan kolom-kolom yang memiliki namanama yang berbeda, di dalam tabel yang sama atau di tabel yang berbeda. Pada contoh ditunjukkan suatu selfjoin
dari tabel EMPLOYEES, berdasarkan pada kolom-kolom EMPLOYEE_ID dan MANAGER_ID.

• Menerapkan Kondisi-Kondisi Tambahan pada Suatu Join
Menerapkan kondisi-kondisi tambahan untuk join.
Pada contoh ditunjukkan suatu join pada table-tabel EMPLOYEES dan DEPARTMENTS dan, sebagai
tambahan, ditampilkan hanya pegawai-pegawai yang memiliki nomor manager 149. Untuk menambah penambahan kondisi-kondisi pada klausa ON, Anda dapat menambahkan klausa-klausa AND. Sebagai alternatif, Anda dapat menggunakan klausa WHERE untuk menerapkan tambahan kondisi-kondisi

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
WHERE e.manager_id = 149;

• ThreeWay Joins
Suatu ThreeWay join adalah suatu join pada tiga buah tabel. Dalam acuan sintak SQL:1999, join-join dilakukan dari kiri ke kanan. Jadi join pertama dilakukan EMPLOYEES JOIN DEPARTMENTS. Kondisi join pertama dapat merujuk kolom-kolom pada tabel EMPLOYEES dan DEPARTMENTS tapi tidak bisa merujuk ke kolom-kolom pada LOCATIONS. Kondisi join kedua dapat merujuk kolomkolom pada ketiga table

• NonEquijoins


Suatu nonequijoins adalah suatu kondisi join yang berisi suatu operator kesamaan (equality). Hubungan antara tabel EMPLOYEES dengan tabel JOB_GRADES adalah suatu contoh dari nonequijoins. Hubungan antara kedua kolom adalah bahwa kolom SALARY dalam tabel EMPLOYEES harus berada diantara nilainilai di kolom-kolom LOWEST_SALARY dan HIGEST_SALARY dalam tabel JOB_GRADES. Hubungan diperoleh menggunakan suatu operator lain daripada kesamaan (=).

• Mengembalikan RecordRecord yang Tidak Secara Langsung Sesuai dengan Outer Joins
Jika suatu baris tidak memenuhi kondisi join, baris tidak muncul pada hasil query. Sebagai contoh,
dalam kondisi equijoin pada table-tabel
EMPLOYEES dan DEPARTMENTS, nomor department 190
tidak muncul karena tidak ada pegawai dengan nomor department tersebut dicatat dalam tabel
EMPLOYEES. Malahan tampak 20 orang pegawai pada sekelompok hasil, Anda lihat 19 record.
Untuk mengembalikan catatan departemen yang tidak mempunyai beberapa pegawai, Anda bisa
gunakan outer join
• INNER Join Versus OUTER Join
Menggabungkan table-tabel dengan klausaklausa NATURAL JOIN, USING atau ON menghasilkan
suatu inner join. Beberapa baris yang tidak sesuai tidak ditampilkan pada output. Untuk mengembalikan baris-baris yang tidak sesuai, Anda bisa menggunakan suatu outer join. Suatu outer join mengembalikan semua baris-baris yang memenuhi kondisi join dan juga mengembalikan beberapa atau semua baris-baris tersebut dari satu tabel yang mana tidak ada baris-baris dari table lain yang memenuhi kondisi join.
Ada tiga tipe dari outer join:
• LEFT OUTER
• RIGHT OUTER
• FULL OUTER
• Contoh dari LEFT OUTER JOIN
Query ini mendapatkan semua baris dalam tabel EMPLOYEES, yang ada disebelah kiri tabel
meskipun tabel EMPLOYEES tidak ada yang sesuai dalam tabel DEPARTEMENTS.

• Contoh dari RIGHT OUTER JOIN
Query ini mendapatkan semua baris dalam tabel DEPARTMENTS, yang ada disebelah kanan tabel
meskipun dalam tabel DEPARTMENTS tidak ada yang sesuai dalam tabel EMPLOYEES.

• Contoh dari FULL OUTER JOIN
Query ini mendapatkan semua baris dalam tabel EMPLOYEES,meskipun tabel EMPLOYEES tidak
ada yang sesuai dalam tabel DEPARTMENTS. Query ini juga mendapatkan semua baris dalam tabel
DEPARTMENTS, meskipun tabel DEPARTMENTS tidak ada yang sesuai dalam tabel EMPLOYEES.

• Cartesian Products
Ketika suatu kondisi join tidak tepat atau dihilangkan semua, hasilnya adalah Cartesian product,
dimana semua kombinasi dari baris-baris ditampilkan. Semua baris dalam tabel pertama digabungkan dengan semua baris dalam tabel kedua. Sebuah Cartesian product cenderung untuk menghasilkan sejumlah besar baris, dan hasilnya kurang bermanfaat. Anda sebaiknya selalu menyertakan kondisi join yang tepat kecuali jika Anda mempunyai kebutuhan tertentu untuk menggabungkan semua baris dari seluruh tabel. Cartesian product berguna untuk beberapa uji coba ketika Anda perlu untuk menghasilkan sejumlah besar baris untuk memperagakan sejumlah data yang beralasan.

• Membuat Cross Joins
Contoh pada slide menghasilkan suatu Cartesian product dari table-tabel EMPLOYEES dan DEPARTMENTS

Sumber :copyright@2004, oracle.

Leave a comment