SQL 통한 Database 관리

join, cross join, natural join

JBS 12 2024. 8. 19. 00:19

SQL에서 `JOIN`, `CROSS JOIN`, `NATURAL JOIN`은 여러 테이블을 결합할 때 사용하는 연산자입니다. 각각의 연산자는 서로 다른 방식으로 테이블을 결합합니다.

### 1. **`JOIN` (INNER JOIN)**

**`JOIN`** 또는 **`INNER JOIN`**은 두 테이블 간의 공통된 값이 있는 행만 반환합니다. 기본적으로 `JOIN`은 두 테이블에서 일치하는 행만 결과에 포함됩니다.

**구문:**
```sql
SELECT columns
FROM table1
JOIN table2
ON table1.column = table2.column;
```

**예제:**
```sql
SELECT e.EmployeeID, e.EmployeeName, d.DepartmentName
FROM Employees e
JOIN Departments d
ON e.DepartmentID = d.DepartmentID;
```

- **`Employees`** 테이블과 **`Departments`** 테이블을 **`DepartmentID`** 컬럼을 기준으로 결합합니다.
- 공통된 **`DepartmentID`**가 있는 행만 결과에 포함됩니다.

### 2. **`CROSS JOIN`**

**`CROSS JOIN`**은 두 테이블의 모든 조합을 반환하는 연산자입니다. 즉, 두 테이블의 Cartesian Product를 생성합니다.

**구문:**
```sql
SELECT columns
FROM table1
CROSS JOIN table2;
```

**예제:**
```sql
SELECT e.EmployeeID, d.DepartmentName
FROM Employees e
CROSS JOIN Departments d;
```

- 이 쿼리는 **`Employees`** 테이블의 모든 행과 **`Departments`** 테이블의 모든 행을 조합하여 반환합니다.
- 결과는 두 테이블의 행 수를 곱한 만큼의 행을 가집니다.

### 3. **`NATURAL JOIN`**

**`NATURAL JOIN`**은 두 테이블 간의 공통된 컬럼을 자동으로 찾아서 일치하는 행을 반환합니다. **`NATURAL JOIN`**은 공통된 컬럼 이름이 동일한 경우에만 사용되며, 이를 기준으로 데이터를 결합합니다.

**구문:**
```sql
SELECT columns
FROM table1
NATURAL JOIN table2;
```

**예제:**
```sql
SELECT e.EmployeeID, e.EmployeeName, d.DepartmentName
FROM Employees e
NATURAL JOIN Departments d;
```

- **`Employees`** 테이블과 **`Departments`** 테이블에서 공통된 컬럼(예: `DepartmentID`)을 기준으로 결합합니다.
- 공통된 컬럼을 자동으로 찾아서 사용합니다.

### 요약

- **`JOIN` (INNER JOIN)**: 두 테이블의 일치하는 행만 반환합니다. 결합 조건을 명시적으로 지정합니다.
- **`CROSS JOIN`**: 두 테이블의 모든 행 조합을 반환합니다. Cartesian Product를 생성합니다.
- **`NATURAL JOIN`**: 공통된 컬럼을 기준으로 자동으로 결합합니다. 공통된 컬럼 이름이 필요합니다.

각 연산자는 특정 상황에 맞게 데이터를 결합하는 데 유용하며, 사용자의 요구와 데이터 구조에 따라 선택하여 사용합니다.

'SQL 통한 Database 관리' 카테고리의 다른 글

partition by  (0) 2024.08.19
connect by prior의 부모 자식 아는 법  (0) 2024.08.19
distinct a||b  (0) 2024.08.19
cust_dist()  (0) 2024.08.19
view v_tbl  (0) 2024.08.19