[SQL] 비교 연산자 / 논리 연산자

jane05·2023년 10월 29일
0
post-thumbnail

1️⃣ 비교 연산자

use zerobase;
desc celeb;
연산자의미
A = BA와 B가 같은
A > BA와 B보다 큰 (초과)
A < BA와 B보다 작은 (미만)
A >= BA가 B보다 크거나 같은 (이상)
A <= BA가 B보다 작거나 같은 (이하)
A <> BA가 B보다 크거나 작은 (같지 않은)
A != BA와 B가 같지 않은
  • (A <> B 와 A != B은 동일하다.)

  • 나이가 29세인 데이터 검색

select name, age
from celeb
where age=29
order by age;
  • 나이가 29세가 아닌 데이터 검색
select name, age
from celeb
where age!=29
order by age;
  • 나이가 29세 보다 큰 데이터 검색
select name, age
from celeb
where age>29
order by age;
  • 나이가 29세 보다 작은 데이터 검색
select name, age
from celeb
where age<29
order by age;
  • 나이가 29세 보다 크거나 같은 데이터 검색
select name, age
from celeb
where age>=29
order by age;
  • 나이가 29세 보다 작거나 같은 데이터 검색
select name, age
from celeb
where age<=29
order by age;
  • 나이가 29세 보다 크거나 작은 (같지 않은) 데이터 검색
select name, age
from celeb
where age<>29
order by age;

2️⃣ 논리 연산자

연산자의미
AND조건을 모두 만족하는 경우 TRUE
OR하나이 조건이라도 만족하는 경우 TRUE
NOT조건을 만족하지 않는 경우 TRUE
BETWEEN조건값이 범위 사이에 있으면 TRUE
IN조건값이 목록에 있으면 TRUE
LIKE조건값이 패턴에 맞으면 TRUE

1. AND

select *
from celeb
where age=29 AND sex='F';
select *
from celeb
where sex='M' AND  age>40
order by name;

2. OR

select *
from celeb
where age<25 OR age>30
order by age;
  • 나이가 29세 보다 작고 여자이거나, 나이가 30세 보다 크고 남자인 데이터를 나이와 성별 순으로 정렬하여 검색
select *
from celeb
where (age<29 AND sex='F')
OR (age>30 AND sex='M');
order by age, sex;
  • YG엔터테이먼트 소속이거나 나무엑터스 소속인 연예인 중, 나이가 30세 보다 작은 데이터를 검색
    - 괄호 중요!
select *
from celeb
where (agency='YG엔터테이먼트' or agency='나무엑터스')
and age<30;

3. NOT

  • 성별이 여자가 아닌 데이터 검색
select *
from celeb
where NOT  sex='F';
  • 소속사가 YG엔터테이먼트이면서 남자가 아니거나, 직업이 가수이면서 소속사가 YG엔터테이먼트가 아닌 데이터 검색
select *
from celeb
where (agency='YG엔터테이먼트' AND NOT sex='M')
OR (job_title='가수' AND NOT agency='YG엔터테이먼트');
  • 생일이 1990년 이후이면서 여자가 아니거나, 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터 검색
select *
from celeb
where (birthday > 19891231 AND NOT sex='F')
OR  (birthday < 19800101 AND NOT agency='안테나');

4. BETWEEN

  • 나이가 20세에서 40세 사이의 데이터 검색
select * from celeb where age BETWEEN 20 AND 40;
select * from celeb where age>=20 AND age<=40;
  • 생년월일이 1980년에서 1995년 사이가 아니면서 여자이거나,
    소속사가 YG엔터테이먼트이면서 나이가 20세에서 45세 사이가 아닌 데이터 검색
select * form celeb
where (NOT birthday BETWEEN 19800101 AND 19951231 AND sex='F')
OR (agency='YG엔터테이먼트' AND NOT age BETWEEN 20 AND 45);

5. IN

  • 나이가 28세, 48세 중 하나인 데이터 검색
select * from celeb where age IN (28, 48);
select * from celeb where age-28 OR age=48;
  • 소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서, 성별이 여자거나 나이가 45세 이상인 데이터 검색
select * from celeb
where NOT agency IN ('나무엑터스', '안테나', '울림엔터테이먼트')
AND (sex='F' OR age>=45);

6. LIKE

  • 'YG'로 시작하는 소속사 이름을 가진 데이터를 검색
select * from celeb
where agency LIKE 'YG%';
  • '엔터테이먼트'로 끝나는 소속사 이름을 가진 데이터를 검색
select * from celeb
where agency LIKE '%엔터테이먼트';
  • 직업명에 '가수'가 포함된 데이터를 검색
select * from celeb
where job_title LIKE '%가수%';
  • 소속사 이름의 두번째 글자가 G인 데이터를 검색
select * from celeb
where agency LIKE '_G%';
  • 직업명이 '가'로 시작하고 최소 5글자 이상인 데이터 검색
select * from celeb
where job_title LIKE '가____%';
  • 직업명이 '영'으로 시작하고 '모델'로 끝나는 데이터 검색
select * from celeb
where job_title LIKE '영%모델';
  • 영화배우와 텔런트를 병행하는 연예인 검색
select * from celeb
where job_title LIKE '%영화배우%' AND job_title LIKE '%텔런트%';
  • 직업이 하나 이상인 연예인 중 영화배우 혹은 텔런트가 아닌 연예인 검색
select * from celeb
where job_title LIKE '%,%'
AND NOT (job_title LIKE '%영화배우%' OR job_title LIKE '%텔런트%');

3️⃣ 문제 풀이

1) celeb 테이블에서 직업중 가수가 포함되어 있고 성이 이씨인 데이터를 조회하세요.

select *
from celeb
where job_title LIKE '%가수%'
AND name LIKE '이%';

2) celeb 테이블에서 성별이 남자 이거나 직업명이 '텔런트'로 끝나면서 최소 5글자 이상인 데이터를 조회하세요.

select *
from celeb
where sex='M'
OR (job_title LIKE '%텔런트' AND '_____%');

3) celeb 테이블에서 이름이 두글자인 데이터를 조회하세요.

select *
from celeb
where name LIKE '__';

4) celeb 테이블에서 나이가 30세 이상 50세 이하면서 개그맨이 아닌 데이터를 조회하세요.

select *
from celeb
where age BETWEEN 30 AND 50
AND NOT job_title='개그맨';

5) celab 테이블에서 아이유, 이미주, 송강, 이수현 중에 가수만 직업으로 가졌거나,
가수를 병행하지 않고 텔런트를 하는 사람을 찾으세요.

select *
from celeb
where name IN ('아이유', '이미주', '송강', '이수현')
AND (job_title LIKE '가수' OR (NOT job_title LIKE '%가수%' AND job_title LIKE '%텔런트%'));

profile
데이터 분석 공부 기록

0개의 댓글