SQL > MYSQL - LIBRARY > JOIN 문 left outer join
 
SQL
MYSQL
MS-SQL
ORACLE
 
 
MYSQL - LIBRARY
  HOME > SQL > MYSQL - LIBRARY
 
JOIN 문 left outer join
작성일 : 09-11-25
조회 : 2,800  

【형식】

table_reference, table_reference

table_reference [CROSS] JOIN table_reference

table_reference INNER JOIN table_reference join_condition

table_reference STRAIGHT_JOIN table_reference

table_reference LEFT [OUTER] JOIN table_reference join_condition

table_reference LEFT [OUTER] JOIN table_reference

table_reference NATURAL [LEFT [OUTER]] JOIN table_reference

{ OJ table_reference LEFT OUTER JOIN table_reference ON conditional_expr }

table_reference RIGHT [OUTER] JOIN table_reference join_condition

table_reference RIGHT [OUTER] JOIN table_reference

table_reference NATURAL [RIGHT [OUTER]] JOIN table_reference



여기서

table_reference는 다음과 같이 정의된다.

table_name [[AS] alias] [USE INDEX (key_list)] [IGNORE INDEX (key_list)]

또한 join_condition의 정의는 다음과 같다.

    ON conditional_expr |

    USING (column_list)



 · LEFT OUTER JOIN 문은 ODBC와 호환하기 위해 쓰인다.

 · 테이블 참조는 tbl_name AS  alias_name이나 tbl_name alias_name처럼 사용해서 별명

    을 붙일 수 있다.


mysql> select t1.name, t2.salary from employee AS t1, info AS t2

    -> where t1.name=t2.name;


 · ON 조건은 WHERE 절에서 사용되는 형식과 같은 조건이다.

 · LEFT JOIN에서 ON이나 USING 부분으로  오른쪽 테이블과 일치하는 레코드가 없으면,

    오른쪽 테이블의 모든 컬럼이 담긴 row에 NULL을 넣는다. 그러므로 다른 테이블에서 카

    운터파트가 없는 레코드를 찾는데 쓰인다.


        mysql> SELECT table1.* FROM table1

             ->        LEFT JOIN table2 ON table1.id=table2.id

             ->        WHERE table2.id IS NULL;


 · USING (column_list) 절은 두 테이블에 꼭 존재하는 컬럼 목록의 이름이다.


다음 두 표현은 같다.

        A LEFT JOIN B USING (C1,C2,C3,...)

        A.C1=B.C1 AND A.C2=B.C2 AND A.C3=B.C3,...


 · 두 테이블의 NATURAL  [LEFT] JOIN는 INNER  JOIN 또는 USING  절을 사용한 LEFT

    JOIN과 같은 의미이다.

 · INNER JOIN이나 ,(comma)는 같은 의미이다.

 · RIGHT JOIN는 LEFT JOIN과 유사하다.

 · STRAIGHT_JOIN은 JOIN과 같지만, 왼쪽 테이블을 오른쪽 테이블보다 먼저 읽히는 점

    이 다르다.

 · USE INDEX (key_list)를 사용하면, 여러 인덱스 중에서 오직  하나의 인덱스를 지정하

    는 것이고, IGNORE INDEX (key_list)는 지정한 인덱스를 사용하지 않게 한다. FORCE

    INDEX는 USE INDEX (key_list)와 같지만, 테이블 스캔기능이 더 있다.

     USE/IGNORE KEY와 USE/IGNORE INDEX는 동일한 의미이다.


예를 들어,

        mysql> SELECT * FROM table1,table2 WHERE table1.id=table2.id;

        mysql> SELECT * FROM table1 LEFT JOIN table2

            ->         ON table1.id=table2.id;

        mysql> SELECT * FROM table1 LEFT JOIN table2 USING (id);

        mysql> SELECT * FROM table1 LEFT JOIN table2

            ->         ON table1.id=table2.id LEFT JOIN table3

            ->         ON table2.id=table3.id;

        mysql> SELECT * FROM table1 USE INDEX (key1,key2)

            ->         WHERE key1=1 AND key2=2 AND key3=3;

        mysql> SELECT * FROM table1 IGNORE INDEX (key3)

            ->         WHERE key1=1 AND key2=2 AND key3=3;




