손영배 블로그 누구나 쉽게 이해하고 습득하기

조인종류(inner, left, right) 본문

DB

조인종류(inner, left, right)

손영배 2019. 9. 1. 23:34
  • INNER JOIN : 양쪽 테이블에 모두 내용이 있는 것만 조인되는 방식

SELECT <열 목록>

FROM <첫 번째 테이블>

             INNER JOIN <두 번째 테이블>

             ON <조인딜 조건>

[WHERE 검색조건]

 

위의 형식에서 INNER JOIN을 그냥 JOIN이라고만 써도 INNER JOIN으로 인식한다.

 

구매 테이블 중에서 JYP라는 아이디를 가진 사람이 구매한 물건을 발송하기 위해서 이름/주소/연락처 등을 조인해서 검색

 

select *

    from buyTbl

       INNER JOIN userTbl

             ON buyTbl.userID = userTbl.userID

where buyTbl.userID = 'JYP';

 

코드를 좀 더 명확히 하기 위해서 select 다음의 컬럼 이름(열 이름)에도 모두 '테이블이름.열이름'식으로 붙여 준다.

SELECT buytbl.userID, userTbl.name, buyTbl.prodName, userTbl.addr, userTbl.mobible1 + userTbl.mobible2 AS '연락처' 

FROM buytbl 

JOIN usertbl 

ON buytbl.userID = userTbl.userID;

 

별칭을 붙여준 경우 Alias

SELECT B.userID, U.name, B.prodName, U.addr, U.mobible1 + U.mobible2 AS '연락처' 

FROM buytbl B 

JOIN usertbl 

ON B.userID = U.userID;

 

  • OUTER JOIN : inner join과 마찬가지로 양쪽에 내용이 있으면 당연히 조인되고, 한쪽에만 내용이 있어도 그 결과가 표시되는 방식이다. 

SELECT < 열 목록 >

FROM <첫 번째 테이블(LEFT 테이블) >

  <LEFT | RIGHT | FULL> OUTER JOIN < 두 번째 테이블(RIGHT 테이블) >

         ON < 조인될 조건 >

[WHERE 검색조건] ; 

 

SELECT U.userID, U.name, B.prodName, U.addr CONCAT(U.mobile1, U.mobile2) AS '연락처'

     FROM userTbl U

        LEFT OUTER JOIN buyTbl B //'왼쪽 테이블(userTbl)의 것은 모두 출력되어야 한다' left 조인

            ON U.userID = B.userID

     ORDER BY U.userID;

 

양쪽 모두에 조건이 일치하지 않는 것을 모두 출력하는 개념이다.

FULL OUTER JOIN = LEFT + RIGHT = FULL JOIN

 

SELECT C.clubName, C.roomNo, S.stdName, S.addr 

  FROM stdTbl S 

    LEFT OUTER JOIN stdclubtbl SC 

        ON S.stdName = SC.stdName 

    RIGHT OUTER JOIN clubTbl C 

       ON SC.clubName = C.clubName 

           ORDER BY C.clubName;

 

CROSS JOIN(상호 조인) : 한쪽 테이블의 모든 행들과 다른 쪽 테이블의 모든 행을 조인시키는 기능을 한다.

                                  그래서 CROSS JOIN의 결과 개수는 두 테이블 개수를 곱한 개수가 된다.

                                  카티션곱이라고도 부른다. 카티션 프로덕트

                                  용도 : 테스트로 쓸 많은 용량의 데이터를 생성할 때 주로 사용된다.

select * from buyTbl cross join userTbl;

 

SELF JOIN(자체 조인) : 별도의 구문이 있는 것이 아니라 자기 자신과 자기 자신이 조인한다는 의미이다.

 

select A.emp AS '부하직원', B.emp AS '직속상관'

    FROM empTbl A INNER JOIN empTbl B ON A.mangaer = B.emp where A.emp = '우대리';

 

UNION / UNION ALL / NOT IN / IN

 

SELECT 문장1 UNION [ALL] SELECT 문장2;

 

SELECT stdName, addr From stdTbl

   UNION ALL 

SELECT clubName, roomNo From clubTbl;