1
CROSS JOIN
Menghasilkan cross product antara dua tabel sama dengan join tanpa kondisi (cartesian
product) di oracle
2
NATURAL JOIN
-
Hanya ada satu kolom yang sama pada kedua tabel
- Tipe data sama atau satu family atau tipe berbeda tetapi masih bisa dilakukan auto
konversi.
3
CLAUSA USING PADA NATURAL JOIN.
Digunakan jika dari kedua tabel ada
kolom yang namanya sama lebih dari satu. Untuk
kondisi seperti ini, maka gunakan USING.
Jika menggunakan NATURAL JOIN untuk kedua tabel diatas hasilnya akan seperti ini :
SELECT ID_PEG,NAMA,KODE_BAG,NAMA "JABATAN" FROM
PEGAWAI NATURAL JOIN BAGIAN1;
no rows selected
Harus ditentukan kolom mana yang akan digunakan sebagai kondisi join dengan USING clausa.
Jangan gunakan nama tabel atau alias pada kolom yang digunakan pada
USING.
SELECT P.ID_PEG,P.NAMA,KODE_BAG,B.NAMA "JABATAN"
FROM PEGAWAI P JOIN BAGIAN1 B USING(KODE_BAG);
Perbandingan perintah diatas jika menggunakan syntax join Oracle adalah sebagai berikut:
SELECT P.ID_PEG,P.NAMA,P.KODE_BAG,B.NAMA "JABATAN"
FROM PEGAWAI P, BAGIAN B WHERE P.KODE_BAG = B.KODE_BAG;
Page 8 of 10
www.klik‐oracle.web.id
Oleh : Bambang Sutejo
4
CLAUSA ON PADA NATURAL JOIN.
Pada natural join prinsip dasarnya adalah kolom yang digunakan mempunyai nama yang sama.
Jika pada kedua tabel yang akan dijoin tidak ada kolom yang namanya sama maka gunakan
ON.
CREATE TABLE DEPT1 (KODE NUMBER(2) PRIMARY KEY, NAMA_DEPT
CHAR(10)
); INSERT INTO DEPT1
VALUES('10','SYS.ADMIN');
INSERT INTO DEPT1 VALUES('20','PROGRAMMER');
INSERT INTO DEPT1 VALUES('30','ANALIS'); INSERT INTO DEPT1
VALUES('40','DBA');
INSERT INTO DEPT1 VALUES('50','NETWORKING');
SQL> DESC DEPT1
Name Null? Type
----------------------------------------- -------- -------------
KODE NOT NULL
NUMBER(2) NAMA_DEPT
CHAR(10)
SQL> DESC PEGAWAI
Name
Null? Type -----------------------------------------
-------- -------------
ID_PEG NOT NULL
NUMBER(2) NAMA
CHAR(10) KODE_BAG
NUMBER(2)
SELECT P.ID_PEG,P.NAMA,D.KODE_BAG,D.NAMA_DEPT
"JABATAN"
FROM PEGAWAI P NATURAL JOIN DEPT1 D; -->HASILNYA ??
SELECT P.ID_PEG,
P.NAMA, P.KODE_BAG,
D.NAMA_DEPT
"JABATAN" FROM PEGAWAI P JOIN DEPT1 D ON (P.KODE_BAG = D.KODE);
KOMBINASI JOIN:
Untuk mencoba kombinasi join yang ada di bawah ini, login sebagai user HR.
CONNECT hr/hr SELECT
EMPLOYEE_ID,LAST_NAME,DEPARTMENT_NAME,CITY
FROM EMPLOYEES E JOIN DEPARTMENTS D ON D.DEPARTMENT_ID =
E.DEPARTMENT_ID
JOIN LOCATIONS L ON D.LOCATION_ID = L.LOCATION_ID;
ATAU
Page 9 of 10
www.klik‐oracle.web.id
Oleh : Bambang Sutejo
SELECT
EMPLOYEE_ID,LAST_NAME,DEPARTMENT_NAME,CITY
FROM EMPLOYEES
JOIN DEPARTMENTS
USING (DEPARTMENT_ID)
JOIN LOCATIONS
USING (LOCATION_ID);
Persamaan dengan syntax Oracle
SELECT
EMPLOYEE_ID,LAST_NAME,DEPARTMENT_NAME,CITY FROM EMPLOYEES E, DEPARTMENTS D, LOCATIONS L
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID AND D.LOCATION_ID = L.LOCATION_ID;
5
LEFT OUTER JOIN
SELECT P.ID_PEG,P.NAMA,P.KODE_BAG,B.KODE_BAG,B.NAMA "JABATAN"
FROM PEGAWAI P LEFT OUTER JOIN BAGIAN B ON (P.KODE_BAG = B.KODE_BAG);
Persamaan dengan syntax Oracle
SELECT
P.ID_PEG,P.NAMA,P.KODE_BAG,B.KODE_BAG,B.NAMA "JABATAN" FROM PEGAWAI
P, BAGIAN B WHERE P.KODE_BAG = B.KODE_BAG
(+);
6
RIGHT OUTER JOIN
SELECT P.ID_PEG,P.NAMA,P.KODE_BAG,B.KODE_BAG,B.NAMA
"JABATAN"
FROM PEGAWAI P
RIGHT OUTER JOIN BAGIAN B
ON (P.KODE_BAG = B.KODE_BAG);
Persamaan dengan syntax Oracle
SELECT
P.ID_PEG,P.NAMA,P.KODE_BAG,B.KODE_BAG,B.NAMA "JABATAN" FROM PEGAWAI
P, BAGIAN B WHERE P.KODE_BAG (+) = B.KODE_BAG;
7
FULL OUTER JOIN
SELECT P.ID_PEG,P.NAMA,P.KODE_BAG,B.KODE_BAG,B.NAMA "JABATAN"
FROM PEGAWAI P FULL OUTER JOIN BAGIAN B ON (P.KODE_BAG = B.KODE_BAG);
Persamaan dengan syntax Oracle
SELECT
P.ID_PEG,P.NAMA,P.KODE_BAG,B.KODE_BAG,B.NAMA "JABATAN"
FROM PEGAWAI P, BAGIAN B
WHERE P.KODE_BAG = B.KODE_BAG (+)
UNION
SELECT P.ID_PEG,P.NAMA,P.KODE_BAG,B.KODE_BAG,B.NAMA
"JABATAN"
FROM PEGAWAI P, BAGIAN B
WHERE P.KODE_BAG (+) = B.KODE_BAG;