어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨
23.05.16 / JOIN & NULL 조회 본문
728x90
[ JOIN ]
- 두 개 이상의 테이블을 묶어서 하나의 결과 집합으로 만드는 것
- 관련 있는 두 개 이상의 테이블을 결합하여 여러 테이블에 나눠져 있는 테이터들을 한 번에 가져오기 위한 방법
- 두 테이블을 JOIN하려면 테이블이 1 : n 관계로 연결되어야 한다. (기본 키 : 외래 키)
[ INNER JOIN ]
- 교집합
- 두 테이블이 공통적으로 가지고 있는 값
(테이블1에 A,B,C가 있고 테이블2에 A,C가 있다면 INNER JOIN했을 때 A,C만 JOIN되어 출력된다.)
* ON : 작성하지 않으면, 데이터가 규칙 없이 섞여버린다.
SELECT
*
FROM
테이블1 AS a
INNER JOIN
테이블2 AS b
ON
a.m_key = b.u_key
WHERE 조건;
a.m_key 와 b.u_key 이름 달라도 상관 없음 그냥 각 테이블의 컬럼 이름임
컬럼명을 작성할 때 두 테이블에 전부 동일한 이름의 컬럼이 존재한다면, 명확하게 테이블명 작성 후 컬럼 이름을 작성해야 한다. (c.m_id / o.m_id)
WHERE 조건은 필수 아님
[ OUTER JOIN ]
- LEFT OUTER JOIN : 왼쪽 테이블 기준 정렬 (OUTER 생략 가능) - RIGHT 보다 자주 사용
왼쪽테이블에 A,B,C가 있고 오른쪽테이블에 A,C가 있다면 LEFT JOIN했을 때 A,B,C 모두 JOIN되어 출력된다.
단, B는 Null 값으로 출력된다. (왼쪽 테이블 기준으로 튜플 생성)
- RIGHT OUTER JOIN : 오른쪽 테이블 기준 정렬 (OUTER 생략 가능)
SELECT
*
FROM
왼쪽테이블 AS a
LEFT JOIN
오른쪽테이블 AS b
ON
a.m_key = b.u_key
WHERE 조건;
[ CROSS JOIN ]
- 두 테이블의 곱집합
- A 테이블에 행이 10개, B테이블에 12개가 있다. -> 120개 출력
[ NATURAL JOIN ]
-
[ SELF JOIN ]
- 계층형 구조
[ NULL ]
- NULL은 아직 지정되지 않은 값이기 때문에 =, <, > 같은 비교 연산사를 사용할 수 없다.
- NULL 값을 찾을 때 : IS NULL -> mem_email IS NULL
- NULL이 아닌 값을 찾을 때 : IS NOT NULL -> mem_email IS NOT NULL
SELECT
L.level_name AS '회원 등급'
FROM
tb_member_level AS L
LEFT JOIN
tb_member AS M
ON
M.m_level = L.level_num
WHERE
M.m_id IS NULL;
-- INNER JOIN은 NULL 값을 조회하지 않기 때문에 LEFT JOIN 사용
728x90
'Database > MYSQL' 카테고리의 다른 글
23.05.29 / 서브 쿼리 (0) | 2023.05.29 |
---|---|
23.05.23 / 데이터베이스 설계 & eXERD (0) | 2023.05.22 |
23.05.15 / 데이터 모델링 & 데이터베이스의 구성 (0) | 2023.05.15 |
23.05.15 / 내장 함수, MySQL 변수 (0) | 2023.05.15 |
23.05.15 / DBeaver(디비버) (0) | 2023.05.15 |