매일 SQLD 기출 문제 풀기 챌린지
문제 47.
CROSS JOIN과 NATURAL JOIN의 차이점에 대해서 잘못 설명한 것은?
① NATURAL JOIN은 테이블 간 동일한 이름을 가진 모든 칼럼들에 대해 조인을 수행한다.
② CROSS JOIN은 테이블 간 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 의미한다.
③ CROSS JOIN과 NATURAL JOIN은 WHERE절에서 JOIN조건을 걸 수 없다.
④ CROSS JOIN은 WHERE절에 JOIN조건을 추가할 수 있다.
해설해보기
■ CROSS JOIN
CROSS JOIN은 두 테이블 간의 Cartesian Product (카테시안 곱) 을 생성합니다.
즉, 첫번째 테이블의 모든 행과 두 번째 테이블의 모든 행을 조합하여 가능한 모든 조합을 생성합니다.
주로 특정 조건 없이 두 테이터 집합의 모든 가능한 조합을 생성할 때 사용됩니다.
예를들어, 테이블 A가 3개의 행을 가지고 있고, 테이블 B가 2개의 행을 가지고 있다면,
CROSS JOIN의 결과는 3*2 = 6 총 6개의 행을 가집니다.
■ NATUAL JOIN
NATURAL JOIN은 두 테이블 간에 이름이 같은 모든 컬럼에 대해 암시적으로 EQUAL(=) 조건을 적용하여 조인합니다.
즉, 두 테이블이 공통으로 가지고 있는 컬럼을 자동으로 찾아서, 그 값이 일치하는 행들을 조인합니다.
따라서
두 테이블 간에 명시적으로 조인 조건을 지정하지 않고 이름이 같은 컬럼을 기반으로 조인하고자 할 때 사용됩니다.
이는 테이블 간의 관계가 이미 명확하고, 동일한 이름의 컬럼을 기준으로 데이터를 매칭하고 싶을 때 유용합니다.
주의할 점은 반드시 두 테이블에 동일한 이름의 컬럼이 존재해야 한다는 것이며,
그 값이 일치하는 행들만 결과로 반환된다는 것 입니다.
예시와 함께 개념 이해하기
[ 테이블 : Employee ]
EmployeeID | EmployeeName | DepartmentID |
1 | 김철수 | 1 |
2 | 이영희 | 2 |
[ 테이블 : Departments ]
DepartmentID | DepartmentName |
1 | 인사 |
2 | 개발 |
■ CROSS JOIN 예시
Employees 와 Departments 테이블 간의 CROSS JOIN 쿼리는 다음과 같습니다.
SELECT *
FROM Employees
CROSS JOIN Departments;
EmployeeID | EmployeeName | DepartmentID | DepartmentID | DepartmentName
-----------|--------------|--------------|--------------|----------------
1 | 김철수 | 1 | 1 | 인사
1 | 김철수 | 1 | 2 | 개발
2 | 이영희 | 2 | 1 | 인사
2 | 이영희 | 2 | 2 | 개발
결과에서 확인할 수 있듯이, 두 테이블 간의 모든 가능한 조합이 결과로 나타납니다.
■ NATUAL JOIN 예시
Employees 와 Departments 테이블 간의 NATURAL JOIN 쿼리는 다음과 같습니다.
SELECT *
FROM Employees
NATURAL JOIN Departments;
두 테이블 간에 이름이 동일한 컬럼이 자동 조인이 조건이기 때문에
동일한 컬럼인 DepartmentID 가 사용되었습니다.
EmployeeID | EmployeeName | DepartmentID | DepartmentName
-----------|--------------|--------------|----------------
1 | 김철수 | 1 | 인사
2 | 이영희 | 2 | 개발
DepartmentID가 자동 조인되어, 해당 컬럼을 기준으로 각 직원이 속한 부서의 정보가 함께 표시됩니다.
문제 해설해보기
위의 설명에 따르면, 1번과 2번은 참입니다.
3번과 4번의 참 거짓을 판단하기 위해서는 두 JOIN 기법이 WHERE 절에 조건을 추가할 수 있는지 여부를 알아야 합니다.
NATUAL JOIN의 경우 조인 조건을 명시적으로 지정할 수 없지만,
CROSS JOIN의 경우 WHERE절을 사용하여 추가 조건을 적용할 수 있습니다.
3번은 거짓, 4번은 참이기 때문에
정답은 ③ 번입니다.
관련 스크립트
# EMPLOYEES 테이블
CREATE TABLE Employees (
EmployeeID NUMBER PRIMARY KEY,
EmployeeName VARCHAR2(100),
DepartmentID NUMBER
);
INSERT INTO Employees (EmployeeID, EmployeeName, DepartmentID) VALUES (1, '김철수', 1);
INSERT INTO Employees (EmployeeID, EmployeeName, DepartmentID) VALUES (2, '이영희', 2);
# Departments 테이블
CREATE TABLE Departments (
DepartmentID NUMBER PRIMARY KEY,
DepartmentName VARCHAR2(100)
);
INSERT INTO Departments (DepartmentID, DepartmentName) VALUES (1, '인사');
INSERT INTO Departments (DepartmentID, DepartmentName) VALUES (2, '개발');
'SQL 문제 풀기 > 2. SQLD 기출 : 2024.3.01~2024.4.25' 카테고리의 다른 글
<SQLD 49> Order by 에 대한 기출문제 (1) | 2024.04.18 |
---|---|
<SQLD 48> 레포팅 함수에 대한 기출문제 (0) | 2024.04.17 |
<SQLD 46> Order by에 대한 기출문제 (0) | 2024.04.15 |
<SQLD 45> 데이터 분석함수에 대한 기출문제 (2) | 2024.04.14 |
<SQLD 44> 조인에 대한 기출문제 (0) | 2024.04.13 |