낙서장[1]/94. DataBase: 2개의 글

[DataBase] 조인 SQL문

Posted by nkjok
2025. 1. 24. 15:53 낙서장[1]/94. DataBase
반응형

1. LEFT JOIN

LEFT JOIN은 왼쪽 테이블의 모든 레코드와 오른쪽 테이블의 일치하는 레코드를 반환한다. 왼쪽 테이블에 일치하는 레코드가 없으면 NULL 값을 포함한 레코드를 반환한다.

sql
SELECT * FROM TableA A LEFT JOIN TableB B ON A.key = B.key;

2. INNER JOIN

INNER JOIN은 두 테이블 간의 일치하는 레코드만 반환한다. 일치하는 레코드가 없으면 결과에 포함되지 않는다.

sql
SELECT * FROM TableA A INNER JOIN TableB B ON A.key = B.key;

3. RIGHT JOIN

RIGHT JOIN은 오른쪽 테이블의 모든 레코드와 왼쪽 테이블의 일치하는 레코드를 반환한다. 오른쪽 테이블에 일치하는 레코드가 없으면 NULL 값을 포함한 레코드를 반환한다.

sql
SELECT * FROM TableA A RIGHT JOIN TableB B ON A.key = B.key;

4. LEFT JOIN with NULL condition

LEFT JOIN에 WHERE 조건을 추가하여 오른쪽 테이블에 일치하지 않는 레코드만 반환한다.

sql
SELECT * FROM TableA A LEFT JOIN TableB B ON A.key = B.key WHERE B.Key IS NULL;

5. FULL OUTER JOIN

FULL OUTER JOIN은 두 테이블의 모든 레코드를 반환하며, 일치하지 않는 레코드는 NULL 값을 포함한다. SQL에서는 FULL OUTER JOIN을 UNION으로 구현할 수 있다.

sql
SELECT * FROM TableA A LEFT JOIN TableB B ON A.key = B.key
UNION
SELECT * FROM TableA A RIGHT JOIN TableB B ON A.key = B.key;

6. FULL OUTER JOIN with NULL condition

FULL OUTER JOIN에 WHERE 조건을 추가하여 어느 한쪽에 일치하지 않는 레코드만 반환한다.

sql
SELECT * FROM TableA A LEFT JOIN TableB B ON A.key = B.key
UNION
SELECT * FROM TableA A RIGHT JOIN TableB B ON A.key = B.key WHERE A.key IS NULL OR B.key IS NULL;

7. RIGHT JOIN with NULL condition

RIGHT JOIN에 WHERE 조건을 추가하여 왼쪽 테이블에 일치하지 않는 레코드만 반환한다.

sql
SELECT * FROM TableA A RIGHT JOIN TableB B ON A.key = B.key WHERE A.Key IS NULL;

이러한 JOIN 종류를 사용하면 다양한 방식으로 데이터를 결합하고 조회할 수 있다. 상황에 맞게 적절한 JOIN을 선택하여 데이터베이스 쿼리를 작성하면 된다.

 

 

출처: https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-JOIN-%EC%A1%B0%EC%9D%B8-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%EA%B8%B0%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC 발췌

반응형

[DataBase] ON 절과 WHERE 절을 사용하는 조인의 차이

Posted by nkjok
2025. 1. 23. 18:00 낙서장[1]/94. DataBase
반응형

ON 절과 WHERE 절을 사용한 조인의 차이에 대해 설명드릴게요. 정확한 결과를 가져오려면 ON 절에서 필터를 사용하는 것이 더 적절한 경우가 있습니다. 이 차이를 이해하기 위해 예제를 사용해 자세히 설명해 보겠습니다.

ON 절과 WHERE 절을 사용하는 조인의 차이

ON 절에서의 필터링

ON 절은 조인 조건을 지정하는 곳입니다. 테이블을 조인할 때 조건을 걸어 필터링을 수행합니다. 조인할 때마다 조건에 맞는 행만 결과 집합에 포함됩니다.

WHERE 절에서의 필터링

WHERE 절은 조인이 끝난 후 결과 집합에서 조건을 걸어 필터링을 수행합니다. 조인된 결과에서 조건에 맞는 행만 최종 결과 집합에 포함됩니다.

예제

데이터 준비

테이블 employees와 departments가 있다고 가정해보겠습니다.

ON 절을 사용하는 조인

ON 절을 사용하여 필터링하면 조인 조건이 먼저 적용됩니다. 예를 들어, dept_id = 10인 부서만 조인하려면:

SELECT e.emp_name, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id AND d.dept_id = 10;

결과:

emp_namedept_name
Alice HR

 

WHERE 절을 사용하는 조인

WHERE 절을 사용하여 필터링하면 조인이 모두 이루어진 후 조건이 적용됩니다. 예를 들어, dept_id = 10인 부서만 결과에 포함하려면:

SELECT e.emp_name, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
WHERE d.dept_id = 10;

결과는 ON 절을 사용한 경우와 동일합니다:

emp_namedept_name
Alice HR

 

차이점 및 주의사항

  1. 조인된 행의 수: ON 절에서 필터링하는 경우, 조인 조건이 먼저 적용되므로 조건에 맞는 행만 조인됩니다. WHERE 절에서 필터링하는 경우, 모든 조인된 결과에서 조건을 적용하므로 더 많은 행이 처리될 수 있습니다.
  2. 성능 최적화: 조인 조건이 복잡한 경우, ON 절에서 필터링하면 성능이 더 좋을 수 있습니다. 이유는 조인할 때 조건이 적용되어 불필요한 조인을 방지할 수 있기 때문입니다.

요약하면, 정확한 결과를 얻으려면 ON 절을 사용하여 필터링하는 것이 좋습니다. 이를 통해 조인 조건이 먼저 적용되고, 결과 집합이 필터링됩니다.

반응형

'낙서장[1] > 94. DataBase' 카테고리의 다른 글

[DataBase] 조인 SQL문  (0) 2025.01.24