[SQL] Logical Operators (논리 연산자)

허재훈·2023년 4월 19일
0

SQL

목록 보기
6/17
post-thumbnail
post-custom-banner

1. 실습환경 만들기

실습할 데이터베이스로 이동

  • zerobase 사용 (이동)
USE zerobase;

실습할 테이블 정보 확인

  • 만약 해당데이터가 검색되지 않는다면 앞단계의 실습환경 만들기를 참고

2. Logical Operators

Logical Operators (논리 연산자)

3. AND

AND 문법

  • 조건을 모두 만족하는 경우 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE condition1 AND condition2 AND condition3 ... ;

AND 예제

  • AND 예제 1

  • 나이가 29세이고 성별이 여성인 데이터 검색

SELECT * FROM celeb WHERE age=29 AND sex='F' ;

  • AND 예제 2

  • 성별이 남자이고 나이가 40세 보다 큰 데이터를 이름의 역순으로 정렬하여 검색 (desc 빼먹음)

SELECT * FROM celeb WHERE sex='M' AND age > 40 ORDER BY name;

4. OR

OR 문법

  • 하나의 조건이라도 만족하는 경우 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE condition1 OR condition2 OR condition3 ... ;

OR 예제

  • OR 예제 1

  • 나이가 25세보다 작거나 30세보다 큰 데이터 검색

SELECT * FROM celeb WHERE age < 25 OR age>30 ORDER BY age;

  • OR 예제 2 - 1

  • 나이가 29세 보다 작고 여자이거나, 나이가 30세 보다 크고 남자인 데이터를 나이와 성별 순으로 정렬하여 검색

  • OR 예제 2 - 2

  • 나이가 29세 보다 작고 여자이거나
SELECT * FROM celeb WHERE age < 29 AND sex='F';

  • OR 예제 2 - 3

  • 나이가 30세 보다 크고 남자인
SELECT * FROM celeb WHERE age > 30 AND sex='M';

  • OR 예제 2 - 4

  • 나이가 29세 보다 작고 여자이거나, 나이가 30세 보다 크고 남자인 데이터를
SELECT * 
FROM celeb 
WHERE (age < 29 AND sex='F') OR (age > 30 AND sex='M');

  • OR 예제 2 - 5

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

  • OR 예제 3 - 1

  • YG엔터테이먼트 소속이거나 나무엑터스 소속인 연예인 중, 나이가 30세 보다 작은 데이터를 검색

  • OR 예제 3 - 2

  • YG엔터테이먼트 소속이거나 나무엑터스 소속인 연예인
SELECT * 
FROM celeb 
WHERE agency='YG엔터테인먼트' OR agency='나무엑터스';

  • OR 예제 3 - 3

  • YG엔터테이먼트 소속이거나 나무엑터스 소속인 연예인 중, 나이가 30세 보다 작은 데이터
SELECT * 
FROM celeb 
WHERE agency='YG엔터테인먼트' OR agency='나무엑터스'
AND age < 30;

  • OR 예제 3 - 4

  • YG엔터테이먼트 소속이거나 나무엑터스 소속인 연예인 중, 나이가 30세 보다 작은 데이터
SELECT * 
FROM celeb 
WHERE (agency='YG엔터테인먼트' OR agency='나무엑터스')  # 괄호 추가
AND age < 30;

5. NOT

NOT 문법

  • NOT : 조건을 만족하지 경우 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE NOT condition;

NOT 예제

  • NOT 예제 1

  • 성별이 여자가 아닌 데이터 검색

SELECT *
FROM celeb
WHERE NOT sex='F';

  • NOT 예제 2 - 1

  • 소속사가 YG엔터테이먼트이면서 남자가 아니거나 직업이 가수이면서 소속사가 YG엔터테이먼트가 아닌 데이터 검색

  • NOT 예제 2 - 2

  • 소속사가 YG엔터테이먼트이면서
SELECT *
FROM celeb
WHERE agency='YG엔터테인먼트';

  • NOT 예제 2 - 3

  • 소속사가 YG엔터테이먼트이면서 남자가 아니거나
SELECT *
FROM celeb
WHERE agency='YG엔터테인먼트' AND NOT sex='M';

  • NOT 예제 2 - 4

  • 직업이 가수이면서
SELECT *
FROM celeb
WHERE job_title='가수';

  • NOT 예제 2 - 5

  • 직업이 가수이면서 소속사가 YG엔터테이먼트가 아닌 데이터
