SQL 통한 Database 관리

select count(*) CNT from EMP_TBL A, RULE_TBL B where A.Ename like B.Rule

JBS 12 2024. 8. 20. 19:06

이 쿼리는 두 개의 테이블인 `EMP_TBL`과 `RULE_TBL`에서 특정 조건을 만족하는 레코드들의 개수를 세는 쿼리입니다. 이 쿼리가 수행하는 작업과 그 의미를 설명하겠습니다.

### 쿼리 분석

```sql
SELECT COUNT(*) AS CNT
FROM EMP_TBL A, RULE_TBL B
WHERE A.Ename LIKE B.Rule;
```

### 쿼리의 의미

1. **테이블 조인**:
   - `EMP_TBL`과 `RULE_TBL` 테이블이 조인됩니다.
   - 두 테이블 간에 `JOIN` 조건이 명시되어 있지 않지만, `WHERE` 절에 있는 `LIKE` 조건을 통해 암묵적인 조인이 이루어집니다.

2. **`LIKE` 연산자**:
   - `A.Ename LIKE B.Rule` 조건이 사용되었습니다.
   - `EMP_TBL` 테이블의 `Ename` 열의 값이 `RULE_TBL` 테이블의 `Rule` 열에서 지정된 패턴과 일치하는 경우에만 해당 레코드가 선택됩니다.
   - 예를 들어, `B.Rule`에 `%son`이라는 값이 있다면, `Ename`이 'Johnson', 'Mason' 등의 이름인 경우에만 선택됩니다.

3. **레코드 수 계산**:
   - 조건을 만족하는 레코드의 수를 `COUNT(*)`를 사용하여 계산합니다.
   - 결과로 반환되는 값은 `CNT`라는 별칭을 가지며, 조건을 만족하는 레코드의 총 수입니다.

### 결과

- 이 쿼리의 결과는 `EMP_TBL`의 `Ename` 열과 `RULE_TBL`의 `Rule` 열 사이에서 패턴 일치를 확인하고, 그 일치하는 레코드들의 총 개수를 계산합니다.
- 결과는 하나의 행으로 반환되며, 그 행의 값은 조건을 만족하는 레코드의 수를 나타냅니다.

### 주의사항

- **암시적 조인**: 이 쿼리는 암시적 조인을 사용하고 있습니다 (`FROM` 절에서 여러 테이블을 쉼표로 구분하여 사용). 일반적으로는 명시적 조인 (`INNER JOIN`, `LEFT JOIN` 등)을 사용하는 것이 더 명확하고 가독성이 좋습니다.
  
- **성능**: 만약 `RULE_TBL`에 패턴이 매우 많거나, `EMP_TBL`의 데이터가 방대하다면, 이 쿼리는 성능에 영향을 줄 수 있습니다. 패턴 매칭 작업은 계산이 많이 필요할 수 있기 때문입니다.

### 예시

만약 `RULE_TBL`에 다음과 같은 데이터가 있다고 가정해보겠습니다:

| Rule    |
|---------|
| A%      |
| B%      |
| %son    |

그리고 `EMP_TBL`에 다음과 같은 데이터가 있다고 가정해봅니다:

| Ename    |
|----------|
| Alice    |
| Bob      |
| Johnson  |
| Bryan    |
| Carla    |

이 경우, 쿼리는 다음과 같은 결과를 반환할 수 있습니다:

- `'Alice'`는 `'A%'` 패턴과 일치합니다.
- `'Bob'`은 `'B%'` 패턴과 일치합니다.
- `'Johnson'`은 `'%son'` 패턴과 일치합니다.
- `'Bryan'`은 `'B%'` 패턴과 일치합니다.

따라서 조건을 만족하는 레코드의 총 개수는 4가 될 수 있습니다.

이러한 방식으로 `LIKE` 연산자를 사용하여 문자열 패턴 매칭을 수행하고, 그 결과를 집계하는 것이 가능합니다.

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

dual이 뭐니  (0) 2024.08.20
like연산자  (0) 2024.08.20
inner join  (0) 2024.08.20
LEFT OUTER JOIN`  (0) 2024.08.20
레코드 와 칼럼 차이  (0) 2024.08.20