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 조건문에 연산자를 이용해서 원하는 데이터만 추출해내는 확인 작업을 해보자.
먼저 실습을 위한 celeb 테이블을 확인해보자.
DESC celeb;
SELECT * FROM celeb;
이미 파이썬을 통해서 연산자를 익혔기 때문에 종류를 살펴보지 않고 바로 예제를 통해서 문법 사용법을 확인하겠다.
나이가 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, job_title FROM celeb WHERE age>=29 ORDER BY age;
나이가 29보다 작거나 같은 데이터
SELECT name, age, agency FROM celeb WHERE age<=29 ORDER BY age;
나이가 29세와 크거나 작은(같지않은) 데이터
SELECT name, age, birthday, agency FROM celeb WHERE age<>29 ORDER BY age;
.
.
.
.
논리 연산자 또한 간단한 예시를 통해서 사용법을 확인해보자. 마찬가지로 celeb 테이블을 사용했다.
조건을 모두 만족하는 경우 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;
.
.
하나의 조건이라도 만족하는 경우 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;
.
.
조건을 만족하지 않는 경우 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);
.
.
조건값이 범위 사이에 있으면 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);
.
.
목록 안에 조건이 존재하는 경우 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);
.
.
조건값이 패턴에 맞으면 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 '%탤런트%' );