(SQL) Logical Operations

임경민·2023년 11월 6일
1
post-thumbnail

실습환경 만들기

Logical Operations


AND


  • 조건을 모두 만족하는 경우 TRUE
    • 조건을 하나라도 만족하지 못하는 경우 검색대상에서 제외
SELECT column1, column2, ...
FROM tablename
WHERE condition1 AND condition2 AND condition3 ...;
  • Ex) 성별이 남자이고 나이가 40세보다 큰 데이터를 이름의 역순으로 정렬하여 검색
SELECT * FROM celeb WHERE sex = 'M' AND age > 40 ORDER BY name;

OR


  • 하나의 조건이라도 만족하는 경우 TRUE
SELECT column1, column2, ...
FROM **tablename**
WHERE **condition1** OR **condition2** OR **condition3** ...;
  • EX) 나이가 25세보다 작거나 30세보다 큰 데이터 검색
SELECT * FROM celeb WHERE age < 25 OR age > 30 ORDER BY age;

  • AND와 OR가 동시에 쓰일 경우, AND가 우선순위로 처리
    • 괄호 ()를 이용하여 조건을 묶어주는 것 중요!

NOT


  • 조건을 만족하지 않을 경우 TRUE
SELECT column1, column2, ...
FROM **tablename**
WHERE NOT **condition**;
  • Ex) 소속사가 YG엔터테이먼트이면서 남자가 아니거나 직업이 가수이면서 소속사가 YG엔터테이먼트가 아닌 데이터 검색
SELECT * FROM celeb
WHERE (agency = 'YG엔터테이먼트' AND NOT sex = 'M') OR (job_title = '가수' AND NOT agency = 'YG엔터테이먼트');

BETWEEN


  • 조건값이 범위 사이에 있으면 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE column1 BETWEEN value1 AND value2;
  • Ex) Celeb 테이블에서 아이디가 1에서 5 사이의 값이면서 성별이 여자이거나, 아이디가 홀수이면서 성별이 남자이면서 나이가 20세에서 30세 사이인 데이터를 조회
SELECT * FROM celeb
WHERE (id BETWEEN 1 AND 5 AND sex = 'F') OR (id % 2 = 1 AND sex = 'M' AND age BETWEEN 20 AND 30);

IN


  • 목록 안에 조건이 존재하는 경우 TRUE
SELECT column1, column2, ...
FROM **tablename**
WHERE column IN (value1, value2, ...);
  • Ex) celeb 테이블에서 아이유, 송강, 강동원, 차승원 중에 YG엔터테이먼트 소속이 아니거나 나이가 40세에서 50세 사이인 사람 조회
SELECT * FROM celeb
WHERE name IN ('아이유', '송강', '강동원', '차승원') AND (NOT agency = 'YG엔터테이먼트' OR age BETWEEN 40 AND 50);

LIKE


  • 조건값이 패턴에 맞으면 TRUE
SELECT column1, column2, ...
FROM **tablename**
WHERE column LIKE pattern;
  • Ex) 직업이 하나 이상인 연예인 중 영화배우 혹은 텔런트가 아닌 연예인 검색
SELECT * FROM celeb
WHERE job_title LIKE '%,%' AND NOT (job_title LIKE '%영화배우%' OR job_title LIKE '%텔런트%');

  • Ex) celeb 테이블에서 아이유, 이미주, 송강, 이수현 중에 가수만 직업으로 가졌거나, 가수를 병행하지 않고 텔런트를 하는 사람을 찾으세요.
SELECT * FROM celeb
WHERE name IN ('아이유', '이미주', '송강', '이수현')
AND (job_title LIKE '가수' OR (NOT job_title LIKE '%가수%' AND job_title LIKE '%텔런트%'));

0개의 댓글