Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨

23.05.16 / JOIN & NULL 조회 본문

Database/MYSQL

23.05.16 / JOIN & NULL 조회

낫쏘링 2023. 5. 16. 16:19
728x90

[ JOIN ]

  • 두 개 이상의 테이블을 묶어서 하나의 결과 집합으로 만드는 것
  • 관련 있는 두 개 이상의 테이블을 결합하여 여러 테이블에 나눠져 있는 테이터들을 한 번에 가져오기 위한 방법
  • 두 테이블을 JOIN하려면 테이블이 1 : n 관계로 연결되어야 한다. (기본 키 : 외래 키)
[ INNER JOIN ]
- 교집합
- 두 테이블이 공통적으로 가지고 있는 값
   (테이블1에 A,B,C가 있고 테이블2에 A,C가 있다면 INNER JOIN했을 때 A,C만 JOIN되어 출력된다.)

SELECT
*
FROM
          테이블1 AS a
          INNER JOIN
          테이블2 AS b
          ON
          a.m_key = b.u_key
WHERE 조건;
* ON : 작성하지 않으면, 데이터가 규칙 없이 섞여버린다.
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