Mysql&DBeaver

DBeaver)LIKE, %, _ 연산자로 간단하게 검색가능

연습노트 2024. 9. 6. 13:07

WHERE 조건식 자리에는 = > < 이런거 넣을 수 있다고 했는데

LIKE 도 넣을 수 있습니다. 그거 쓰면 원하는 단어 검색이 가능합니다.

 

 

 

 

 

 

 

특정 단어가 들어있는지 검색하려면 LIKE

 

저번시간에 만든 테이블에서 계속 진행해볼 것인데  

저기서 상품명이 '소파'가 들어있는걸 찾고 싶다면 WHERE 조건식에서 LIKE 문법 사용하면 됩니다. 

 

SELECT * FROM product
WHERE 상품명 LIKE '소파' 

WHERE 뒤에 컬럼명 LIKE '값' 이런 식으로 작성하면 됩니다.

LIKE 뒤에 검색어를 적으면 그 글자만 정확히 들어있는 행만 찾아주는데 그럼 아무 쓸데없겠죠?

그래서 % 기호를 붙입니다.

 

 

 

SELECT * FROM product
WHERE 상품명 LIKE '%소파%' 

% 기호는 아무글자라는 뜻입니다. 전문용어로 와일드카드라고 합니다. 

그래서 위 처럼 작성하면 '아무글자 + 소파 + 아무글자' 조합에 일치하는 행을 전부 찾아줍니다. 

 

 

 

 

 

▲ 실행해보면 진짜임 

 

 

 

 

SELECT * FROM product
WHERE 상품명 LIKE '소파%' 

이건 뭐게요?

'소파 + 아무글자' 찾으라는 뜻입니다. 

그럼 소파로 시작하는 상품명만 찾아줍니다. 

 

 

 

SELECT * FROM product
WHERE 상품명 LIKE '%소파' 

이건 뭐게요?

여러분이 생각하는 그거 맞으니까 알아서 실험해보고 유추해봅시다. 

 

 

 

(참고)

- 문자검색 문법이라 문자가 저장된 컬럼에서만 검색가능합니다. 

- CHAR(6) 데이터타입의 경우 총 6자를 저장할 수 있는데 4자만 입력해도 나머지 뒷부분 2자를 공백으로 꽉 채워줍니다.

예를 들어서 '가죽소파'를 저장해도 '가죽소파  ' 이렇게 저장됩니다.

그래서 CHAR 컬럼은 % 써서 검색시 의도와 다르게 동작할 수 있습니다. 

'%소파' 이렇게 검색해도 '가죽소파  ' 이건 못찾음 

 

 

 

 

 

 

%말고 _ 기호도 있음

 

%이건 아무글자를 뜻하는데 _ 이것도 아무글자를 뜻합니다.

차이점이 있는데 

% 이건 아무글자인데 글자수 제한이 없습니다. (0자도 포함)

근데 _ 이건 아무글자 1개를 뜻합니다.

그래서 정확히 글자수까지 포함해서 검색하고 싶으면 _ 쓰면 됩니다. 

 

 

 

SELECT * FROM product
WHERE 상품명 LIKE '__소파' 

이러면 '아무글자2개 + 소파' 가 포함된 행만 찾아줍니다. 뭐나오나 확인해봅시다.

 

 

 

 

 

 

 

하지만 좋다고 % 기호 많이 쓰면 성능저하가 일어날 수 있습니다.

OR, 등호, 부등호 쓰는게 가능한 경우 사용하도록 합시다. 

%쓰면 인덱스 활용을 많이 못해서 찾을 때 오래걸리는 건데 자세한건 인덱스 원리 배울 때 알아봅시다. 

 

 

 

 

(오늘의 숙제)

Q1. 'Green'으로 시작해서 'chair'로 끝나는 상품명을 검색하려면? 

SELECT * FROM newtable WHERE 상품명 LIKE 'Green%chair' 

'Green % chair' 이렇게 써도 되는데 공백 넣으면 진짜로 공백도 검색해줍니다.

[collapse]

 

 

 

 

Q2. 위처럼 상품명에 '소파' 가 들어있거나 'chair'가 들어있는 모든 상품을 검색해봅시다. 

(힌트) 또는~은 영어로 OR 입니다. 

조건이 많아서 어렵다고요?

문제에 조건이 몇개 있는지 부터 파악하고 그걸 그대로 조건식으로 옮기기부터 하면 쉽습니다. 

 

문제에 조건이 2개 들어있습니다. 

1. 상품명에 '소파'가 포함 2. 상품명에 'chair'가 포함이어야 합니다.

그럼 2개 전부 조건식으로 작성부터 하면 되는 겁니다. 

 

상품명 LIKE '%소파%'

상품명 LIKE '%chair%'

이거 2개 넣으면 되겠군요

3. 근데 조건식을 여러개 넣고 싶으면 AND OR 이런걸로 연결하면 된댔으니까 그거 쓰면 됩니다. 

 

 

SELECT * FROM newtable WHERE 상품명 LIKE '%소파%' OR 상품명 LIKE '%chair%' 

OR로 연결해봤습니다. 

그럼 %소파%가 들어있거나 %chair%가 들어있으면 전부 가져옵니다.  

[collapse]

 

 

 

 

Q3. 상품명에 '소파'가 들어있는데 '나무'는 들어있지 않은 모든 상품을 검색해봅시다. 

SELECT * FROM newtable WHERE 상품명 LIKE '%소파%' AND NOT 상품명 LIKE '%나무%' 

 

문제에 조건이 2개 들어있습니다. 

1. 상품명에 소파가 포함 2. 상품명에 나무는 미포함이어야 합니다.

그럼 2개 전부 조건식으로 작성부터 하면 되는 겁니다. 

3. 조건식 2개를 둘 다 만족하는걸 찾아야하니까 AND로 연결하면 됩니다.