SELECT *
FROM celeb
WHERE job_title='가수' AND NOT agency='YG엔터테인먼트';

  • NOT 예제 2 - 6

  • 소속사가 YG엔터테이먼트이면서 남자가 아니거나, 직업이 가수이면서 소속사가 YG엔터테이먼트가 아닌 데이터 검색
SELECT *
FROM celeb
WHERE (agency='YG엔터테인먼트' AND NOT sex='M')
   OR (job_title='가수' AND NOT agency='YG엔터테인먼트');

  • NOT 예제 3 - 1

  • 생일이 1990년 이후이면서 여자가 아니거나, 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터 검색

  • NOT 예제 3 - 2

  • 생일이 1990년 이후이면서
SELECT *
FROM celeb
WHERE birthday > 19891231; 

  • NOT 예제 3 - 3

  • 생일이 1990년 이후이면서 여자가 아니거나,
SELECT *
FROM celeb
WHERE birthday > 19891231 AND NOT sex='F';

  • NOT 예제 3 - 4

  • 생일이 1979년 이전이면서
SELECT *
FROM celeb
WHERE birthday < 19800101;

  • NOT 예제 3 - 5

  • 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터
SELECT *
FROM celeb
WHERE birthday < 19800101 AND NOT agency = '안테나';

  • NOT 예제 3 - 6

  • 생일이 1990년 이후이면서 여자가 아니거나, 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터
SELECT *
FROM celeb
WHERE (birthday > 19891231 AND NOT sex='F') 
      OR (birthday < 19800101 AND NOT agency = '안테나');

6. BETWEEN

BETWEEN 문법

  • 조건값이 범위 사이에 있으면 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE column1 BETWEEN value1 AND value2;

BETWEEN 예제

  • BETWEEN 예제 1 - 1

  • 나이가 20세에서 40세 사이의 데이터 검색

SELECT *
FROM celeb
WHERE age BETWEEN 20 AND 40;

  • BETWEEN 예제 1 - 2

  • 나이가 20세에서 40세 사이의 데이터 검색

SELECT *
FROM celeb
WHERE age >= 20 AND age <= 40;

  • BETWEEN 예제 2 - 1

  • 생년월일이 1980년에서 1995년 사이가 아니면서 여자이거나,
    소속사가 YG엔터테이먼트이면서 나이가 20세에서 45세 사이가 아닌 데이터 검색

  • BETWEEN 예제 2 - 2

  • 생년월일이 1980년에서 1995년 사이가
SELECT *
FROM celeb
WHERE birthday BETWEEN 19800101 AND 19951231;

  • BETWEEN 예제 2 - 3

  • 생년월일이 1980년에서 1995년 사이가 아니면서
SELECT *
FROM celeb
WHERE NOT birthday BETWEEN 19800101 AND 19951231;

  • BETWEEN 예제 2 - 4

  • 생년월일이 1980년에서 1995년 사이가 아니면서 여자이거나,
SELECT *
FROM celeb
WHERE NOT birthday BETWEEN 19800101 AND 19951231 AND sex='F';

  • BETWEEN 예제 2 - 5

SELECT *
FROM celeb
WHERE agency = 'YG엔터테인먼트';

  • BETWEEN 예제 2 - 6

  • 소속사가 YG엔터테이먼트이면서 나이가 20세에서 45세 사이가 아닌 데이터
SELECT *
FROM celeb
WHERE agency = 'YG엔터테인먼트' AND NOT age BETWEEN 20 AND 45;

  • BETWEEN 예제 2 - 7

  • 생년월일이 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);

7. IN

IN 문법

  • 목록 안에 조건이 존재하는 경우 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE column IN (value1, value2, ...);

IN 예제

  • IN 예제 1 - 1

  • 나이가 28세, 48세 중 하나인 데이터 검색

SELECT *
FROM celeb
WHERE age IN (28, 48);

  • IN 예제 1 - 2

  • 나이가 28세, 48세 중 하나인 데이터 검색

SELECT *
FROM celeb
WHERE age=28 OR age=48;

  • IN 예제 2 - 1

  • 소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서, 성별이 여자거나 나이가 45세 이상인 데이터 검색

  • IN 예제 2 - 2

  • 소속사가 나무엑터스, 안테나, 울림엔터테이먼트
SELECT *
FROM celeb
WHERE agency IN ('나무엑터스', '안테나', '울림엔터테인먼트');

  • IN 예제 2 - 3

  • 소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서
SELECT *
FROM celeb
WHERE NOT agency IN ('나무엑터스', '안테나', '울림엔터테인먼트');

  • IN 예제 2 - 4

  • 소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서, 성별이 여자
