SQL에서 문자열 비교와 대소문자 구분 – LIKE, =, ILIKE의 차이점
SQL에서 문자열 비교와 대소문자 구분 – LIKE, =, ILIKE의 차이점
SQL에서 문자열을 비교할 때, 사용되는 연산자나 함수에 따라 대소문자 구분 여부가 달라질 수 있습니다. 이로 인해 예상치 못한 결과가 나올 수 있으므로, 문자열 비교 시 어떤 연산자를 사용해야 할지 정확히 이해하는 것이 중요합니다. 이 글에서는 SQL에서 LIKE, =, ILIKE의 차이점과 대소문자 구분에 대해 정리합니다.
1. =
연산자: 정확한 일치 비교
=
연산자는 두 문자열이 완전히 동일한지 비교할 때 사용됩니다. 이 연산자는 대소문자를 구분합니다. 즉, A
와 a
는 다른 값으로 간주됩니다.
예시:
SELECT * FROM users
WHERE username = 'JohnDoe';
위 쿼리는 username
이 정확히 'JohnDoe'인 경우만 반환합니다. 만약 johnDoe
나 JOHNDOE
가 있다면 결과에 포함되지 않습니다.
2. LIKE
연산자: 패턴 일치 비교
LIKE
연산자는 문자열의 일부분이 일치하는지 확인할 때 사용됩니다. 이때 대소문자 구분 여부는 사용하는 DBMS에 따라 다릅니다. 예를 들어, MySQL에서는 기본적으로 대소문자를 구분하지 않지만, PostgreSQL에서는 기본적으로 대소문자를 구분합니다.
예시:
SELECT * FROM users
WHERE username LIKE 'john%';
위 쿼리는 username
이 'john'으로 시작하는 모든 값을 반환합니다. MySQL에서는 'john'과 'John'이 모두 매칭될 수 있지만, PostgreSQL에서는 'john'만 매칭됩니다.
3. ILIKE
연산자: 대소문자 구분 없는 비교 (PostgreSQL 전용)
PostgreSQL에서는 ILIKE 연산자를 사용하여 대소문자를 구분하지 않고 문자열을 비교할 수 있습니다. 이 연산자는 LIKE
와 동일한 방식으로 패턴을 비교하지만, 대소문자를 무시합니다.
예시:
SELECT * FROM users
WHERE username ILIKE 'john%';
위 쿼리는 username
이 'john', 'John', 'JOHN' 등 어떤 형태든 'john'으로 시작하면 모두 매칭됩니다. 단, ILIKE는 PostgreSQL에서만 사용 가능하므로 다른 DBMS에서는 동작하지 않습니다.
실무 팁
- Oracle이나 SQL Server에서는 ILIKE가 지원되지 않기 때문에, 대소문자 무시 비교를 하려면 UPPER() 또는 LOWER() 함수를 함께 사용해야 합니다.
- 인덱스를 활용하고 싶다면 가공된 컬럼(예:
LOWER(username)
)에 대해 별도 인덱스를 생성해야 성능 저하를 방지할 수 있습니다.
예시 (Oracle 기준):
SELECT * FROM users
WHERE LOWER(username) = 'johndoe';
이렇게 하면 대소문자를 구분하지 않고 비교할 수 있습니다.
결론
SQL에서 문자열 비교 시 대소문자 구분 여부는 연산자와 DBMS에 따라 다릅니다. =
는 항상 구분하며, LIKE
는 DBMS에 따라 다르고, PostgreSQL에서는 ILIKE
로 대소문자 무시 비교가 가능합니다. 실무에서는 이러한 차이를 이해하고 상황에 맞는 비교 방식을 선택해야 합니다.
#sql #문자열비교 #like #ilike #대소문자구분 #sql기초
'SQL 기초 정리' 카테고리의 다른 글
실무에서 자주 쓰는 SQL 정규화 방법과 컬럼 분리 기준 정리 (0) | 2025.05.13 |
---|---|
SQL 연산자 총정리 – 산술, 비교, 논리, 문자열 연산자 한눈에 보기 (0) | 2025.04.14 |
뷰(View)와 테이블의 차이 – 언제 뷰를 쓰고 언제 테이블을 써야 할까? (0) | 2025.04.14 |
ORDER BY의 숨겨진 비용 – 정렬은 왜 성능을 떨어뜨릴까? (0) | 2025.04.13 |
IN 절 vs EXISTS 절 – 조건은 같아도 성능은 다르다 (0) | 2025.04.12 |