[출처]http://www.itmembers.net/board/view.php?id=oracle&page=2&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=subject&desc=desc&no=30&PHPSESSID=0a6380ea559aaf4e033ed638baf52b0c
SKILL_NAME VARCHAR2(30) NOT NULL);
INSERT INTO SKILL VALUES ('C101', 'CUSTOMER ENGINEER');
INSERT INTO SKILL VALUES ('D101', 'DATABASE ADMIN');
INSERT INTO SKILL VALUES ('E101', 'ERP ENGINEER');
INSERT INTO SKILL VALUES ('P101', 'PROGRAMMER');
INSERT INTO SKILL VALUES ('S101', 'SYSTEM PROGRAMMER');
INSERT INTO SKILL VALUES ('S102', 'SYSTEM ADMIN');
그럼, 다음과 같은 테이블이 있을 때
SELECT A.EMP_NUM,
두개 이상의 테이블로부터 원하는 정보를 검색하기 위해서는 JOIN문을 사용한다. 그러나 JOIN이 반드시 두 개 이상의 테이블에서만 사용되는 것은 아니다. 하나의 테이블에서도 JOIN을 사용하여 마치 두개의 테이블 인 것처럼 사용할 수 있다. (이것을 Self Join이라고 한다.)
EMP_NUM, SKILL_NO, SKILL_NAME을 한번에 표시하고 싶다.
그런데 EMP_NUM 컬럼은 EMP_SKILL 테이블에만 있고, SKILL_NO컬럼은 EMP_SKILL과 SKILL테이블 모두에 있도, SKILL_NAME 컬럼은 SKILL 테이블에만 있다.
즉, 표현하고 싶은 컬림이 두개의 테이블에 나뉘어 있는 것이다.
이럴 때 두 개의 테이블에서 원하는 컬럼만 골라서 표시하려 한다면 JOIN을 사용한다.
1. 실습을 하기 전에 SKILL테이블 하나를 만들자.
CREATE TABLE SKILL
( SKILL_NO CHAR(4) PRIMARY KEY,SKILL_NAME VARCHAR2(30) NOT NULL);
INSERT INTO SKILL VALUES ('C101', 'CUSTOMER ENGINEER');
INSERT INTO SKILL VALUES ('D101', 'DATABASE ADMIN');
INSERT INTO SKILL VALUES ('E101', 'ERP ENGINEER');
INSERT INTO SKILL VALUES ('P101', 'PROGRAMMER');
INSERT INTO SKILL VALUES ('S101', 'SYSTEM PROGRAMMER');
INSERT INTO SKILL VALUES ('S102', 'SYSTEM ADMIN');
2. 다음과 같이 입력하여 그 결과를 살펴보자.
그럼, 다음과 같은 테이블이 있을 때
A:EMP_NUM과 C:EMP_NUM이 같고, B:SKILL_NO와 C:SKILL_NO가 같은 레코드를 골라 EMP_NUM,
LAST_NAME, SKILL_NO, SKILL_NAME을 표시하려면 어떻게 해야 할까?
SELECT A.EMP_NUM,
LAST_NAME,
B.SKILL_NO,
SKILL_NAME
FROM EMP A,
SKILL B,
EMP_SKILL C
WHERE C.EMP_NUM = A.EMP_NUM
AND C.SKILL_NO = B.SKILL_NO;
AND C.SKILL_NO = B.SKILL_NO;
[결론]
- JOIN은 하나 이상의 테이블에서 원하는 컬럼을 검색할 때 사용한다.
- 단, JOIN은 FROM 절에서 명시한 테이블의 컬럼에만 한정한다.
- 이때 컬럼 간의 값들이 서로 일치할 때만 사용하는 JOIN을 EQUJOIN이라고 한다.
- JOIN은 하나 이상의 테이블에서 원하는 컬럼을 검색할 때 사용한다.
- 단, JOIN은 FROM 절에서 명시한 테이블의 컬럼에만 한정한다.
- 이때 컬럼 간의 값들이 서로 일치할 때만 사용하는 JOIN을 EQUJOIN이라고 한다.
'Windows Developer > Oracle' 카테고리의 다른 글
[Oracle] OUTER JOIN (1) | 2011.01.07 |
---|---|
[Oracle] NON-EQUJOIN (0) | 2011.01.07 |
[oracle] 프로시져 생성 및 in, out, in out 파라미터 (0) | 2011.01.04 |
[Oracle] 테이블 생성 및 테이터 삽입 (0) | 2010.12.22 |
[My-SQL] 기본 쿼리문 (0) | 2010.09.18 |