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

박미영·2023년 4월 11일
0

📌Comparison Operators(비교 연산자)


📌Logical Operators(논리 연산자)


📍AND

조건을 모두 만족하는 경우 TRUE

SELECT column1, column2, ...
FROM tablename
WHERE condition1 AND condition2 AND condition3, ...;

📍OR

하나의 조건이라도 만족하는 경우 TRUE

SELECT column1, column2, ...
FROM tablename
WHERE condition1 OR condition2 OR condition3, ...;

📍NOT

조건을 만족하지 않는 경우 TRUE

SELECT column1, column2, ...
FROM tablename
WHERE NOT condition;

📍BETWEEN

조건값이 범위 사이에 있으면 TRUE

SELECT column1, column2, ...
FROM tablename
WHERE column1 BETWEEN value1 AND value2;

📍IN

목록 안에 조건이 존재하는 경우 TRUE

SELECT column1, column2, ...
FROM tablename
WHERE column IN (value1, value2, ...);

📍LIKE

조건값이 패턴에 맞으면 TRUE

SELECT column1, column2, ...
FROM tablename
WHERE column LIKE pettern;





📌예제

📍실습환경 만들기

zerobase database
celeb table

  • 데이터베이스 이동
    이전에 만들어뒀던 zerobase 데이터베이스 사용을 위해 이동
USE zerobase;



  • table 정보 확인
desc celeb;



  • 데이터 확인
select * from celeb;



📍비교 연산자 예제

  • 나이가 29세인 데이터 검색(A = B)
select name, age from celeb where age=29 order by age;



  • 나이가 29세가 아닌 데이터 검색(A != B)
select name, age from celeb where age!=29 order by age;



  • 나이가 29세 보다 큰 데이터 검색(A > B)
select name, age from celeb where age>29 order by age;



  • 나이가 29세 보다 작은 데이터 검색(A < B)
select name, age from celeb where age<29 order by age;



  • 나이가 29세 보다 크거나 같은 데이터 검색(A >= B)
select name, age from celeb where age>=29 order by age;



  • 나이가 29세 보다 작거나 같은 데이터 검색(A <= B)
 select name, age from celeb where age<=29 order by age;



  • 나이가 29세 크거나 작은 (같지 않은) 데이터 검색(A <> B)
select name, age from celeb where age<>29 order by age;



  • celeb 테이블에서 나이(age)가 30세 이하인 데이터의 이름과 나이를 나이순으로 조회
select name, age from celeb where age<=30 order by age;



  • celeb 테이블에서 이름이 ‘아이유’인 데이터의 이름과 나이, 성별, 직업, 소속사를 조회
select name, age, sex, job_title, agency
from celeb
where name='아이유';



  • celeb 테이블에서 소속사가 YG엔터테이먼트가 아닌 데이터의 이름, 직업, 소속사를
    소속사 순으로 정렬하여 조회
select name, job_title, agency
from celeb
where agency!='YG엔터테이먼트'
order by agency;



  • celeb 테이블에서 성별이 남자인 데이터의 이름, 성별, 소속사 정보를 나이의 역순으로 정렬한 뒤 소속사 순으로 정렬하여 조회
select name, sex, job_title
    -> from celeb
    -> where sex='M'
    -> order by age DESC, agency ASC;



  • celeb 테이블에서 나이가 50세 미만인 데이터의 성별, 소속사, 이름, 나이를 성별 순으로 정렬한 뒤 소속사 역순으로 정렬하고 마지막으로 이름 순으로 정렬하여 조회
select sex, agency, name, age
from celeb
where age < 50
order by sex ASC, agency DESC, name ASC;






📍논리 연산자 예제

- AND, OR

AND: 조건을 모두 만족하는 경우 TRUE


  • 나이가 29세이고 성별이 여성인 데이터 검색
SELECT * FROM celeb WHERE age=29 AND sex='F';



  • 성별이 남자이고 나이가 40세 보다 큰 데이터를 이름의 역순으로 정렬하여 검색
 select * from celeb where sex='M' and age > 40 order by name;



  • celeb 테이블에서 성별이 남자이고 소속사가 YG엔터테이먼트인 데이터를 소속사 순으로 정렬하여 조회하세요.
select * from celeb where sex='M' and agency='YG엔터테이먼트' order by agency;



  • celeb 테이블에서 나이가 30세 이상이고 성별이 남자인 데이터를 나이순으로 정렬하여 조회하세요.
select * from celeb where age >= 30 and sex='M' order by age;



OR: 조건이 하나만 해당하면 TRUE


  • 나이가 29세 보다 작고 여자이거나, 나이가 30세 보다 크고 남자인 데이터를 나이와 성별 순으로 정렬하여 검색
select * from celeb where (age<29 AND sex='F') OR (age>30 and sex='M');



  • 나이가 29세 보다 작고 여자이거나, 나이가 30세 보다 크고 남자인 데이터를 나이와 성별 순으로 정렬하여 검색
