손영배 블로그 누구나 쉽게 이해하고 습득하기
조인종류(inner, left, right) 본문
- 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 U
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;