09. 여러 테이블 한번에 다루기
1. 합집합으로 보이기
두 테이블의 결과 값을 모두 합쳐 보여줌
1) UNION
- 동일한 값은 제외하고 보여줌
- 동일하다 = SELECT로 가져온 칼럼들의 모든 값이 같다
- 칼럼 값 하나라도 다르면 그냥 보여줌
2) UNION ALL
- 동일한 값도 포함하여 보여줌
3) 작성방법
쿼리1 UNION / UNION ALL 쿼리2
조금 더 풀어서 설명하자면,
SELECT 컬럼명
FROM 테이블1
UNION / UNION ALL
SELECT 컬럼명
FROM 테이블2 ;
- 쿼리1과 쿼리2의 데이터 개수가 같아야 함
- ORDER BY 는 쿼리 가장 마지막에 작성 가능, 쿼리 1에서 가져온 컬럼으로만 가능
2. 교집합으로 보이기
각 테이블에서 같은 값만 보이기 (모든 컬럼의 값이 같다는 소리)
INNER JOIN으로 표현가능
SELECT 컬럼명
FROM 테이블1 AS 별명1
INNER JOIN 테이블명2 AS 별명2
ON 별명1.컬럼1 = 별명2.컬럼1 AND ... AND 별명1.컬럼n = 별명2.컬럼n
(교집합을 확인하고 싶은 컬럼은 모두 다 기준으로 두고 합쳐주어야 함)
3. 차집합으로 보이기
두개 중 한 테이블에 있는 값은 모두 제외하고 나머지 다른 테이블에만 속한 부분을 보이기
=> A, B라는 테이블이 있다면, A에서 A와 B모두에 속하는 값을 빼고 나머지를 보이기
LEFT JOIN과 RIGHT JOIN으로 표현가능
SELECT 컬럼명
FROM 테이블1 AS 별명1
LEFT JOIN 테이블2 AS 별명2
ON 별명1.컬럼1 = 별명2.컬럼2 AND ... AND 별명1.컬럼n = 별명2.컬럼n
WHERE 별명2.컬럼 IS NULL ;
=> 테이블 2의 해당 컬럼이 비었을 떄만 출력해라 => 테이블1에만 있는 값을 출력해라 => 차집합
10. 조건에 조건 더하기
1. 서브쿼리
- 하나 쿼리 내 포함된 또 하나의 쿼리 의미
- 반드시 괄호 안에 존재
- 서브쿼리에는 세미콜론 ; X
2. SELECT 절의 서브쿼리
- 반드시 결과 값이 하나의 값이어야 함
SELECT 컬럼명
( SELECT 컬럼명
FROM 테이블명
WHERE 조건식 )
FROM 테이블명
WHERE 조건식 ;
3. FROM절의 서브쿼리
- 반드시 결과 값이 하나의 테이블
- 테이블 별명 붙어주어야 함
SELECT 컬럼명
FROM ( SELECT 컬럼명
FROM 테이블명
WHERE 조건식 ) AS 테이블별명
WHERE 조건식 ;
4. WHERE절의 서브쿼리
- 반드시 결과 값이 하나의 컬럼 (EXISTS 제외)
- 연산자와 함꼐 활용
SELECT 컬럼명
FROM 테이블명
WHERE 조건식 연산자 ( SELECT 컬럼명
FROM 테이블명
WHERE 조건식 ) ;