DATABASE(MY SQL)

(MY SQL) JOIN

서윤-정 2023. 10. 9. 13:32

❤ JOIN

여러 테이블로부터 데이터를 결합하고 관련된 정보를 검색하는데 사용되는 강력한 SQL 연산이다.

JOIN을 사용하면 두 개 이상의 테이블 간에 공통 열(또는 관계)을 기반으로 데이터를 결합할 수 있다.

 

가장 일반적인 JOIN 유형은 다음과 같다.

 

1. INNER JOIN

- 두 테이블 간의 일치하는 행만 검색한다.

즉, 두 테이블에서 공통 열의 값이 일치하는 경우에만 결과에 포함된다.

 

2. LEFT JOIN (또는 LEFT OUTER JOIN)

- 왼쪽(첫 번째) 테이블의 모든 행을 포함하고, 오른쪽(두 번째) 테이블에서 일치하는 행이 없는 경우에도

왼쪽 테이블의 모든 행을 포함한다.

오른쪽 테이블의 일치하지 않는 행은 NULL 값으로 표시된다.

 

3. RIGT JOIN (또는 RIGHT OUTER JOIN)

- LEFT JOIN의 반대로 작동한다.

오른쪽(두 번째) 테이블의 모든 행을 포함하고, 왼쪽(첫 번째) 테이블에서 일치하는 행이 없는 경우에도

오른쪽 테이블의 모든 행을 포함한다.

 

4. FULL JOIN (또는 FULL OUTER JOIN)

- 두 테이블 간의 모든 행을 포함하며, 일치하지 않는 행은 NULL 값으로 표시된다.

이는 왼쪽과 오른쪽 테이블 모두에서 일치하지 않는 행을 검색할 때 사용된다.

 

5. SELF JOIN

- 동일한 테이블 내에서 JOIN을 수행하는 것으로,

테이블 내의 행을 비교하는데 사용된다.

예를 들어, 조직 도구를 표현하는 테이블에서 각 직원과 그 상사 간의 관계를 찾을 때 SELF JOIN을 사용할 수 있다.

 

 

 

 

 

 

🧡 조인 문법

• 일반적인 조인

- 문법:

 SELECT <속성들>

FROM 테이블1, 테이블2

WHERE <조인조건> AND <검색조건>

 

SELECT <조건들>

FROM 테이블1 INNER JOIN 테이블 2 ON <조인조건>

WHERE <검색조건>

 

- 설명: SQL 문에서는 주로 동등조인을 사용한다.

두 가지 문법 중 하나를 사용할 수 있다.

 

 

 외부조인

- 문법:

SELECT <속성들>

FROM 테이블1 {LEFT | RIGHT | FULL [OUTER]}

JOIN 테이블2 ON <조인조건>

WHERE <검색조건>

 

- 설명: 외부조인은 FROM 절에 조인 종류를 적고 ON을 이용하여 조인조건을 명시한다.

 

 

 

 

💜 Inner JOIN

ON절과 함께 사용되며, ON절의 조건을 만족하는 데이터만을 가져온다.

 

- 문법:

1. 첫번째테이블이름

INNER JOIN 두번째테이블이름

ON 조건

 

2. 첫번째테이블이름

JOIN 두번째 테이블 이름

ON 조건

 

-- ON절에서는 WHERE 절에서 사용할 수 있는 모든 조건을 사용할 수 있다.

표준 SQL과는 달리 MYSQL에서는 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미로 사용된다.

 

-- 다음 예제는 RESERVATION 테이블의 NAME 필드와 CUSTOMER 테이블의 NAME 필드가 서로 일치하는 레코드만을 INNER JOIN으로 가져오는 예제이다.

 

-- RESERVATION 테이블과 CUSTOMER 테이블은 다음과 같다.

 

- 예제

1. SELECT *

FROM RESERVATION 

INNER JOIN CUSTOMER

ON RESERVATION.NAME = CUSTOMER.NAME;

2. SELECT * 

FROM RESERVATION

JOIN CUSTOMER

ON RESERVATION.NAME = CUSTOMER.NAME;

 

- 실행 결과

 

