[MySQL]테이블 JOIN 하기
테이블과 테이블을 JOIN 할 때 알아 두어야 할 부분들이 있다.
1) 어떤 테이블을 JOIN 해야할지와 어떤 컬럼을 나타내야 할지 정확히 알기
2) 쿼리문을 작성할때 순서에 맞게 작성하기
쿼리의 실행 순서
쿼리문의 실행 순서는
FORM, JOIN > WHERE, GROUP BY, HAVING > SELECT > ORDER BY 순으로 실행되기 때문에
순서를 잘 기억해야 하고 쿼리문을 잘못 작성하면 결과값과 실행 속도에서 큰 차이가 나기 때문에
이를 염두해 두고 작성해야 한다.
1. FROM, JOIN
JOIN이 먼저 실행되어 데이터가 모아진다.
여기에는 서브쿼리도 함께 포함되기 때문에 임시적인 테이블을 만들 수 있게 도와준다.
2. WHERE
WHERE에 걸린 조건이 형성된 테이터 셋의 개별행에 적용이 된다.
WHERE절의 제약조건은 FROM절로 가져온 테이블에 적용이 될 수 있다.
3. GROUP BY
WHERE의 조건 적용 후 나머지 행은 GROUP BY절에 지정된 열의 공통 값을 기준으로 그룹화된다.
쿼리에 집계 기능이 있는 경우에만 이 기능을 사용해야 한다.
4. HAVING
GROUP BY 절이 쿼리에 있을 경우 HAVING 절의 제약조건이 그룹화된 행에 적용된다.
5. SELECT
SELECT에 표현된 식이 마지막으로 적용된다.
6. DISTINCT
표현된 행에서 중복된 행은 삭제된다.
7. ORDER BY
지정된 데이터를 기준으로 오름차순, 내림차순을 지정한다.
8. LIMIT / OFFSET
LIMIT와 OFFSET에서 벗어나는 행들이 제외되어 출력된다.
INNER JOIN
INNER JOIN은 여러 테이블에서 조건이 일치하는 값만 합쳐서 조회 할 때 쓴다.
SELECT 컬럼이름 OR *(컬럼 전체)
FROM A테이블
INNER JOIN B테이블
ON A테이블.컬럼명 = B테이블.컬럼명
SELECT 컬럼이름 OR *(컬럼 전체)
FROM A테이블
(INNER) JOIN B테이블
ON A테이블.컬럼명 = B테이블.컬럼명
OUTER JOIN
OUTER JOIN 은 외부 조인이라고 부르는데 동일한 값이 없는 행도 반환해야 할때 사용한다.
즉, A와 B테이블을 JOIN 할 때 조건에 맞지 않는 데이터도 표시하고자 할때 사용한다.
-- LEFT JOIN
SELECT *
FROM 왼쪽테이블
LEFT JOIN 오른쪽테이블 ON 왼쪽테이블.컬럼명 = 오른쪽테이블.컬럼명;
-- RIGHT JOIN
SELECT *
FROM 왼쪽테이블
RIGHT JOIN 오른쪽테이블 ON 왼쪽테이블.컬럼명 = 오른쪽테이블.컬럼명;
-- FULL OUTER JOIN
SELECT *
FROM 왼쪽테이블
FULL OUTER JOIN 오른쪽테이블 ON 왼쪽테이블.컬럼명 = 오른쪽테이블.컬럼명;
1) LEFT JOIN
왼쪽 테이블의 모든 값이 출력되는 조인이다.
왼쪽 테이블의 모든 정보를 유지하면서 연결된 데이터가 있는 경우를 출력한다.
오른쪽 테이블에서 매칭되는 결과값이 없는 행은 NULL 값으로 출력된다
결과로 NULL 값이 출력되는 경우가 많을 수 있고 NULL값을 처리할 때 주의해서 처리해야 한다.
2) RIGHT JOIN
LEFT JOIN과는 반대라고 생각하면 쉽다
오른쪽 테이블의 모든 값이 출력되는 조인이다.
오른쪽 테이블의 모든 행을 포함하면서 매칭되는 왼쪽 테이블의 행이 있는 경우에 사용한다.
오른쪽 테이블의 모든 정보를 유지하면서 연결된 데이터가 있는 경우를 출력한다.
1) 과는 반대로 왼쪽 테이블에 매칭되는 결과값이 없는 행은 NULL 값으로 출력된다.
마찬가지로 NULL 값이 출력되는 경우가 많을 수 있고 NULL값을 처리할 때 주의해야 하는 것은 똑같다.
3) FULL OUTER JOIN
왼쪽 또는 오른쪽 테이블의 모든 값이 출력되는 조인이다.
양쪽 테이블 중 어느 한쪽에도 해당되지 않는 모든 행을 포함하면서 매칭되는 행이 있는 경우에 사용한다.
양쪽 테이블의 모든 정보를 유지하면서 연결된 데이터가 있는 경우 유용하다.
양쪽 테이블을 연결하기 때문에 더 많은 NULL 값이 발생할 수 있고 처리할 때 주의해야 한다.
참고한 사이트
https://velog.io/@cyanred9/%EC%BF%BC%EB%A6%AC-%EC%8B%A4%ED%96%89-%EC%88%9C%EC%84%9C