본문 바로가기
MYSQL

MYSQL - 원하는 조건을 '찾는' like, 중첩 and,둘 중 하나True or, 제외 not

by 하니__ 2024. 5. 14.
책 제목에 the가 들어있는 데이터를 가져와보자
책 제목이 the인거 가져오시오 와는 다르다
select *
from books
where title like '%the%';

일단 이렇게 작성되며
%%은
이렇게 해석된다
 
앞의 %는 앞에 무엇이 와도 상관없다
뒤의 %는 뒤에 무엇이 와도 상관없다
 
즉, 앞에 무엇이 있든 뒤에 무엇이 있든 the가 들어있는 데이터를 가져와라 라는 의미

 
 
만약 the로 시작하는 데이터를 가져오고 싶다 라면?
 

select *
from books
where title like 'the%';

앞에 무엇이 없어야 하니까 앞의 %를 빼주면 되겠다
 

2자리 숫자의 데이터만 가져와라

그럼 이번엔 이런 자료에서
stock_quantity의 데이터가 3자리 숫자도 2자리 숫자도 있다
이럴때 2자리 숫자의 데이터만 가져오려고 할때에는?
 
 

select *
from books
where stock_quantity like '__';

_ _ 2개를 입력하여 숫자 2자리를 가져오게한다
 

 
 

중첩 조건 and

 
pages 수는 100보다 크고, 책 제목에 the가 들어간 책을 가져오되
stock_quantity는 내림차순으로 데이터를 3개만 가져오자
 
라는 조건이라면 어떨까
 
일단 where에 페이지와 타이틀이 들어가야한다
그렇다면 조건1 & 조건2로 입력하자
 

select *
from books
where title like '%the%' and pages > 100
order by stock_quantity desc 
limit 3;

 

 
 

출판년도가 1990년에서 2015년 사이의 책을 가져오시오

위에서는 다른 컬럼의 다른 조건이었지만
이번엔 하나의 컬럼의 다른 조건이다

select *
from books
where released_year >= 1990 and
released_year <= 2015
order by released_year;

라고 쓸 수 있겠다
하지만
 
어릴적 배운 between a and b를 기억한다면?

select *
from books
where released_year between 1990 and 2015
order by released_year;

이렇게도 입력이 가능하다

 

둘 중 하나만이라도 True라면?

 
Eggers 나 Chabon이 쓴 책을 가져오시오
라는 지문이 있을때
lname에서
1번이 맞거나 2번이 맞는 경우 둘다를 나오게 하면 된다
그렇다면

select *
from books
where author_lname like 'Eggers' 
or author_lname like 'Chabon';

라고 중간에 or를 입력하여 둘 중 하나라도 맞는 경우는
나오도록 하자

 

select *
from books
where author_lname in ('Eggers','Chabon');

in ( )함수를 사용하여
해당 컬럼안에 찾는 것이 존재 하는 행들을 전부 가져오는것도 동일하다
 
 
 
 
 

단어 OO을 제외한 조건 찾기 not
select *
from books
where title like '%talk%';

라고 입력하여 제목에 talk가 있는 데이터들을 확인한 결과

 
하나만 나왔다면
 
그렇다면 이번엔 talk가 없는 데이터들만을 보고싶다면 어떻게 해야할까
 
like 앞에 not을 추가하자
 

select *
from books
where title not like '%talk%';