DBMS/Oracle 10g

[JOIN] SELECT문을 이용해서 한개 이상의 TABLE에서 정보얻기

본클라쓰 2008. 12. 21. 14:39

테이블간의 데이터 연결

 

 단지 한개의 테이블에서 정보를 얻는것이 아니라, 두개 이상의 테이블에서 정보를 얻기 위해서는 JOIN 문장을 사용합니다. 주로 Primary-key와 Foreign-key의 관계를 가진 칼럼을 소유하고 있는 테이블을 통한 검색시 사용합니다.


 

 

종류

  • CROSS joins (무차별 조인. 즉, 테이블 두 개를 합쳐서 정보를 얻는 것 뿐이 안된다.)

  • NATURAL joins
  • USING joins
  • FULL(or Two-sided) OUTER joins
  • ARBIRTARY join conditions for outer join

 


 

단순한 조인

 

 WHERE 절에 조인 조건을 작성합니다. 명확하게 하기 위해 컬럼명 앞에 테이블 명을 적습니다. 한 개 이상의 테이블에 같은 컬럼명이 있을 시 테이블명을 컬럼명 앞에 붙여서 사용합니다.

 

단순한 조인 명령어

> SELECT table.column, table.column

> FROM table1, table2 

> WHERE table1.column1 = table2.column2; 

 

 

 

NATURAL joins  

 

 서로 다른 테이블에서 컬럼명과 데이터타입이 같은 것을 기준으로 정보를 얻습니다. Master&Detail의 관계를 가진 2개 이상의 테이블에서 공통되는 칼럼을 서로 동등 비교하여 조인하는 방법입니다.

 

NATURAL 조인 명령어

> SELECT 테이블1.컬럼, 테이블2.컬럼, ...

> FROM 테이블1

> NATURAL JOIN 테이블2

> WHERE 조건 ;

 

※ 주 의 - 만약, 같은 이름의 컬럼이 데이터형이 다른 경우에는 오라클에서는 ERROR를 리턴합니다.

또한, NATURAL joins은 두 개의 테이블에서 같은 이름을 가진 모든 컬럼을 기준으로 합니다. 따라서 SELECT다음에 여러커럼들의 이름이 같을 경우 USING 을 이용합니다.

 

 

 

USING 

 

 USING은 몇 개의 컬럼의 이름이 일치하고 데이터 타입은 다른 경우, USING을 이용하여 하나의 컬럼을 기준으로 하여 검색하는 문법입니다. 한 개 테이블을 두개의 별도 테이븙처럼 사용할 때 사용. 한 개 테이블의 행들을 같은 테이블의 행들과 조인한다.

 

USING 명령어

> SELECT 테이블1.컬럼, 테이블2.컬럼, ...

> FROM 테이블1

> JOIN 테이블2

> USING (컬럼);

 

 

 

테이블명을 간단하게 사용하기

 

  테이블 이름을 사용하여 컬럼명을 정확히 표현 할 때 테이블 이름이 긴 경우 매우 많은 시간을 요할 수 있습니다. 이 때 테이블의 alias 를 사용하여 테이블 이름을 SELECT 문에서 다른 이름으로 사용하는 방법이 있습니다. 테이블명을 간단하게 사용하면 쿼리문을 단순하게 표현하고, 쿼리문 수행을 향상킵니다.

 

 

테이블명 간단하게 사용하는 명령어

> SELECT 테이블1약어.컬럼, 테이블2약어.컬럼

> FROM 테이블1 테이블1약어

> JOIN 테이블2 테이블2약어

> USING (컬럼);

 

 

  

FULL(Two_way) OUTER joins

 

  행이 조인 조건을 만족하지 않을 때는 해당 행은 쿼리 결과에 나타나지 않습니다. 하지만 OUTER 조인 조건을 사용할 때 조인 조건을 만족하지 않아도 행들의 결과를 나타내고자 하는 경우에 사용합니다. OUTER 조인의 연산자는 "(+)" 입니다. 조인 시킬 값이 없는 조인측에 '(+)'를 위치시킵니다.

 

OUTER 조인 명령어

> SELECT table.column, table.clumn

> FROM table1.table2 

> WHERE table1.column=table2.column(+)

 

 

'DBMS > Oracle 10g' 카테고리의 다른 글

그룹함수  (0) 2008.12.21
상태표현(if, else조건)  (0) 2008.12.20
중첩함수와 일반함수  (0) 2008.12.20
변환함수(데이터타입의 변환)  (0) 2008.12.15
오라클 날짜 표현  (0) 2008.12.15