본문 바로가기
개발일지/임시카테고리

SQL 문장 작성 실수

by 다니엘의 개발 이야기 2022. 6. 25.
320x100

기본적으로 현재 강의로써 배우고 있는 SQL의 강의중 LIKE 파트에 관한 내용이 있었다.

 

#1 테이블 내용

+----+--------+------------+------+------+------------------+------------------+
| id | name   | birthday   | age  | sex  | job_title        | agency           |
+----+--------+------------+------+------+------------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트     | EDAM엔터테인먼트 |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수             | 울림엔터테인먼트 |
|  3 | 송강   | 1994-04-23 |   28 | M    | 탤런트           | 나무엑터스       |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테인먼트   |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나           |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테인먼트   |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테인먼트   |
+----+--------+------------+------+------+------------------+------------------+

 

#2 문제

아이유, 이미주, 송강, 이수현 중에서 직업이 가수만 있거나

가수를 하지 않는 탤런트를 찾는다. 라는 조건으로써 찾고자 했다.

일단 이 4명중 답이 나와야 했기 때문에 최대가 4명이 나와야 했다.

 

#3 시도 - 실패

 

 select* from celeb where
    -> name in ('아이유', '이미주', '송강','이수현') and
    -> (job_title = '가수' or (job_title !='가수' and job_title like '%탤런트%'));

 

이렇게 LIKE문으로써가 아니라 = 이나 != 같은 파이썬 기본연산으로 써줬다. 그랬더니 결과값으로 4명 모두가 나왔다.

 

#4 원인분석

구글링을 UPDATE 배울때 해보니, 나오는 내용중에 '%%'와 같은 내용은 LIKE 와 함께 쓰이는 거라고 하더라.

100% 신뢰하기엔 잘 모르겠지만, 어쨌든 신뢰도가 매우 높다.

때문에 %% 연산등은 LIKE가 아닌 =같은 연산과는 작동이 안되는 궁합이였던 것같다.

 

#5 결과 도출

 

select* from celeb where
    -> name in ('아이유', '이미주', '송강', '이수현') and
    -> (job_title ='가수' or (job_title not like '%가수%' and job_title like '%탤런트%'));

 

결국 이렇게 LIKE 문으로 수정을 해주고나서 비로소 값을 얻을 수 있었다.

300x250