SQL - 비교 연산자, 논리 연산자 : 데이터 취업 스쿨 스터디 노트 12/19

slocat·2023년 12월 19일
0

start-data

목록 보기
44/75

(참고) 연산자 우선순위

  • 1: unary + -
  • 2: ^ **
  • 3: * /
  • 4: + -
  • 5: = <> < <= > >= like not_like is_null is_not_null between in exists any all
  • 6: not
  • 7: and
  • 8: or

1. 비교 연산자

select age, name from celeb where age=29 order by age;
select age, name from celeb where age!=29 order by age;
select age, name from celeb where age>29 order by age;
select age, name from celeb where age>=29 order by age;

# <> : 같지 않다
select age, name from celeb where age<>29 order by age;
select sex, agency, name, age
from celeb
where age < 50
order by sex, agency desc, name;

2. 논리 연산자

2-1. AND : 조건을 모두 만족할 때 TRUE

select * from celeb where age=29 and sex='F';
select * from celeb where sex='M' and age>=30 order by age;

2-2. OR : 하나의 조건이라도 만족하면 TRUE

select * from celeb
where age<25 or age>30
order by age;
select * from celeb
where (age<29 and sex='F') or (age>30 and sex='M')
order by age, sex;
select * from celeb
where (agency='YG' or agency='namu') and age<30;
select * from celeb
where ((id % 2) = 1 and sex='M') or ((id % 2) = 0 and agency='YG')
order by agency;

2-3. NOT : 조건을 만족하지 않으면 TRUE

select * from celeb where not sex='F';
select * from celeb
where (agency='YG' and not sex='M') or (job_title='singer' and not agency='YG');
# 생일이 1990년 이후이면서 여자가 아닌 데이터
select * from celeb where birthday > 19891231 and not sex='F';

# 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터
select * from celeb where birthday < 19800101 and not agency='antenna';

2-4. BETWEEN : 조건 값이 범위에 있으면 TRUE

# 같은 결과
select * from celeb where age between 20 and 40;
select * from celeb where age >= 20 and age <= 40;
select * from celeb
where (not birthday between 19800101 and 19951231 and sex='F')
or (agency='YG' and not age between 20 and 45);

2-5. IN : 조건 값이 목록 안에 있으면 TRUE

select * from celeb where age in (28, 48);
# 소속사가 나무, 안테나, 울림이 아니면서, 성별이 여자이거나 나이가 45세 이상
select * from celeb
where not agency in ('namu', 'antenna', 'woollim')
and (sex='F' or age >= 45);

2-6. LIKE : 조건 값이 패턴에 맞으면 TRUE

# Y로 시작하는 소속사 이름을 가진 데이터
select * from celeb where agency like 'Y%';

# G로 끝나는 소속사 이름을 가진 데이터
select * from celeb where agency like '%G';

# 직업명에 singer가 포함된 데이터
select * from celeb where job_title like '%singer%';
# 소속사 이름의 두 번째 글자가 G인 데이터
select * from celeb where agency like '_G%';
select * from celeb where agency like '_g%';

# 소속사 이름의 세 번째 글자가 o인 데이터
select * from celeb where agency like '__o%';
# 직업명이 s로 시작하고 최소 2글자 이상인 데이터
select * from celeb where job_title like 's_%';

# 직업명이 singer로 시작하고 최소 7글자 이상인 데이터
select * from celeb where job_title like 'singer_%';
# 직업명이 a로 시작하고 l로 끝나는 데이터
select * from celeb where job_title like 'a%l';
# actor와 talent를 병행하는 데이터
select * from celeb
where job_title like '%actor%' and job_title like '%talent%';
# 직업이 둘 이상인 연예인 중 actor 또는 talent가 아닌 데이터
select * from celeb
where job_title like '%,%'
and not (job_title like '%actor%' or job_title like '%talent%');
# 소속사 이름이 두 글자인 데이터
select * from celeb
where agency like '__';
# 나이가 30세 이상 50세 이하면서 comedian이 아닌 데이터
select * from celeb
where age between 30 and 50 and not job_title like "%comedian%";

select * from celeb
where age between 30 and 50 and job_title not like "%comedian%";
# a, b, c, g 중에서
# 직업으로 singer만 가졌거나, singer를 병행하지 않고 talent 하는 데이터
select * from celeb
where name in ('a', 'b', 'c', 'g')
and (job_title = 'singer'
or (job_title not like '%singer%' and job_title like '%talent%'));

0개의 댓글