Halaman

Rabu, 12 Desember 2012

JENIS JOIN PADA STANDARD SQL ANSI



 
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;