SQL 통한 Database 관리

like연산자

JBS 12 2024. 8. 20. 19:06

`LIKE` 연산자는 SQL에서 문자열 패턴 매칭을 수행할 때 사용됩니다. 주로 `WHERE` 절과 함께 사용하여, 특정 패턴과 일치하는 문자열을 검색합니다. `LIKE` 연산자는 와일드카드 문자와 함께 사용되어 다양한 패턴을 정의할 수 있습니다.

### 기본 문법

```sql
SELECT column_name
FROM table_name
WHERE column_name LIKE pattern;
```

### 와일드카드 문자

- **`%`**: 0개 이상의 문자와 일치합니다.
- **`_`**: 정확히 1개의 문자와 일치합니다.

### 사용 예제

#### 1. **`%` 와일드카드**

- **패턴의 시작 부분이 'A'로 시작하는 문자열 찾기**:

  ```sql
  SELECT name
  FROM employees
  WHERE name LIKE 'A%';
  ```

  - 이 쿼리는 `name`이 'A'로 시작하는 모든 문자열을 검색합니다. 예를 들어, 'Alice', 'Alan' 등이 포함됩니다.

- **패턴의 끝 부분이 'son'으로 끝나는 문자열 찾기**:

  ```sql
  SELECT name
  FROM employees
  WHERE name LIKE '%son';
  ```

  - 이 쿼리는 `name`이 'son'으로 끝나는 모든 문자열을 검색합니다. 예를 들어, 'Johnson', 'Mason' 등이 포함됩니다.

- **문자열에 'an'이 포함된 경우**:

  ```sql
  SELECT name
  FROM employees
  WHERE name LIKE '%an%';
  ```

  - 이 쿼리는 `name`에 'an'이 포함된 모든 문자열을 검색합니다. 예를 들어, 'Janet', 'Nathan' 등이 포함됩니다.

#### 2. **`_` 와일드카드**

- **패턴의 2번째 위치에 'a'가 있는 문자열 찾기**:

  ```sql
  SELECT name
  FROM employees
  WHERE name LIKE '_a%';
  ```

  - 이 쿼리는 `name`의 두 번째 위치에 'a'가 있는 모든 문자열을 검색합니다. 예를 들어, 'Jack', 'Carol' 등이 포함됩니다.

- **정확히 5자 길이의 문자열 찾기**:

  ```sql
  SELECT name
  FROM employees
  WHERE name LIKE '_____';
  ```

  - 이 쿼리는 `name`이 정확히 5자로 구성된 모든 문자열을 검색합니다. 각 `_`는 하나의 문자를 나타냅니다.

### 대소문자 구분

- SQL 표준에서는 `LIKE` 연산자가 대소문자를 구분하지 않지만, 데이터베이스에 따라 다를 수 있습니다. Oracle에서는 기본적으로 대소문자를 구분하지 않습니다. 만약 대소문자를 구분하여 검색하고자 한다면, `BINARY` 키워드를 사용할 수 있는 데이터베이스에서 `COLLATE` 절을 사용할 수 있습니다.

### 예외 및 주의사항

- **`LIKE` 연산자는 패턴이 매우 긴 경우 성능에 영향을 줄 수 있습니다.** 인덱스가 효율적으로 사용되지 않을 수 있으므로, 대량의 데이터에서 `LIKE`를 사용하는 경우 성능이 저하될 수 있습니다.
- **특정 패턴에서 `LIKE`와 `=` 연산자를 비교**: `LIKE`는 패턴 매칭을 수행하며, `=`는 정확한 문자열 일치를 수행합니다.

### 요약

- `LIKE` 연산자는 문자열 패턴 매칭을 수행할 때 사용됩니다.
- `%` 와일드카드는 0개 이상의 문자와 일치하고, `_` 와일드카드는 정확히 1개의 문자와 일치합니다.
- `LIKE` 연산자는 문자열의 부분 일치를 검색하는 데 유용하며, 대소문자 구분 여부는 데이터베이스 설정에 따라 달라질 수 있습니다.

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

select nvl() from dual  (0) 2024.08.20
dual이 뭐니  (0) 2024.08.20
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
LEFT OUTER JOIN`  (0) 2024.08.20