SQL - WHERE, SQL연산자, 논리연산자

kimyeoju·2023년 7월 2일
0

SQL with PostgreSQL

목록 보기
5/5
post-thumbnail

1. SQL연산자

1.1 논리 연산

우선순위는 NOT, AND, OR입니다. and는 곱으로, or는 덧셈으로 이해하시면 계산이 쉽습니다. 뒤에서 나올 비교 연산자, WHERE 조건절을 미리 사용하였습니다. 비교 연산자는 같다(=), 다르다(!=), 크다(>), 작다(<)를 표현하는 연산자입니다.

SELECT true AND true; -> true
SELECT true AND false; -> false
SELECT true OR false; -> true
SELECT false OR false; -> false
SELECT NOT true; -> false
SELECT NOT false; -> true

  • AND - 모든 조건을 만족한 레코드를 조회합니다.
select * from users
where id < 10000
and first_name = 'cindy'

where 조건절 (and)

  • users에서 id가 10000보다 적으면서 first_name이 'cindy'인 user을 찾는 조건

  • OR - 조건을 하나라도 만족한 레코드를 조회 합니다.
  • OR - 조건을 하나라도 만족한 레코드를 조회 합니다.
select * from users
where age < 20
or age > 60

where 조건절(or)

  • users에서 age(나이)가 20보다 적거나 age(나이)가 60보다 많은 사람의 user을 찾는 조건
select * from users
where first_name = 'David'
and (age < 20 or age > 60)

where 조건절(and, or)

  • users에서 and 조건(첫번째 이름이 'David'이거나) or 조건(age(나이)가 20보다 적거나 age(나이)가 60보다 많은 사람)의 user을 찾는 조건

즉, 첫번째 이름이 'David'이면서 나이가 20보다 적거나 60보다 많은 user을 찾는 조건임을 알 수 있습니다.


  • NOT - 조건 값이 아닌 레코드를 조회합니다.
select * from users
where NOT(country = 'United States')

where 조건절(not)

  • country(나라)에서 'United States'가 아닌 user을 찾는 조건
select * from users
where NOT(country = 'United States' or country = 'Brasil');

where 조건절(not)

  • country(나라)에서 'United States'거나 'Brasil'이 아닌 user을 찾는 조건
    즉, 'United States' , 'Brasil'의 국가인 user은 해당이 되지 않습니다.

1.2 BETWEEN 연산

  • between A AND B : A와 B를 포함한 사이의 값
select * 
from users
where age between 20 and 30
select * 
from users
where age>=20 and age<=30

1월 가입한 유저를 조회하고 싶은 경우

select *
from users
where created_at between '2020-01-01' and '2020-02-01'

주의!
아래와 같은 경우, 2020-01-01 00:00:00 부터 2020-01-31 00:00:00 사이를 조회하기 때문에 2020-01-31일의 값은 조회할 수 없습니다.

select *
from users
where created_at between '2020-01-01' and '2020-01-31'

1.3 IN 연산

  • IN A : A안에 값과 일치하는 값을 조회
select * 
from products
where brand in ('Onia', 'Hurley', 'Matix');

1.4 LIKE 연산

  • LIKE '비교문자'
    1. 비교 문자와 형태가 일치(%(모든 문자), _(한 글자) 사용)
    2. 대소문자를 안가림
    3. %는 와일드카드

product의 name안에 Young이 포함된 레코드를 조회합니다.

select * 
from products
where name like '%Young%';

product의 name이 Hurley로 시작되는 레코드를 조회합니다.

select * 
from products
where name like 'Hurley%';

product의 name이 T-shirt 로 끝나는 레코드를 조회합니다.

select * 
from products
where name like '%T-shirt';

언더바는 한개의 글자를 포함합니다.

select distinct first_name
from users
where first_name like 'Da___'

언더바의 갯수가 3개이므로 Da로 시작하고 뒤에 3글자가 붙어서 총 5글자인 user 레코드를 조회합니다.

1.5 IS NULL

  • NULL 값을 갖는 값(0은 값이 있는 것입니다.)
select * 
from order_items
where shipped_at IS NULL;
select * 
from order_items
where shipped_at IS NOT NULL;
  • 참고!

NULL(빈 값) != 'NULL’(문자값) 서로 타입이 다르다→IS로 비교

SELECT ANIMAL_ID
from ANIMAL_INS 
where NAME = 'NULL'
order by ANIMAL_ID ASC
profile
노력형 백엔드 개발자 김여주입니다 !

0개의 댓글