[029] 비교연산자, 논리연산자 / SQL 기초 - ③

이연희·2023년 9월 19일
0

Chapter
1. Comparison Operator(비교연산자)
(1) A=B
(2) A!=B
(3) A>B
(4) A<B
(5) A>=B
(6) A<=B
(7) A<>B
2. Logical Operatoer(논리연산자)
(1) AND
(2) OR
(3) NOT
(4) BETWEEN
(5) IN
(6) LIKE

이번시간에는 SQL을 이용해서 연산작업을 해보았다.
이미 파이썬으로 한 차례 강의를 들었기 때문에 연산 종류를 익히기에는 어려움이 없었다.
WHERE 조건문에 연산자를 이용해서 원하는 데이터만 추출해내는 확인 작업을 해보자.

1. Comparison Operator(비교연산자)

먼저 실습을 위한 celeb 테이블을 확인해보자.

DESC celeb;
SELECT * FROM celeb;

이미 파이썬을 통해서 연산자를 익혔기 때문에 종류를 살펴보지 않고 바로 예제를 통해서 문법 사용법을 확인하겠다.

(1) A=B

나이가 29인 데이터 검색

SELECT name, age FROM celeb WHERE age=29 ORDER BY age;

(2) A!=B

나이가 29세가 아닌 데이터 검색

SELECT name, age FROM celeb WHERE age!=29 ORDER BY age;

(3) A>B

나이가 29보다 큰 데이터 검색

SELECT name, age FROM celeb WHERE age>29 ORDER BY age;

(4) A<B

나이가 29보다 작은 데이터 검색

SELECT name, age FROM celeb WHERE age<29 ORDER BY age;

(5) A>=B

나이가 29보다 크거나 같은 데이터

SELECT name, age, job_title FROM celeb WHERE age>=29 ORDER BY age;

(6) A<=B

나이가 29보다 작거나 같은 데이터

SELECT name, age, agency FROM celeb WHERE age<=29 ORDER BY age;

(7) A<>B

나이가 29세와 크거나 작은(같지않은) 데이터

SELECT name, age, birthday, agency FROM celeb WHERE age<>29 ORDER BY age;

.
.
.
.

2. Logical Operatoer(논리연산자)

논리 연산자 또한 간단한 예시를 통해서 사용법을 확인해보자. 마찬가지로 celeb 테이블을 사용했다.

(1) 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 DESC;


.
.

(2) OR

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

나이가 25세보다 작거나 30세보다 큰 데이터를 나이순으로 검색

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세보다 작은 데이터 검색
이때 괄호로 묶지 않으면 and부터 연산되어서 에러가 남

SELECT * 
FROM celeb
WHERE (agency='YG엔터테인먼트' OR agency='나무액터스') AND age<30;

.
.

(3) NOT

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

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

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='안테나');

소속사가 YG엔터테인먼트가 아니고 나이가 40세 이하인 데이터를 이름순으로 정렬하여 조회

SELECT *
FROM celeb
WHERE NOT agency='YG엔터테인먼트' AND age<=40 
ORDER BY name;

성별이 남자가 아니거나 나이가 30세 이상인 데이터를 나이의 역순으로 정렬하여 조회

SELECT *
FROM celeb
WHERE AND sex='M' OR age>=30
ORDER BY age DESC;

직업이 가수가 아니면서 성별이 여자이거나, 나이가 40보다 작지 않으면서 아이디가 홀수인 데이터 검색

SELECT *
FROM celeb
WHERE (NOT job_title='가수' AND sex='F')
     OR (NOT age<40 AND (id%2)!=0);


.
.

(4) BETWEEN

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

나이가 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 *
FROM celeb
WHERE ((NOT birthday BETWEEN 19800101 AND 19951231) AND SEX='F)
      OR (agency='YG엔터테인먼트' AND (NOT age BETWEEN 20 AND 45));

나이가 30세에서 60세 사이이고 성별이 남자인 데이터를 나이순으로 정렬

SELECT *
FROM celeb
WHERE (age BETWEEN 30 AND 60) AND sex='F'
ORDER BY age;

나이가 30세에서 60세 사이가 아니거나 소속사가 yg엔터테인먼트인 데이터를 나이의 역순으로 정렬

SELECT *
FROM celeb
WHERE (NOT age BETWEEN 30 AND 60) OR agency='YG엔터테인먼트'
ORDER BY age DESC;

아이디가 1에서 5사이의 값이면서 성별이 여성이거나
아이디가 홀수이면서 성별이 남자이고 나이가 20세에서 30세 사이가 아닌 데이터 검색

SELECT *
FROM celeb
WHERE (id BETWEEN 1 AND 5 AND sex='F')
     OR ((id%2)!=0 AND sex='M' AND age BETWEEN 20 AND 30);


.
.

(5) IN

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

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

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

혹은 비교 연산자를 이용한다.

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

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

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

이름이 '아이유','이미주','송강','유재석' 중에 소속사가 '나무액터스'인 데이터 검색

SELECT *
FROM celeb
WHERE age IN ('아이유', '이미주', '송강', '유재석') AND agency='나무액터스';

소속사가 안테나,YG엔터테인먼트 중 하나가 아니고, 성별이 여자인 데이터 검색

SELECT *
FROM celeb
WHERE NOT agency IN ('안테나','YG엔터테인먼트') AND sex='F';

'아이유', '송강', '강동원','차승원' 중에서 소속사가 YG엔터테인먼트가 아니거나 나이가 40세에서 50세인 데이터

SELECT *
FROM celeb
WHERE name IN ('아이유','송강','강동원','차승원') AND (NOT agency='YG엔터테인먼트' OR age BETWEEN 40 AND 50);

.
.

(6) 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 '가_%';

직업명이 '가'로 시작하고 최소 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 '%탤런트%');

직업중 가수가 포함되어 있고, 성이 이씨인 데이터

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

나이가 30세 이상 50세 이하이면서 개그맨이 아닌 데이터 검색

SELECT *
FROM celeb
WHERE age BETWEEN 30 AND 50 AND NOT job_title LIKE '%개그맨%';

아이유, 이미주, 유재석, 송강 중에서 소속사가 나무로 시작하는 데이터 조회

SELECT *
FROM celeb
WHERE name IN ('아이유', '이미주', '유재석', '송강') AND agency LIKE '나무%';

아이유,이미주,송강,이수현 중에서 가수만 직업으로 가졌거나, 가수를 병행하지 않고 탤런트를 하는 사람 조회

SELECT *
FROM celeb
WHERE name IN ('아이유', '이미주', '송강', '이수현') 
   AND (job_title LIKE '가수' OR NOT job_title LIKE '%가수%' AND job_title LIKE '%탤런트%'  );

profile
안녕하세요, 데이터 공부를 하고 있습니다.

0개의 댓글