본문 바로가기
스터디일지/MYSQL

[MySQL]테이블 JOIN 하기

by 똥쟁이핑크 2024. 1. 28.

 

https://phoenixnap.com/kb/wp-content/uploads/2021/04/join-types.png

 

테이블과 테이블을 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

 

[SQL] 쿼리 실행 순서를 정리해둔 유용한 페이지

쿼리를 작성하다보면 한번쯤 헷갈릴수 있는 코드 실행 순서. 가장 윗줄부터 처리한다는 코드의 기본 공식이 적용은 되나 셀렉트와 오더바이는 후반부에 처리가 된다.

velog.io

 

https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

 

SQL 기본 문법: JOIN(INNER, OUTER, CROSS, SELF JOIN)

조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다. INNER JOIN(내부 조인)은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.OUTER JOIN(외부

hongong.hanbit.co.kr

 

'스터디일지 > MYSQL' 카테고리의 다른 글

[2023.08.04] SQL 3주차 & 4주차  (0) 2023.08.04
[2023.08.03] SQL 1주차 & 2주차  (0) 2023.08.03