[DBMS 데이터베이스 포스팅 링크 목차]
안녕하세요. 양햄찌 블로그 입니다.
오늘은 아주아주 기본적인 SQL문 중, LIKE절 사용법에 대해 알아보려고 해요.
LIKE절이란?
특정 문자 또는 문자열을 포함하고 있는 값을 검색하고 싶을 때 사용합니다.
%기호는 wild문자로 0개 이상의 문자열과 대치돼요.
즉 위의 쿼리로 수행할 경우, [컬럼]이 0개 이상의 문자열 사이에 특정 빨간 문자열이 있을 경우, 해당 레코드를 뽑아 특정 원하는 컬럼들을 조회한다는거죠~
참고로 LIKE절의 부정은 NOT LIKE 입니다.
LIKE 절의 와일드 문자
두 개밖에 없어요. ㅎㅎ
와일드문자 | 의미 |
% | 0개 이상의 문자열과 대치 |
_ | 임의의 한 개의 문자와 대치 |
간단하죠..?
LIKE 사용 예시
똑같이 전에 깔았던 employees데이터를 활용해서 몇 가지 실습을 진행해볼게요
이렇게 데이터가 구성되어 있습니다.
[시작 문자 검색하기]
SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE FIRST_NAME LIKE 'A%'
성(FIRST_NAME)이 A로 시작하는 조건을 만족하는 레코드의 FIRST_NAME과 LAST_NAME의 값을 뽑아줘~
잘 뽑힌 것을 확인 할 수 있습니다.
[끝에 문자열 검색하기]
SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
where UPPER(FIRST_NAME) like '%NA'
이번엔 끝에 비교~ 걍 넘 똑같으면 재미없으니 UPPER를 써봤어요.
NA로 끝나는 성(FIRST_NAME)을 가진 레코드의 성과 이름을 뽑았습니다.
여기서 사용한 UPPER 함수는 소문자를 대문자로 바꿔주는 함수예요.
[특정 위치부터 검색하기]
SELECT first_name, last_name
FROM employees
WHERE last_name LIKE '__a%'
요건 이름의 세 번째 문자가 a인 모든 사원이 성+이름을 표시하는쿼리가 되겠죠?
[AND조건으로 검색하기 ( 두 문자열 모두 가지고 있을 경우) ]
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%' and last_name LIKE '%e%'
이름에 a와 e 문자를 가진 모든 사원의 이름을 표시하는 쿼리입니다.
[특정 위치에 여러개의 문자가 해당하는 경우 추출]
그럼 만약 첫 번째 문자가 a,b,c,d,e 다섯 개 중에 하나라도 속하면 결과로 뽑고 싶을 땐 어떻게 해야할까요?
where last_name like 'a%' or last_name like 'b%' or last_name like 'c%' .... 이렇게 할 수도 있겠지만..?
이건 너무 길잖아요?
SELECT last_name
FROM employees
where substr(last_name, 1, 1) in ( 'a', 'b', 'c', 'd', 'e')
그럴 경우 이처럼 substr을 사용해서 표현할 수 있습니다.
[이스케이프 문자] %나 _ 가 들어갔는지 검색하고 싶을 땐 어떻게 해?
와일드 문자를 그대로 하나의 문자처럼 검색하고 싶을 경우가 있을 수 있어요.
그럴 경우 ESCAPE 키워드를 이용해주면 검색할 수 있습니다. 이스케이프 문자임을 나타내기 위한 역할의 임시 와일드 문자를 지정해줘야 해요.
ESCAPE뒤에 이스케이프 와일드 문자를 지정할 수 있어요.
그럼 해당 문자 뒤에 나오는 문자는 무조건 문자 그대로 인식하게 됩니다.
원래 _가 와일드 문자로써 '임의의 한 개의 문자와 대치된다'라는 역할을 하지만
위에 이스케이프 문자로 지정해준 @ 바로 뒤에 나오는 '_'의 경우 그냥 '_'로써 인식되어
JOB_ID 값에서 '_'문자를 가진 레코드들을 출력해라 라는 뜻의 쿼리가 됩니다.!
테스트를 해볼게요
쿼리 수행 전...
select JOB_ID
from employees
where JOB_ID like '%#___' ESCAPE '#';
뒤의 두 '_'는 와일드 문자로 작용하고 뒤의 세 번째 '_'는 문자 그대로로 적용되므로
뒤에서 3번째 글자가 '_'인 것을 추출하라는 뜻이 되는거죠.
잘 수행된 것을 볼 수 있어요.
더 나아가, REGEXP_LIKE 예고
특정 컬럼이 A라는 특정 문자열이 들어가 있을 경우 뿐만아니라 B라는 문자열이 들어가 있을 때도 뽑고 싶을 수 있잖아요. 즉 특정 컬럼이 여러 LIKE 조건 중 하나에 해당되면 뽑고 싶을 수 있어요. 마치 LIKE 와 IN의 조합이랄까.
그런데 이런 명령어 조합은 지원되지 않습니다. 즉 잘못된 쿼리예요.
이와 같은 기능은 REGEXP_LIKE라는 함수로 구현할 수 있습니다.
REGEXP_LIKE가 궁금하신 사람들은 아래 포스팅을 참고해주세요!
▼REGEXP_LIKE 포스팅: https://jhnyang.tistory.com/292
[SQL] REGEXP_LIKE 사용법 알아보기 - LIKE와 IN을 합한 것과 같은 함수, 여러 패턴에 속하는 조건 추출��
안녕하세요 ㅎㅎ 양햄찌 블로그 주인장입니다 오랜만에 데이터베이스 쿼리 관련 포스팅을 들고 왔어요. ■ REGEXP_LIKE 알아보기~ 오늘 알아볼 함수는 REGEXP_LIKE 입니다. regexp는 정규식이라는 뜻이��
jhnyang.tistory.com
오늘 포스팅은 여기까지입니다. 도움이 되셨다면 공감 어떤가요?
오늘 하루도 고생많으셨습니다 :)
'별걸다하는 IT > 데이터베이스 Database' 카테고리의 다른 글
오라클 오렌지 SQL 맨 끝에 세미콜론(;) 안붙여도 실행되게 설정하기, 세미콜론아닌 엔터단위로 실행 (2) | 2020.09.18 |
---|---|
[데이터베이스 SQL] 조인 join 질의법. 서로 다른 테이블에서 컬럼 값이 같은 행 추출하기, 테이블 연결지어 조건 검색하기 (이너조인 innerjoin) (9) | 2020.09.03 |
[DBMS] 오라클 SQL DEVELOPER 디벨로퍼 단축키 정리~! (0) | 2020.08.27 |
[오라클, MySQL] 컬럼을 그룹지어 통계를 파악하자. group by와 having절 사용법, 사용 가능 대표 집계함수, 특징 (0) | 2020.07.22 |
[오라클, MySQL] comment 코멘트 추가/수정/조회하기, 테이블과 컬럼에 주석달고 확인하는 쿼리문 (2) | 2020.07.20 |
최신 댓글