SQLD/SQL 기본과 활용

표준 조인(INNER JOIN, NATURAL JOIN,FROM 조건절, USING 조건절, ON 조건절)

DevPing9_ 2020. 8. 27. 18:25

 

 1. INNER JOIN (FROM 조건절)

 - 조인 조건을 만족하는 행들만 반환

 - 공통된 컬럼은 각 테이블별로 두번씩 출력

 - SELECT 절에 * 사용시 테이블 순서대로 칼럼 출력 

 

2. NATURAL JOIN (FROM 조건절)

 - 두 테이블 간에 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN

 - 공통된 컬럼은 ALIAS나 접두사를 붙일수 없음.

    ex) DEPTNO가 A,B 모두 공통적으로 가지고 있는 칼럼이라면 SELECT 절에서 A.DEPTNO 불가

 - 공통된 컬럼은 하나만 출력

 - SELECT 절에 * 사용시 공통된 컬럼이 제일 먼저 출력 (첫번째 칼럼으로 출력)

 - SQL Server 에서 지원하지 않음. (Oracle은 지원)

 

3. USING 조건절

 - USING 조건절은 원하는 NATURAL JOIN 에서 원하는 칼럼만 선택하여 EQUI JOIN

 - NATURAL 조인과 마찬가지로 조인컬럼에 대해서 ALIAS나 접두사를 붙일수 없음.

 - SELECT 절에 * 사용시 USING 조건절에 사용된 컬럼이 순서대로 제일 먼저 출력 (첫번째 ... N번째 컬럼으로 출력)

 - USING 조건절에 사용되지 않은 컬럼들은 공통된 컬럼이 있을 시 INNER JOIN과 같이 각 테이블별로 두번씩 출력

 - SQL Server 에서 지원하지 않음. (Oracle은 지원)

 

4. ON 조건절

  - 조인 서술부(ON 조건절)과 비조인 서술부(WHERE 조건절)을 분리해 가독성을 높이는 장점이 있다.

  - WHERE 절 조인과 같이 NON-EQUI JOIN이 가능하다.

  - WHERE 절 조인은 공통된 컬럼에 대해 접두사가 선택사항이지만, ON 조건절은 필수조건으로 명확하게 지정해주어야 한다.

     ex) DEPTNO -> A.DEPTNO

  - OUTER JOIN에서 조인의 대상을 제한하기 위한 목적으로 사용되는 추가조건을 제외한 검색조건들은 WHERE절에 표기하는 것이 좋다.

     (ON 조건절에 검색 조건 삽입가능하기는 하다)

 

# INNER JOIN (INNER 는 디폴트옵션이므로 생략가능)
SQL> SELECT A.ENAME, B.DEPTNO, B.DNAME              #(ON 조건절을 사용하였으므로 B.DEPTNO가 아닌 DEPTNO는 불가)
     FROM EMP A INNER JOIN DEPT B                          #(= FROM EMP A JOIN DEPT B)
      ON B.DEPTNO = A.DEPTNO;                                #(= WHERE B.DEPTNO = A.DEPTNO;)
      
      
# NATURAL JOIN
SQL> SELECT A.ENAME, DEPTNO, B.DNAME                #(B.DEPTNO 로 작성시 오류)
     FROM EMP A NATURAL JOIN DEPT B;
     
     
# 위의 두 예제의 실행결과는 같다. (중복컬럼은 DEPTNO 1개이다.)





''' Asterisk 사용시
 (EMP에는 ENAME, DEPTNO, CNAME칼럼이 DEPT에는 DEPTNO, DNAME, CNAME만 있다고 가정한다)'''

# INNER JOIN & ON 조건절 (INNER 는 디폴트옵션이므로 생략가능) 
SQL> SELECT *
     FROM EMP A INNER JOIN DEPT B  
      ON B.DEPTNO = A.DEPTNO;
      
# 실행결과 (컬럼이 중요하기 때문에, 데이터 출력은 생략하겠음) (데이터는 조인조건을 만족하는 행들만 출력한다)
ENAME     DEPTNO     CNAME      DEPTNO     DNAME      CNAME
------------------------------------------------------------
데이터 생략          
...
            
# NATURAL JOIN 
SQL> SELECT *
     FROM EMP A NATURAL JOIN DEPT B;

# 실행결과 (컬럼이 중요하기 때문에, 데이터 출력은 생략하겠음) (데이터는 조인조건을 만족하는 행들만 출력한다)
DEPTNO     CNAME     ENAME     DNAME
------------------------------------------------------------
데이터 생략          
...

# USING 조건절
SQL> SELECT *
     FROM EMP A JOIN DEPT B
     USING (DEPTNO);
     
# 실행결과 (컬럼이 중요하기 때문에, 데이터 출력은 생략하겠음) (데이터는 조인조건을 만족하는 행들만 출력한다)
DEPTNO     ENAME     CNAME     DNAME      CNAME
------------------------------------------------------------
데이터 생략          
...     

 

728x90