select * from celeb 
where (age<29 AND sex='F') OR (age>30 and sex='M')
order by age, sex;



  • Celeb 테이블에서 아이디가 홀수면서 성별이 남자거나, 아이디가 짝수면서 소속사가 YG엔터테이먼트인 데이터를 나이순으로 정렬하여 검색하세요
select * from celeb 
where (id%2 = 1 and sex='M') or (id%2 = 0 and agency='YG엔터테이먼트') 
order by age;




- NOT, BETWEEN

NOT: 조건을 만족하지 않는 경우 TRUE


  • Celeb 테이블에서 소속사가 YG엔터테이먼트가 아니고 나이가 40세 이하인 데이터를 이름순으로 정렬하여 조회
select *
from celeb
where not agency='YG엔터테이먼트' and age<=40
order by name;



  • 생일이 1990년 이후이면서 여자가 아니거나, 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터 검색
select *
from celeb
where (birthday > 19891231 and not sex='F') or (birthday<19800101 and not agency='안테나');



  • Celeb 테이블에서 소속사가 YG엔터테이먼트가 아니고 나이가 40세 이하인 데이터를 이름순으로 정렬하여 조회하세요.
select *
from celeb
where not agency='YG엔터테이먼트' AND age<=40
order by name;



  • Celeb 테이블에서 직업이 가수가 아니면서 성별이 여자이거나, 나이가 40보다 작지 않으면서 아이디가 홀수인 데이터를 조회하세요.
select *
from celeb
where (not job_title='가수' and sex='F') or (not age<40 and (id%2)=1);




BETWEEN: 조건값이 범위 사이에 있으면 TRUE


  • 나이가 20세에서 40세 사이의 데이터 검색
select *
from celeb
where age BETWEEN 20 AND 40;

-> between 사용하지 않는 경우

select *
from celeb
where age>= 20 AND age<=40;



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



  • Celeb 테이블에서 아이디가 1 에서 5사이의 값이면서 성별이 여자이거나, 아이디가 홀수이면서 성별이 남자이면서 나이가 20세에서 30세 사이인 데이터를 조회하세요.
select *
from celeb                   
where ((id between 1 and 5) and sex='F') OR 
(id%2=1 and sex='M' and age between 20 and 30);




- IN, LIKE

IN: 목록 안에 조건값이 존재하는 경우 TRUE


  • 나이가 28세, 48세 중 하나인 데이터 검색
select *
from celeb
where age in (28, 48);



  • 소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서, 성별이 여자거나 나이가 45세 이상인 데이터 검색
select *
from celeb
where (not agency in ('나무엑터스', '안테나', '울림엔터테이먼트')) and
(sex='F' or age >= 45);




LIKE: 조건값이 패턴에 맞으면 TRUE


  • 소속사 이름이 ‘YG엔터테이먼트’ 인 데이터를 검색
select * from celeb where agency like 'YG엔터테이먼트';
select * from celeb where agency='YG엔터테이먼트';

  • ‘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%';



  • 직업명이 ‘가' 로 시작하고 최소 2글자 이상인 데이터 검색
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 '%연기자%');



  • celeb 테이블에서 나이가 30세 이상 50세 이하면서 개그맨이 아닌 데이터를 조회하세요.
select * from celeb
where age between 30 and 50 and
not job_title like '%개그맨%';



  • celeb 테이블에서 아이유, 이미주, 유재석, 송강 중에 소속사 이름이 ‘나무’로 시작하는 데이터를 조회하세요.
select * from celeb
where name in ('아이유', '이미주', '유재석', '송강') and
agency like '나무%';



  • celeb 테이블에서 아이유, 이미주, 송강, 이수현 중에 가수만 직업으로 가졌거나, 가수를 병행하지 않고 텔런트를 하는 사람을 찾으세요.
select * from celeb
where name in ('아이유', '이미주', '송강', '이수현') and
((job_title like '가수') or (NOT job_title like '%가수%' and job_title like '%연기자%'));




후기🤔

이번주는 EDA 과제로 가득찬 한 주가 아닌가 싶다.
EDA 테스트 2개 EDA 과제 1개
물론 EDA가 익숙한 분들에게는 아주 간단한 문제들이겠지만 EDA 초보인 나에게는 과제 하나하나가 너무 어렵다구요ㅠㅠ 이렇게 한 주에 잔뜩 주시면 정신을 못차려요,,,^^
심지어 자소서까지 함께,,, 하하하하하 그래도 해결해나가면 기분 좋음


"이 글은 제로베이스 데이터 취업 스쿨 강의를 듣고 작성한 내용으로 제로베이스 데이터 취업 스쿨 강의 자료 일부를 발췌한 내용이 포함되어 있습니다."

0개의 댓글