Rabu, 31 Maret 2010

jenis join pada oracle

1
EQUIJOIN
Join yang kondisi joinnya menggunakan tanda " = "
SELECT PEGAWAI.ID_PEG, PEGAWAI.NAMA, BAGIAN.NAMA "JABATAN"
FROM PEGAWAI, BAGIAN
WHERE PEGAWAI.KODE_BAG = BAGIAN.KODE_BAG
ID_PEG NAMA JABATAN
---------- ---------- ----------
1 AMRA PROGRAMMER
2 BUDI SYS.ADMIN
3 CICI PROGRAMMER
4 DEWI PROGRAMMER
5 EDWIN ANALIS
6 FIAN PROGRAMMER
7 GALI DBA
8 HARI SYS.ADMIN
9 INDRA ANALIS
10 JOHAN DBA
10 rows selected. Page 3 of 10
www.klik‐oracle.web.id
Oleh : Bambang Sutejo
Pada klausa WHERE boleh saja di tambahkan kriteria lain, yang tidak ada kaitannya dengan kondisi join.
SELECT PEGAWAI.ID_PEG,
PEGAWAI.NAMA,
BAGIAN.NAMA_BAG AS "JABATAN"
FROM PEGAWAI, BAGIAN
WHERE PEGAWAI.KODE_BAG = BAGIAN.KODE
AND
BAGIAN.KODE = 20;
ID_PEG NAMA JABATAN
---------- ---------- ----------
1 AMRA PROGRAMMER
3 CICI PROGRAMMER
4 DEWI PROGRAMMER
6 FIAN PROGRAMMER
Menghindari Ambiguous Kolom
SELECT PEGAWAI.ID_PEG, NAMA, BAGIAN.NAMA "JABATAN"
FROM PEGAWAI, BAGIAN
WHERE PEGAWAI.KODE_BAG = BAGIAN.KODE_BAG
AND
BAGIAN.KODE_BAG = 20;
SELECT PEGAWAI.ID_PEG, NAMA, BAGIAN.NAMA "JABATAN"
*
ERROR at line 1:
ORA-00918: column ambiguously defined
Kolom NAMA ada di kedua tabel yang di join, Anda harus menyebutkan kolom NAMA yang akan ditampilkan diambil dari tabel yang mana ? misalkan kolom NAMA dari tabel PEGAWAI maka harus disebutkan nama tabel sebelum nama kolomnya.
SELECT PEGAWAI.ID_PEG, PEGAWAI.NAMA, BAGIAN.NAMA "JABATAN"
FROM PEGAWAI, BAGIAN
WHERE PEGAWAI.KODE_BAG = BAGIAN.KODE_BAG
AND
BAGIAN.KODE_BAG = 20
ID_PEG NAMA JABATAN
---------- ---------- ----------
1 AMRA PROGRAMMER
3 CICI PROGRAMMER
4 DEWI PROGRAMMER
6 FIAN PROGRAMMER
Menggunakan Tabel Alias
Untuk menyederhanakan penulisan sql command, nama tabel bisa dibuat aliasnya.
SELECT P.ID_PEG,
P.NAMA,
B.NAMA "JABATAN"
FROM PEGAWAI P, BAGIAN B
WHERE P.KODE_BAG = B.KODE_BAG
AND
B.KODE_BAG = 20; Page 4 of 10
www.klik‐oracle.web.id
Oleh : Bambang Sutejo
2
NONEQUIJOIN
Join yang kondisi joinnya menggunakan selain tanda ʺ = ʺ
Untuk ilustrasi dibuat table berikut:
CREATE TABLE JOB_GRADES
(GRADE CHAR(1) PRIMARY KEY,
LOWEST_SAL NUMBER(7),HIGHEST_SAL NUMBER(7));
INSERT INTO JOB_GRADES VALUES ('A',1000,2999);
INSERT INTO JOB_GRADES VALUES ('B',3000,5999);
INSERT INTO JOB_GRADES VALUES ('C',6000,9999);
INSERT INTO JOB_GRADES VALUES ('D',10000,14999);
INSERT INTO JOB_GRADES VALUES ('E',15000,24999);
INSERT INTO JOB_GRADES VALUES ('F',25000,40000);
SELECT * FROM JOB_GRADES
G LOWEST_SAL HIGHEST_SAL
- ---------- -----------
A 1000 2999
B 3000 5999
C 6000 9999
D 10000 14999
E 15000 24999
F 25000 40000
Untuk mengetahui apakah seorang pegawai berdasarkan salary‐nya masuk ke dalam GRADE A,B,C,D,E atau F maka harus dilakukan join antara tabel EMPLOYEES dengan tabel GRADE dengan menggunakan pembanding BETWEEN…AND… seperti berikut:
CONNECT HR/HR
SELECT E.LAST_NAME,
E.SALARY,
J.GRADE "GRADE LEVEL"
FROM EMPLOYEES E, JOB_GRADES J
WHERE E.SALARY BETWEEN J.LOWEST_SAL AND J.HIGHEST_SAL;
LAST_NAME SALARY G
------------------------- ---------- -
Lorentz 4200 B
Sarchand 4200 B
TEST 4400 B
Austin 4800 B
Pataballa 4800 B
Mourgos 5800 B
Ernst 6000 C
Fay 6000 C
3
OUTER JOIN
Merupakan pengembangan dari equijoin.
Kalo di equijoin, data yang ditampilkan adalah data yang ada di suatu tabel dan terhubung ke tabel satunya (punya kawan/nilainya sama).
Kalo outer join data di suatu tabel akan ditampilkan walaupun tidak ada data yang sama di tabel satunya. Untuk outer join digunakan tanda plus (+) Page 5 of 10
www.klik‐oracle.web.id
Oleh : Bambang Sutejo
Ingat, pada tabel BAGIAN ada data KODE_BAG=50 yaitu NETWORKING sedangkan di tabel PEGAWAI tidak ada pegawai yang mempunyai kode_bag 50. Jika kita menggunakan Equi Join maka data bagian NETWORKING tidak akan pernah dimunculkan, karena tidak mempunyai pasangan di tabel PEGAWAI.
Agar data bagian NETWORKING dimunculkan dalam join walaupun tidak ada pegawai yang ada di bagian NETWORKING gunakanlah OUTER JOIN.
Demikian pula sebaliknya, untuk menampilkan pegawai yang belum mempunyai kode_bag (belum ditempatkan dibagian manapun bisa saja pegawai tersebut masih baru atau magang).
Untuk lebih jelasnya perhatikan perintah‐perintah berikut:
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;
ID_PEG NAMA KODE_BAG KODE_BAG JABATAN
---------- ---------- ---------- ---------- ----------
2 BUDI 10 10 SYS.ADMIN
8 HARI 10 10 SYS.ADMIN
1 AMRA 20 20 PROGRAMMER
3 CICI 20 20 PROGRAMMER
6 FIAN 20 20 PROGRAMMER
4 DEWI 20 20 PROGRAMMER
5 EDWIN 30 30 ANALIS
9 INDRA 30 30 ANALIS
7 GALI 40 40 DBA
10 JOHAN 40 40 DBA
50 NETWORKING
11 rows selected.
INSERT INTO PEGAWAI VALUES(11,'KIKI',NULL);
INSERT INTO PEGAWAI VALUES(12,'LILI',NULL);
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 (+);
ID_PEG NAMA KODE_BAG KODE_BAG JABATAN
---------- ---------- ---------- ---------- ----------
1 AMRA 20 20 PROGRAMMER
2 BUDI 10 10 SYS.ADMIN
3 CICI 20 20 PROGRAMMER
4 DEWI 20 20 PROGRAMMER
5 EDWIN 30 30 ANALIS
6 FIAN 20 20 PROGRAMMER
7 GALI 40 40 DBA
8 HARI 10 10 SYS.ADMIN
9 INDRA 30 30 ANALIS
10 JOHAN 40 40 DBA
11 KIKI
12 LILI Page 6 of 10
www.klik‐oracle.web.id
Oleh : Bambang Sutejo
4
SELF JOIN
Melakukan join dalam satu tabel. Self Join biasa juga disebut sebagai rekursif join.
Contohnya,
dalam tabel employees itu ada pegawai yang jabatannya
sebagai manager dan staff.
untuk mengetahui atasan dari satu pegawai harus dilakukan
join antara tabel employees dengan tabel employees juga.
SELECT STAFF.LAST_NAME AS “STAFF”,
MANAGER.LAST_NAME AS "MANAGER"
FROM EMPLOYEES STAFF,
EMPLOYEES MANAGER
WHERE STAFF.MANAGER_ID = MANAGER.EMPLOYEE_ID
WHERE STAFF.DEPERTMENT_ID=30


>>>search by google

Tidak ada komentar:

Posting Komentar