JOIN 문


둘 이상의 테이블의 레코드 조합으로 하나의 테이블 레코드인 것처럼  찾는 것을 join이라

한다. 이해를 돕기 위하여 다음 테이블을 가정한다.


mysql> select * from test1;

+--------+------+

| a      | b    |

+--------+------+

| 금강   |    1 |

| 한강   |    2 |

| 대동강 |    3 |

| 두만강 |    4 |

+--------+------+

4 rows in set (0.00 sec)


mysql> select * from test2;

+------+--------+

| b    | d      |

+------+--------+

|    1 | 백두산 |

|    2 | 금강산 |

|    5 | 지리산 |

|    6 | 한라산 |

+------+--------+

4 rows in set (0.00 sec)


mysql>


1) FULL JOIN

FULL JOIN은 각 테이블의 레코드 수를 곱한 만큼의 레코드를 출력하며 이를 Cartesian

product라 한다.

from test1, test2에서 사용한 컴마(,)를 join 연산자로 생각하면 된다.

컴마 대신 join이나 cross join을 사용해도 같은 결과를 보인다.

【예제】

mysql> select * from test1,test2;

+--------+------+------+--------+

| a      | b    | b    | d      |

+--------+------+------+--------+

| 금강   |    1 |    1 | 백두산 |

| 한강   |    2 |    1 | 백두산 |

| 대동강 |    3 |    1 | 백두산 |

| 두만강 |    4 |    1 | 백두산 |

| 금강   |    1 |    2 | 금강산 |

| 한강   |    2 |    2 | 금강산 |

| 대동강 |    3 |    2 | 금강산 |

| 두만강 |    4 |    2 | 금강산 |

| 금강   |    1 |    5 | 지리산 |

| 한강   |    2 |    5 | 지리산 |

| 대동강 |    3 |    5 | 지리산 |

| 두만강 |    4 |    5 | 지리산 |

| 금강   |    1 |    6 | 한라산 |

| 한강   |    2 |    6 | 한라산 |

| 대동강 |    3 |    6 | 한라산 |

| 두만강 |    4 |    6 | 한라산 |

+--------+------+------+--------+

16 rows in set (0.00 sec)


mysql> select * from test1 join test2;


mysql> select * from test1 cross join test2;


mysql>


2) STRAIGHT_JOIN

 straight_join은 컬럼의 순서를 from 절에 나오는 테이블의 순서대로 출력하는 join이다.

【예제】

mysql> select * from test1,test2;


mysql> select * from test2,test1;


 
 

Total 12
번호 제   목 조회
12 mysqladmin 사용법 1326
11 mysql 스트링 함수들 1859
10 PHP 와 MySQL 을 사용시 트랜잭션을 처리하는 방법 입니다. 2323
9 mysql DB 자동 백업 설정 하기 (1) 5282
8 Mysql 날짜관련 함수 모음 4233
7    Mysql 날짜함수를 이용한 데이터 가져오기 (date_add, date_sub… 3977
6 JOIN 문 left outer join 2801
5 MySql 기본명령어 모음[콘솔사용시] 3538
4 MySQL 덤프방법(dump) 4587
3 MySQL 에서 사용되는 sql문 정리[DB 자체 처리] 2281
2 mysql 유저 생성, 권한 부여 2875
1    mysql 유저 생성, 권한 부여 4901
 
개인홈페이지 덤벙닷컴은 프로그래머와 디자이너위한 IT커뮤니티 공간입니다.
Copyright ⓒ www.dumbung.com. All rights reserved.