[SQL] 07-Logical Operations

김지현·2024년 6월 7일

SQL

목록 보기
6/16

📂 논리 연산자

연산자의미
AND조건을 모두 만족하는 경우 TRUE
OR하나의 조건이라도 만족하는 경우 TRUE
NOT조건을 만족하지 않는 경우 TRUE
BETWEEN조건값이 범위 사이에 있으면 TRUE
IN조건값이 목록에 있으면 TRUE
LIKE조건값이 패턴에 맞으면 TRUE

📍 AND

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

(예제) 성별이 남성이고 나이가 40세보다 큰 데이터를 이름의 역순으로 정렬하여 검색

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

📍 OR

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

✔ AND가 OR보다 우선순위가 높으므로 우선되는 조건을 괄호로 묶는 습관❗
(오류) YG엔터테인먼트 소속이거나 나무엑터스 소속인 연예인 중, 나이가 30세보다 작은 데이터 검색

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

+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  3 | 송강   | 1994-04-23 |   28 | M    | 탤런트           | 나무엑터스     |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테인먼트 |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테인먼트 |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테인먼트 |
+----+--------+------------+------+------+------------------+----------------+

(원하는 결과) YG엔터테인먼트 소속이거나 나무엑터스 소속인 연예인 중, 나이가 30세보다 작은 데이터 검색

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

+----+--------+------------+------+------+-----------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE | AGENCY         |
+----+--------+------------+------+------+-----------+----------------+
|  3 | 송강   | 1994-04-23 |   28 | M    | 탤런트    | 나무엑터스     |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수      | YG엔터테인먼트 |
+----+--------+------------+------+------+-----------+----------------+

📍 NOT

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

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

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

📍 BETWEEN

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

(예제) 나이가 20세에서 40세 사이인 데이터 검색

SELECT *
FROM celeb
WHERE age BETWEEN 20 AND 40;
-- WHERE age >= 20 AND age <= 40 결과 동일 

📍 IN

  • 조건값이 목록에 있으면 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE column IN(value1, value2, ...);

(예제) 나이가 28세, 48세 중 하나인 데이터 검색

SELECT *
FROM celeb
WHERE age IN (28, 48);
-- WHERE age = 28 OR age 48 결과 동일 

📍 LIKE

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

✔ 와일드 카드

문자의미
%0개 이상의 모든 문자를 대체 (글자 개수 지정하지 않음)
_1개 이상의 모든 문자를 대체 (_ 개수만큼 글자 수가 지정)

(예제1) 직업명이 '가'로 시작하고 최소 2글자 이상인 데이터 검색

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

(예제2) 영화배우와 탤런트를 병행하는 연예인 검색

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

0개의 댓글