SQL
SQL -6 : Join
hjc_
2020. 11. 23. 15:19
JOIN
두 개이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만들어 내는 것을 말한다.
INNER JOIN
일반적으로 많이 사용되는 조인.
SELECT <열 목록>
FROM <테이블1>
INNER JOIN <테이블2>
ON 테이블1.컬럼명 = 테이블2.컬럼명 이용 -- 서로 공통된 관계의 컬럼이용
[WHERE 조건절];
USE sqldb;
SELECT *
FROM userTbl
INNER JOIN buyTbl
ON userTbl.userID = buyTbl.userID
ORDER BY userTbl.userID;
/*
구매금액 = 수량*가격
아이디 이름 지역 상품명 수량 가격 구매금액
? ? ? ? ? ? ?
*/
SELECT U.userID AS '아이디', U.name AS '이름', U.addr AS '지역',
B.prodName AS '상품명', B.amount AS '수량', B.price AS '가격',
format(B.price * B.amount, 0) AS '구매금액'
FROM userTbl U
INNER JOIN buyTbl B
ON U.userId = B.userId;
OUTER JOIN
조건에 만족되지 않는 행까지도 포함시키는 것이다.
SELECT <열 목록>
FROM <테이블1>
<LEFT | RIGHT | FULL> OUTER JOIN <테이블2>
ON <조인될 조건>
[WHERE 검색 조건];
LEFT OUTER JOIN
'왼쪽 테이블의 것은 모두 출력되어야 한다' 해석하자.
RIGHT OUTER JOIN
'오른쪽 테이블의 것은 모두 출력되어야 한다' 해석하자.
FULL OUTER JOIN
양쪽 모두에 조건이 일치하지 않는 것을 모두 출력하는 개념이다.
CROSS JOIN
한쪽 테이블의 모든 행들과 다른 쪽 테이블의 모든 행을 조인시킨다.
그래서 결과 개수는 두 테이블 개수를 곱한 개수가 된다.
ON 구문을 사용할 수 없다.
용도는 테스트로 사용할 많은 용량의 데이터를 생성할 때 주로 사용한다.
USE sqldb;
SELECT * FROM buyTbl
CROSS JOIN userTbl;
SELF JOIN
자기자신과 자기 자신이 조인한다는 의미이다.
대표적인 예가 조직도와 관련된 테이블이다.
-- 퀴즈 : 우대리 직원의 상관의 구내번호를 찾아라 (셀프 조인 이용)
SELECT A.emp AS '부하직원', B.emp AS '직속상관', B.empTel AS '직속상관 연락처'
FROM empTBL A
INNER JOIN empTBL B
ON A.manager = B.emp
WHERE A.emp = '우대리';
UNION / UNION ALL / NOT IN / IN
UNION은 두 쿼리의 결과를 행으로 합치는 것이다.
UNION만 사용하면 중복된 열은 제거되고 데이터가 정렬되어 나온다.
UNION ALL 을 사용하면 중복된 열까지 모두 출력된다.
SELECT 문장1
UNION [ALL]
SELECT 문장2;
-- 중복 X
SELECT clubName AS '결과' FROM clubtbl
UNION
SELECT clubName FROM stdclubTbl;
-- 중복 O
SELECT clubName AS '결과' FROM clubtbl
UNION ALL
SELECT clubName FROM stdclubTbl;
NOT IN : 첫번째 쿼리의 결과중 두번째 쿼리에 해당하는 것을 제외
IN : 두번째 쿼리의 결과만 조회
SELECT 첫번째 쿼리
WHERE ... [NOT IN / IN ] ( SELECT 두번째 쿼리 )