Oracle

Oracle 비교 연산자와 LIKE, NOT LIKE

우아개발자 2023. 11. 10.

Oracle 비교 연산자에 대해 알아보도록 하겠습니다. Oracle 비교 연산자는 MySQL이랑 크게 달라진 점은 없습니다. 비교연산자를 정리한 표를 함께 올리도록 할게요.

연산자 설명
= 같다
>.< 크다/작다
>=,=< 크거나 같다 / 작거나 같다
<>,!=,^= 같지 않다
BETWEEN AND 특정 범위에 포함되는지 비교
LIKE / NOT LIKE 문자 패턴 비교
IS NULL / IS NOT NULL NULL 여부 비교
IN / NOT IN 비교 값 목록에 포함/미포함 되는지 여부 비교

 

* 연산자에 대한 예시문과 설명은 생략합니다. 연산자에 대한 내용은 MySQL 카테고리를 참고해 주세요.

 

저는 사실 비교연산자를 할 때 기준점을 헷갈려서 자주 틀리고는 하는데요. 자주 헷갈리는 만큼 실수를 덜 해야겠지만, 여러분들에게도 조심해야 할 것 몇 가지를 알려드릴게요.

LIKE

 

제가 가장 많이 틀리는 것은 LIKE 구문을 사용할 때인데요. 어떤 특정한 문자열을 가진 데이터를 추출하고자 할 때, WHERE문에 LIKE를 사용하는데, (_)를 사용하느냐 %를 사용하느냐에 따라서 결괏값이 다르게 추출되는데, 이를 자꾸 깜빡하고 (%)를 넣을 곳에 _을 입력하고는 한답니다. 그래서 정리하는 LIKE 비교 연산자에 대해 알아보도록 할게요.

본론

1. LIKE  패턴 값은 (% : 모든 문자) (_ 한 글자)

LIKE은 와일드카드 문자와 특수문자가 동일한 경우 어떤 것을 패턴으로 결정하는지 구분하지 못하기 때문에 데이터로 처리할 와일드카드 문자 패턴 기호 앞에 임의의 특수 문자를 사용하고 ESCAPE OPTION으로 등록하여 처리하는 것을 말합니다. 

SELECT * FROM 테이블명 WHERE 컬럼명 LIKE '패턴'

위의 구문을 정리했으면, 이제 예시를 한 번 만들어 보도록 하겠습니다.

create table drinktable(

    id varchar(30),
    menu varchar(30),
    time varchar(30)

);

이렇게 LIKE에, 테이블을 넣어줄 텐데요. 미리 제가 작성한 테이블이 1에 저장이 되어있고,  그 이후로 값들을 넣어줄 겁니다. LIKE 함수를 이용해서 값을 찾아보기도 하고, 바꿔보기도 해 보겠습니다.

insert into drinktable(id,menu,time) 
values('박미미','아메리카노','2023-11-10 AM11:49');
insert into drinktable(id,menu,time) 
values('김병인','카라멜마끼아또','2023-11-10 AM11:49');
insert into drinktable(id,menu,time) 
values('진사랑','콜드브루','2023-11-10 AM11:49');
insert into drinktable(id,menu,time) 
values('한이별','콜드브루라떼','2023-11-10 AM11:49');

 

(1) '% 값%' : 앞뒤에 어떤 글자가 오던지 "이"라는 글자가 들어간 사람을 조회해 줘

SELECT * FROM drinktable
WHERE id
LIKE '%이%';

(2) '% 값'으로 끝나는 글자는 모두 출력해 줘

SELECT * FROM drinktable

WHERE MENU

LIKE '%루';

(3) '_값' 세 번째가 "브루로" 끝나는 글자는 모두 출력해 줘

SELECT * FROM drinktable

WHERE menu LIKE '__브루%';

 

 

2. NOT LIKE : 비교하려는 값이 지정한 특정 패턴을 만족하면 TURE로 리턴하는 연산자

NOT LIKE는 위의 자료와는 반대의 개념이라고 생각하면 좋을 텐데요. 내가 입력했던 값을 조회하려고 할 때 쓰는 것이 아닌 어떤 값을 가지고 있지 않는 데이터를 보고 싶을 때 사용한다고 생각하면 될 듯싶습니다.

 

예를 들면 아래와 같이 말이죠. 그저 사용하던 구문에서 NOT만 추가해 주면 되는데요. 위의 자료에서는 프루라는 값을 언더바로 이용해서 출력했을 때는, 세 번째 글자에서 브루라는 이름을 가진 콜드브루들이 출력이 되었지만

 

NOT을 넣으니 세 번째 글자에서 브루라는 글자가 없는 것을 출력하는 것을 볼 수 있습니다.

SELECT * FROM drinktable

WHERE MENU NOT LIKE '__브루%';

결론

조회하고 싶은 값이 있을 때는 SELECT * FROM으로 묶지 말고, 조회 값을 설정하면 됩니다.

이러한 자료들은 게임으로 비유해 본다면 튜토리얼의 느낌이 강한데요. 사실 실제 문제들은 이렇게 간단하지 않습니다. 코딩테스트나 자격증 시험도 마찬가지고요.

 

일정한 조건의 값을 줄텐데, 그 조건의 값을 계산하고, JOIN 한 뒤 조건 값이 만족하면, 그 뒤로 몇 번째 글자에서 무엇을 추출해라라는 문제가 나올 텐데요. 제가 이 포스팅에서 작성한 것은 SELECT * FROM으로 한 번에 조회되게끔 작성했지만, 조회하고자 하는 값을 SELECT에 입력해 주길 바랍니다.

댓글