반응형
1.조인이란?
-> 데이터베이스를 연결하여 데이터를 검색하는 방법
-> PK 혹은 FK로 두 테이블을 연결
-> 적어도 하나의 칼럼은 서로 공유되고 있어야함
2.INNER JOIN = 교집합
- 기준테이블과 JOIN 한 테이블의 중복된 값을 보여줌
- 결과값 : A의 테이블과 B테이블이 모두 가지고 있는 데이터만 검색
- ON 절에서는 WHERE 절에서 사용할 수 있는 모든 조건을 사용할 수 있음
- 표준 SQL과는 달리 MySQL에서는 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미로 사용.
--문법--
SELECT *
FROM 첫번째 테이블 이름
INNER JOIN 두번쨰 테이블 이름
ON 조건
SELECT *
FROM 첫번째 테이블 이름
JOIN 두번째 테이블 이름
ON 조건
SELECT *
FROM 첫번째 테이블 이름 AS 별칭 ,
두번째 테이블 이름 AS 별칭
WHERE 조건
--예제--
Reservation 테이블의 Name 필드와 Customer 테이블의 Name 필드가 서로 일치하는 레코드만
INNER JOIN 으로 가져옴
1.
SELECT *
FROM Reservation
INNER JOIN Customer
ON Reservation.Name = Customer.Name;
2.
SELECT *
FROM Reservation
JOIN Customer
ON Reservation.Name = Customer.Name;
3.
SELECT *
FROM Reservation AS r, Customer AS c
WHERE r.Name = c.Name;
결과
3. LEFT OUTER , RIGHT OUTER 조인
- 하나의 테이블 기준으로 합치는 조인
- LEFT JOIN
- 왼쪽 테이블을 중심으로 오른쪽의 테이블을 매치
- 왼쪽 테이블의 한 개의 레코드에 여러개의 오른쪽 테이블 레코드가 일치할 경우
>>> 해당 왼쪽 레코드를 여러번 표시 - 왼쪽은 무조건 표시, 매치되는 레코드가 오른쪽에 없으면 null
- ON 절의 조건을 만족하지 않는 경우, 첫 번째 테이블 필드(왼쪽)값은 그대로 가져옴.
--문법--
SELECT *
FROM 첫번째 테이블 이름
LEFT JOIN 두번째 테이블 이름
ON 조건
--예제--
Reservation 테이블의 Name 필드를 기준으로 Customer 테이블의 Name 필드와 일치하는 레코드만 LEFT JOIN으로 가져온 후, 그 중 ReserveDate 필드 값이 2019.09.13 이후인 레코드만 선택
SELECT *
FROM Reservation
LEFT JOIN Customer
ON Reservation.Name = Customer.Name
WHERE ReserveDate > '2019-09-13';
결과
- RIGHT JOIN
- 오른쪽 테이블 중심으로 왼쪽 테이블을 매치
- LEFT JOIN 에서 방향을 오른쪽으로만 바꾼 것
>>> 해당 레코드가 여러번 표시되거나, null 표시
--문법--
SELECT *
FROM 첫번째 테이블 이름
RIGHT JOIN 두번째 테이블 이름
ON 조건
--예제--
Customer 테이블의 Name 필드를 기준으로 Reservation 테이블의 Name 필드와 일치하는 레코드만을 RIGHT JOIN으로 가져오는 예제
SELECT *
FROM Reservation
RIGHT JOIN Customer
ON Reservation.Name = Customer.Name;
결과
반응형
'Database Study > SQL' 카테고리의 다른 글
[Oracle DB] 커서 (CURSOR) (0) | 2020.01.06 |
---|---|
[Oracle DB]PL / SQL 기초 (0) | 2020.01.06 |
[Oracle DB] 오라클_SQL (쿼리문) 처리 및 실행 순서 (0) | 2020.01.06 |
Select query 튜닝 (0) | 2020.01.03 |
[MySQL]기본 쿼리 & 내장함수 & JOIN (0) | 2019.09.11 |