ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MySQL JOIN 문 left outer join
    MySQL_Section/query 2014. 11. 13. 17:01

    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;

Designed by Tistory.