Paul's Grit

[SQL] SQL 논리 연산자: AND, OR, NOT, BETWEEN, IN, LIKE 본문

Data Analysis/SQL

[SQL] SQL 논리 연산자: AND, OR, NOT, BETWEEN, IN, LIKE

Paul-K 2023. 8. 25. 17:51

1-1. 데이터베이스 이동 & 테이블 생성

USE testdb;
CREATE TABLE celeb
(
ID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
NAME varchar(32) NOT NULL DEFAULT '',
BIRTHDAY date,
AGE int,
SEX char(1),
JOB_TITLE varchar(32),
AGENCY varchar(32)
);
DESC celeb;

 

1-2. 데이터 추가

INSERT INTO celeb 
VALUES
(1, '아이유', '1993-05-16', 29, 'F', '가수, 텔런트', 'EDAM엔터테이먼트'),
(2, '이미주', '1994-09-23', 28, 'F', '가수', '울림엔터테이먼트'),
(3, '송강', '1994-04-23', 28, 'M', '텔런트', '나무엑터스'),
(4, '강동원', '1981-01-18', 41, 'M', '영화배우, 텔런트', 'YG엔터테이먼트'),
(5, '유재석', '1972-08-14', 50, 'M', 'MC, 개그맨', '안테나'),
(6, '차승원', '1970-06-07', 48, 'M', '영화배우, 모델', 'YG엔터테이먼트'),
(7, '이수현', '1999-05-04', 23, 'F', '가수', 'YG엔터테이먼트');
SELECT * FROM celeb;

 

2. AND

2-1. AND: 조건을 모두 만족하는 경우 TRUE

남자이고 나이가 40보다 큰 데이터를 이름의 역순으로 정렬하여 검색

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

 

3. OR

3-1. OR: 하나의 조건이라도 만족하는 경우 TRUE

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

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

 

4. NOT

4-1. NOT: 조건을 만족하지 않는 경우 TRUE

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

SELECT * FROM celeb
WHERE (birthday > 19891231 AND NOT sex='F')
 OR (birthday < 19800101 and not agency = '안테나');

 

5. BETWEEN

5-1. BETWEEN: 조건값이 범위 사이에 있으면 TRUE

  • 비교 연산자 사용: 나이가 20세에서 40세 사이의 데이터 검색 (등호 포함하는 범위!!)
SELECT * FROM celeb WHERE age>= 20 AND age<=40;
  • BETWEEN 사용 나이가 20세에서 40세 사이의 데이터 검색
SELECT * FROM celeb WHERE age BETWEEN 20 AND 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);

 

6. IN

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

  • OR 사용: 나이가 28세, 48세 중 하나인 데이터 검색
SELECT * FROM celeb WHERE age=28 OR age=48;
  • IN 사용: 나이가 28세, 48세 중 하나인 데이터 검색
SELECT * FROM celeb WHERE age IN (28, 48);

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

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

 

7. LIKE

7-1. LIKE: 조건값이 패턴에 맞으면 TRUE

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

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

 

7-2. 'OO'으로 시작하는 데이터 검색

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

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

 

7-3. 'OO'으로 끝나는 데이터 검색

‘엔터테이먼트’로 끝나는 소속사 이름을 가진 데이터를 검색

SELECT * FROM celeb WHERE agency LIKE '%엔터테이먼트';

 

7-4. 'OO'가 포함된 데이터를 검색

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

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

 

7-4. O몇째 글자가 'O'인 데이터를 검색

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

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

 

7-5. 응용

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

'Data Analysis > SQL' 카테고리의 다른 글

[SQL] SQL JOIN  (0) 2023.08.28
[SQL] SQL UNION  (1) 2023.08.25
[SQL] SQL 정렬: ORDER BY  (2) 2023.08.25
[SQL] SQL 기본적인 명령어: SELECT, INSERT, UPDATE, DELETE  (0) 2023.08.24
[SQL] Table  (0) 2023.08.24