일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- docker
- DevOps
- Kubernetes
- programmers
- 자바
- vuejs
- 알고리즘
- ORM
- Oracle
- k8s
- java
- 해시맵
- dabase
- CKA
- JPA
- Vue
- 프로그래머스
- builder-pattern
- SpringMVC
- cd
- CI/CD
- 코딩테스트연습
- CI
- Spring
- hibernate
- IntelliJ
- superBuilder
- Di
- map
- 뷰
- Today
- Total
문홍의 공부장
[Oracle] 다중 LIKE 연산자 - 정규표현식 (REGEXP_LIKE) 본문
오라클에서 WHERE 조건에 2개 이상의 값을 넣는 경우가 있다.
이 경우 OR 연산자를 써서 여러 조건을 추가할 수도 있지만,
SELECT * FROM EMPLOYEES WHERE LAST_NAME = 'King' OR LAST_NAME = 'Austin';
OR 연산의 반복을 피하기 위해 IN 연산자를 사용한다.
SELECT * FROM EMPLOYEES WHERE LAST_NAME IN ('King', 'Austin');
조건이 명확할 경우(EX) 이름이 '홍길동', '김영희' 인 데이터 찾기)에는 위의 방법으로 사용이 가능하지만, 특정 문자가 들어간 모든 데이터를 찾고자 할 경우(EX) 이름에 '홍'이 들어간 데이터 찾기)에는 이야기가 달라진다.
우선, 기본적으로 LIKE 연산자를 활용하여야 한다.
SELECT * FROM EMPLOYEES WHERE LAST_NAME LIKE '%ins%';
LIKE 연산자 역시 OR 를 반복하여 사용할 수 있다. 하지만, LIKE 연산자는 IN 연산자와 함께 사용할 수 없어, 다음과 같이 사용할 경우 구문 오류를 뱉어낸다.
이를 해결하기 위해 다중 LIKE 연산에는 REGEXP_LIKE(컬럼명, 정규식)을 사용한다.
파이프( | ) 를 이용해 단어를 구분하는데, 일반적으로 단어만 나열할 경우 LIKE '%ins%' 와 같은 효과를 얻을 수 있다.
SELECT * FROM EMPLOYEES WHERE REGEXP_LIKE (LAST_NAME, 'ins|Mar');
정규표현식을 사용하여 더 효율적인 검색도 가능하다. REGEXP_LIKE 외에도 정규표현식을 사용하는 연산자는 아래와 같다.
REGEXP_LIKE
REGEXP_INSTR
REGEXP_SUBSTR
REGEXP_REPLACE
REGEXP_COUNT : 특정 문자의 개수를 세는 함수
정규표현식 정리
1) '^pattern' : Pattern으로 시작하는 line 출력
SELECT * FROM EMPLOYEES WHERE REGEXP_LIKE (LAST_NAME, '^A|^B') order by LAST_NAME asc;
SELECT * FROM EMPLOYEES WHERE REGEXP_LIKE (LAST_NAME, '^a|^b', 'i') order by LAST_NAME asc; -- 대소문자 구분 없애기 위해 'i' 추가
2) 'pattern$' : Pattern으로 끝나는 line 출력
SELECT * FROM EMPLOYEES WHERE REGEXP_LIKE (LAST_NAME, 'a$|s$');
3) 'p....n' : p로 시작하여 n으로 끝나는 line
SELECT * FROM EMPLOYEES WHERE REGEXP_LIKE (LAST_NAME, 'M...s'); -- . = 1 character
4) '[a-z]*' : 모든 이라는 뜻. 글자수가 0일 수도 있음
5) '[Pp]attern' : Pattern에 해당하는 한 문자
6) '[^a-m]attern' : Pattern에 해당하지 않는 한 문자
References:
'개발 > Database' 카테고리의 다른 글
Database Index 에 관하여: Index 의 개념, 자료구조, 효율적인 인덱스 생성 전략 (DB Index) (0) | 2023.04.04 |
---|---|
[Oracle] IO 오류 - The Network Adapter could not establish the connection 해결 (2) | 2020.04.26 |
[Oracle] 오라클 기본키(PK) 2개 이상 지정하기 (1) | 2020.04.08 |
[DB] ORACLE 11g 설치 및 환경설정, sqldeveloper 계정 설정 (0) | 2020.02.11 |