- INNER JOIN의 결과를 벤 다이어그램으로 나타내면 다음과 같다.

-- INNER JOIN의 경우에는 앞서 살펴본 표준 SQL 방식과는 별도로 MYSQL에서만 사용할 수 있는 방식이 따로 존재한다.

다음 예제는 앞서 살펴본 INNER JOIN 예제와 같은 실행 결과를 보여준다.

 

SELECT * 

FROM RESERVATION, CUSTOMER

WHERE RESERVATION.NAME = CUSTOMER.NAME;

 

-- 위의 예제처럼 테이블 이름이 길거나 복잡한 경우에는 별칭(alias)을 사용하여 SQL 구문을 간략화할 수 있다.

 

- 예제

SELECT *

FROM RESERVATION AS R, CUSTOMER AS C

WHERE R.NAME = C.NAME;

 

 

 

 

 

 

 

 

💚 LEFT JOIN

첫 번째 테이블을 기준으로, 두 번째 테이블을 조합하는 JOIN이다.

 

-- 이때 ON 절의 조건을 만족하지 않는 경우에는 첫 번째 테이블의 필드 값은 그대로 가져온다.

하지만 해당 레코드의 두 번째 테이블의 필드 값은 모두 NULL로 표시된다.

 

- 문법

첫번째테이블이름

LEFT JOIN 두번째테이블이름

ON 조건

 

-- ON 절에서는 WHERE 절에서 사용할 수 있는 모든 조건을 사용할 수 있다.

 

-- 다음 예제는 RESERVATION 테이블의 NAME 필드를 기준으로 CUSTOMER 테이블의 NAME 필드와 일치하는 LEFT JOIN으로 가져온 후, 그 중에서 RESEREDATE 필드이 값이 2016년 02월 01일 이후인 레코드만을 선택하는 예제이다.

 

- 예제

SELECT * 

FROM RESERVATION

LEFT JOIN CUSTOMER

ON RESERVATION.NAME = CUSTOMER.NAME

WHERE RESERVEDATE > '2016-02-01';

 

- 실행 결과

 

-- 위의 예제에서 두 개의 NAME 값이 일치하면, INNER JOIN과 같이 두 테이블의 모든 필드를 그대로 가져온다.

하지만 두 개의 NAME 값이 일치하지 않는 경우에는 CUSTOMER 테이블의 모든 필드를 NULL로 표시된다.

 

-- LEFT JOIN의 결과를 벤 다이어그램으로 나타내면 다음과 같다.

 

 

 

 

 

💛 RIGHT JOIN

LEFT 조인과는 반대로 두 번째 테이블을 기준으로, 첫 번째 테이블을 조합하는 JOIN이다.

 

-- 이때 ON 절의 조건을 만족하지 않는 경우에는 두 번째 테이블의 필드 값은 그대로 가져온다.

하지만 해당 레코드의 첫 번째 테이블의 필드 값은 모드 NULL로 표시된다.

 

- 문법:

첫번째테이블이름

LEFT JOIN 두번째테이블이름

ON 조건

 

-- ON 절에서는 WHERE 절에서 사용할 수 있는 모든 조건을 사용할 수 있다.

 

-- 다음 예제는 CUSTOMER 테이블의 NAME 필드를 기준으로 RESERVATION 테이블의 NAME 필드와 일치하는 레코드만을 RIGHT JOIN으로 가져오는 예제이다.

 

- 예제

SELECT * 

FROM RESERVATION 

RIGHT JOIN CUSTOMER

ON RESERVATION.NAME = CUSTOMER.NAME;

 

- 실행 결과

-- 위의 예제에서 두 개의 NAME 값이 일치하면, INNER JOIN과 같이 두 테이블의 모든 필드를 그대로 가져온다.

하지만 두 개의 NAME 값이 일치하지 않는 경우에는 RESERVATION 테이블의 모든 필드를 NULL로 표시된다.

 

-- RIGHT JOIN의 결과를 벤 다이어그램으로 나타내면 다음과 같다.

'DATABASE(MY SQL)' 카테고리의 다른 글

(MY SQL) 내장함수  (0) 2023.10.22
(My SQL) GROUP BY/HAVING  (0) 2023.09.26