1. Join
두 개의 테이블을 서로 묶어서 하나의 결과를 만들어내는 것
2. 1 대 다 관계
ex) 회원 테이블과 구매 테이블은 회원 1명이 여러 번 구매할 수 있으므로 1대 다 관계이다.
회원 테이블의 PK(기본키)는 구매 테이블의 FK(외래 키)로 설정할 수 있다.
구매 테이블에는 FK로 지정한 사용자 아이디가 여러 번 중복하여 존재할 수 있지만
아이디를 따라가 회원 테이블에서 유일한 정보를 찾을 수 있음!
3. 내부 조인의 기본 (INNER JOIN)
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인될 조건>
WHERE 검색 조건
* INNER JOIN을 JOIN으로 써도 INNER JOIN으로 인식한다.
-- 예시
SELECT *
FROM BUY
INNER JOIN MEMBER
ON BUY.MEM_ID = MEMBER.MEM_ID
WHERE BUY_MEM_ID = 'GRL';
4. 외부 조인 (OUTER JOIN)
내부 조인은 두 테이블에 모두 데이터가 존재해야 결과가 나온다면, 외부 조인은 한쪽에만 데이터가 있어도 결과가 나온다.
SELECT <열 목록>
FROM <첫 번째(LEFT) 테이블>
<LEFT : RIGHT : FULL> OUTER JOIN <두 번째(RIGHT) 테이블>
ON <조인될 조건>
WHERE 검색 조건;
* LEFT OUTER JOIN : 왼쪽 테이블을 기준으로 조인하겠당
* RIGHT OUTER JOIN : 왼쪽 테이블을 기준으로 조인하겠당
SELECT M.mem_id, M.mem_name, B.prod_name, M.addr
FROM member M
LEFT OUTER JOIN buy B
ON M.mem_id = B.mem_id
ORDER BY M.mem_id;
* member 테이블 기준으로 데이터가 조회되고, buy테이블에 정보가 없다면 빈 값으로 조회됨.
5. Cross Join
내용의 의미는 없지만 대용량 테스트 데이터 생성을 위해 사용하는 경우 있음.
SELECT *
FROM buy
CROSS JOIN member;
* 만약 buy에 500건, member에 3000건이 있었다면 총 150,000 건의 데이터를 생성할 수 있다.
6. Self Join
SELECT <열 목록>
FROM <테이블> 별칭A
INNER JOIN <테이블> 별칭B
ON <조인 조건>
WHERE <검색 조건>
if) 경리부장의 직속상관의 연락처를 알고 싶다면?
SELECT A.emp "직원", B.emp "직속상관", B.phone "직속상관 연락처"
FROM employee A
INNER JOIN employee B
ON A.manager = B.emp_no;
728x90
반응형
'개발자 :-) > SQL' 카테고리의 다른 글
[MySQL] 테이블, 뷰, 제약조건 (0) | 2022.09.29 |
---|---|
[MySQL] SQL 프로그래밍( IF, CASE, WHILE, 동적SQL) (1) | 2022.09.26 |
[SQL] SQL 고급 문법(데이터 형식) (1) | 2022.09.25 |
[MySQL] 데이터 변경을 위한 INSERT / UPDATE / DELETE (0) | 2022.09.25 |
[MySQL] SQL 기본 문법(SELECT FROM WHERE) (0) | 2022.09.19 |
댓글