본문 바로가기
SQL 문제 풀기/2. SQLD 기출 : 2024.3.01~2024.4.25

<SQLD 47> natural join에 대한 기출문제

by HYEHYE_SON 2024. 4. 16.
728x90

매일 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, '개발');

 
 
 

반응형