select a, b, c from a left outer join b on (a.고객번호 in (11000, 12000) AND a.단말기id = b.단말기id) left outer join c ON (b.osid= c.osid)
이 쿼리는 SQL에서 세 개의 테이블 (`a`, `b`, `c`)을 `LEFT OUTER JOIN`을 사용하여 조인하는 예제입니다. 각 조인 조건을 해석하고, 쿼리의 결과를 이해하기 위해 설명하겠습니다.
### 쿼리 구조
```sql
SELECT a.a, a.b, a.c
FROM a
LEFT OUTER JOIN b ON (a.고객번호 IN (11000, 12000) AND a.단말기id = b.단말기id)
LEFT OUTER JOIN c ON (b.osid = c.osid);
```
### 쿼리 분석
#### 1. **`LEFT OUTER JOIN`의 역할**
- **`LEFT OUTER JOIN`**은 조인 조건에 맞는 데이터는 물론이고, 조건에 맞지 않는 경우에도 왼쪽 테이블 (`a`, `b`)의 모든 행을 포함합니다.
- 만약 오른쪽 테이블 (`b`, `c`)에서 조인 조건을 만족하는 행이 없다면, 해당하는 오른쪽 테이블의 열 값은 `NULL`로 반환됩니다.
#### 2. **첫 번째 `LEFT OUTER JOIN`**
```sql
LEFT OUTER JOIN b ON (a.고객번호 IN (11000, 12000) AND a.단말기id = b.단말기id)
```
- `a` 테이블과 `b` 테이블을 `LEFT OUTER JOIN`합니다.
- 조건은 다음과 같습니다:
- `a.고객번호`가 `11000` 또는 `12000`에 포함되어야 합니다.
- `a.단말기id`와 `b.단말기id`가 일치해야 합니다.
- 이 조인에서는 `a` 테이블의 모든 행이 유지되며, 조건에 맞는 `b` 테이블의 데이터가 포함됩니다.
- 만약 조건에 맞는 `b` 테이블의 데이터가 없다면, `b` 테이블의 열들은 `NULL`로 채워집니다.
#### 3. **두 번째 `LEFT OUTER JOIN`**
```sql
LEFT OUTER JOIN c ON (b.osid = c.osid)
```
- 이제 `b` 테이블과 `c` 테이블을 `LEFT OUTER JOIN`합니다.
- 조건은 `b.osid`와 `c.osid`가 일치해야 합니다.
- 이 조인에서도 `b` 테이블의 모든 행이 유지되며, 조건에 맞는 `c` 테이블의 데이터가 포함됩니다.
- 만약 조건에 맞는 `c` 테이블의 데이터가 없다면, `c` 테이블의 열들은 `NULL`로 채워집니다.
### 결과
- 쿼리의 최종 결과는 `a` 테이블의 모든 행이 포함되며, `b` 테이블과 `c` 테이블에서 조건에 맞는 행이 있다면 그 데이터가 함께 포함됩니다.
- 조건에 맞지 않는 `b` 또는 `c` 테이블의 데이터는 `NULL`로 표시됩니다.
### 예시를 통해 이해하기
#### 가정된 데이터
- **a 테이블**:
| 고객번호 | 단말기id | a |
|----------|----------|---|
| 11000 | 001 | A1|
| 13000 | 002 | A2|
| 12000 | 003 | A3|
- **b 테이블**:
| 단말기id | osid | b |
|----------|------|---|
| 001 | 10 | B1|
| 002 | 20 | B2|
| 003 | 10 | B3|
- **c 테이블**:
| osid | c |
|------|---|
| 10 | C1|
| 20 | C2|
| 30 | C3|
#### 실행 결과
- 첫 번째 조인에서 고객번호가 `11000` 또는 `12000`이고, `단말기id`가 일치하는 경우만 조인됩니다.
- 그 결과 `A1`과 `A3`의 행이 조인되며, `B1`과 `B3`의 데이터가 포함됩니다.
- 두 번째 조인에서 `b.osid`와 `c.osid`가 일치하는 경우 `c` 테이블의 데이터가 포함됩니다.
| a | b | c |
|----|----|----|
| A1 | B1 | C1 |
| A3 | B3 | C1 |
### 요약
- **`LEFT OUTER JOIN`**은 왼쪽 테이블의 모든 행을 유지하며, 오른쪽 테이블에서 조건에 맞는 데이터를 가져옵니다.
- 이 쿼리에서는 특정 고객번호와 단말기 ID에 따라 `a`와 `b` 테이블이 조인되고, 이어서 `osid`에 따라 `b`와 `c` 테이블이 조인됩니다.
- 조인 조건을 만족하지 않는 오른쪽 테이블의 값들은 `NULL`로 반환됩니다.
'Data Analysis 데이터 분석 > SQL 통한 Database 관리' 카테고리의 다른 글
select count(*) CNT from EMP_TBL A, RULE_TBL B where A.Ename like B.Rule (0) | 2024.08.20 |
---|---|
inner join (0) | 2024.08.20 |
레코드 와 칼럼 차이 (0) | 2024.08.20 |
UNION ALL`과 `NOT EXISTS (0) | 2024.08.20 |
where not exists (0) | 2024.08.20 |