SELECT *
FROM celeb
WHERE NOT agency IN ('나무엑터스', '안테나', '울림엔터테인먼트') AND sex='F';

  • IN 예제 2 - 5

소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서, 나이가 45세 이상

SELECT *
FROM celeb
WHERE NOT agency IN ('나무엑터스', '안테나', '울림엔터테인먼트') 
AND age >= 45;

  • IN 예제 2 - 6

  • 소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서, 성별이 여자거나 나이가 45세 이상인 데이터 검색 (에러)
SELECT *
FROM celeb
WHERE NOT agency IN ('나무엑터스', '안테나', '울림엔터테인먼트') 
AND sex='F' OR age >= 45;

  • IN 예제 2 - 7

  • 소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서, 성별이 여자거나 나이가 45세 이상인 데이터
SELECT *
FROM celeb
WHERE NOT agency IN ('나무엑터스', '안테나', '울림엔터테인먼트') 
AND (sex='F' OR age >= 45);

8. LIKE

LIKE 문법

  • 조건값이 패턴에 맞으면 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE column LIKE pattern;

LIKE 예제

  • LIKE 예제 1 - 1

  • 소속사 이름이 ‘YG엔터테이먼트’ 인 데이터를 검색

SELECT *
FROM celeb
WHERE agency LIKE 'YG엔터테인먼트';

  • LIKE 예제 1 - 2
  • 소속사 이름이 ‘YG엔터테이먼트’ 인 데이터를 검색
SELECT *
FROM celeb
WHERE agency = 'YG엔터테인먼트';

'YG%'

  • LIKE 예제 2 'YG%'

  • ‘YG’로 시작하는 소속사 이름을 가진 데이터를 검색

SELECT *
FROM celeb
WHERE agency LIKE 'YG%';

'%엔터테인먼트'

  • LIKE 예제 3 '%엔터테인먼트'
  • ‘엔터테이먼트’로 끝나는 소속사 이름을 가진 데이터를 검색
SELECT *
FROM celeb
WHERE agency LIKE '%엔터테인먼트';

'%가수%'

  • LIKE 예제 4 '%가수%'

  • 직업명에 ‘가수’가 포함된 데이터를 검색

SELECT *
FROM celeb
WHERE job_title LIKE '%가수%';

'_G%'

  • LIKE 예제 5 '_G%'

  • 소속사 이름의 두번째 글자가 G인 데이터를 검색

SELECT *
FROM celeb
WHERE agency LIKE '_G%';

'가_%'

  • LIKE 예제 6 '가_%'

  • 직업명이 ‘가' 로 시작하고 최소 2글자 이상인 데이터 검색

SELECT *
FROM celeb
WHERE job_title LIKE '가_%';

'가____%'

  • LIKE 예제 7 '가____%'

  • 직업명이 '가' 로 시작하고 최소 5글자 이상인 데이터 검색

SELECT *
FROM celeb
WHERE job_title LIKE '가____%';

'영%모델'

  • LIKE 예제 8 '영%모델'

  • 직업명이 ‘영'으로 시작하고 '모델’로 끝나는 데이터 검색

SELECT *
FROM celeb
WHERE job_title LIKE '영%모델';

  • LIKE 예제 9

  • 영화배우와 텔런트를 병행하는 연예인 검색

SELECT *
FROM celeb
WHERE job_title LIKE '%영화배우%' AND job_title LIKE '%탤런트%;

  • LIKE 예제 10 - 1

  • 직업이 하나 이상인 연예인 중 영화배우 혹은 텔런트가 아닌 연예인 검색

'%,%'

  • LIKE 예제 10 - 2 '%,%'

  • 직업이 하나 이상인 연예인
SELECT *
FROM celeb
WHERE job_title LIKE '%,%';

  • LIKE 예제 10 - 3

  • 영화배우 혹은 텔런트
SELECT *
FROM celeb
WHERE job_title LIKE '%영화배우%' OR job_title LIKE '%탤런트%';

  • LIKE 예제 10 - 4

  • 영화배우 혹은 텔런트가 아닌
SELECT *
FROM celeb
WHERE NOT (job_title LIKE '%영화배우%' OR job_title LIKE '%탤런트%');

  • LIKE 예제 10 - 5

  • 직업이 하나 이상인 연예인 중 영화배우 혹은 텔런트가 아닌 연예인
SELECT *
FROM celeb
WHERE job_title LIKE '%,%' 
AND NOT (job_title LIKE '%영화배우%' OR job_title LIKE '%탤런트%');


위 글은 제로베이스 데이터 취업 스쿨의 강의자료를 참고하여 작성되었습니다.

profile
허재
post-custom-banner

0개의 댓글