SQL - (Basic) Logical Operations _ 논리연산자

jaam._.mini·2023년 12월 19일
0
post-thumbnail

SQL이 쉽고 재밌다고 했던 지난 날의 나를 반성한다...☺️




  • 실습환경 만들기

    • ⭐ 잊지 말자, 이것 안하면 에러 난다
      USE dataname
      -> use zerobase
    • select * from celeb;
  • 논리 연산자 종류







AND

조건을 "모두 만족"하는 경우 TRUE


SELECT column1, column2, ...
FROM tablename
WHERE condition1 AND condition2 AND condition3 ...;
  • AND 연산자 사용
    • WHERE 절에 AND를 사용해 여러 조건을 붙임
    • 모든 조건이 만족되어야 검색이 가능
    • 만족되지 않을 시 True 출력 안됨



  • 예제 1.

    • 나이가 29세이고 성별이 여성인 데이터 검색
      SELECT * FROM celeb WHERE age=29 AND sex='F' ;
  • 예제 2.

    • 성별이 남자고 나이가 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 ...;
  • OR 연산자 사용
    • 나열된 조건 중 1개만 만족해도 검색 됨



  • 예제 1.

    • 나이가 25세 보다 작거나 30세 보다 큰 데이터 검색, 나이순 정렬
      SELECT * FROM celeb
      WHERE age<=25 OR age>=30
      ORDER BY age;
  • 예제 2.

    • 나이가 29 보다 작고 여자이거나
      나이가 30보다 크고 남자인 데이터를
      나이와 성별 순으로 정렬
      SELECT * FROM celeb
      WHERE (age<=29 AND sex='F')
      OR (age>=30 AND sex='M')
      ORDER BY age, sex ASC;
  • 예제 3.

    • YG엔터 소속이거나 나무엑터스 소속인 연예인 중, 나이가 30 보다 작은 데이터 검색
      SELECT * FROM celeb
      WHERE (agency='YG엔터' OR agency='나무엑터스')
      AND age<=30;
  • 예제 4.
    • 남자 이면서 YG엔터 소속이거나, 나이가 30세 보다 작은 데이터를 나이, 소속사 준으로 정렬
      SELECT * FROM celeb
      WHERE (sex='M' AND agency='YG엔터')
      OR age<=30
      ORDER BY age, agency ASC;
  • 예제 5.
    • 아이디가 홀수면서 성별이 남자 거나,
      아이디가 짝수면서 소속사가 YG엔터 데이터를
      나이순으로 정렬해 검색하시오
      SELECT * FROM celeb
      WHERE ((id%2)=1 AND sex='M')
      OR ((id%2)=0 AND agency='YG엔터')
      ORDER BY age ASC;







NOT

조건을 만족하지 못하는 경우 TURE를 return


SELECT column1, column2, ...
FROM tablename
WHERE NOT condition1;



  • 예제 1.

    • 성별이 여자가 아닌 데이터 검색
      SELECT * FROM celeb WHERE NOT sex='F';
  • 예제 2.

    • 소속사가 YG엔터 이면서 남자가 아니거나
      직업이 가수 이면서 소속사가 YG엔터 아닌 경우
      SELECT * FROM celeb
      WHERE (NOT sex='M' AND agency='YG엔터')
      OR (jdb_title='가수' AND NOT agency='YG엔터');
  • 예제 3.
    • 생일이 1990년 이후면서 여자가 아니거나
      생일이 1979년 이전이면서 소속사가 안테나가 아닌
      데이터 출력
    SELECT * FROM celeb 
    WHERE (birthday > 19891231 AND NOT sex='F')
    OR (birthday < 19800101 AND NOT agency='안테나');
  • 예제 4.
    • 소속사가 YG엔터가 아니고
      나이가 40세 이하인 데이터를 이름순으로 나열
      SELECT * FROM celeb
      WHERE NOT agency='YG엔터'
      AND age<=40 
      ORDER BY name ASC;







BETWEEN

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


SELECT column1, column2, ...
FROM tablename
WHERE column1 BETWEEN value1 AND value2;
  • WHERE 컬럼 BETWEEN 밸류1 AND 밸류2



  • 예제 1.

    • 나이가 20세에서 40세 사이의 데이터 검색
      SELECT * FROM celeb
      WHERE age BETWEEN 20 AND 40;
  • 예제 2.

    • 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);
  • 예제 3.

    • 아이디가 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, ...);
  • column 의 값이 avlue 중에 존재 하면 TRUE



  • 예제 1.

    • 나이가 28세, 48세 중 하나인 데이터 검색
      SELECT * FROM celeb
      WHERE age 
      IN (28,48);
  • 예제 2. ⭐

    • 소속사가 나무엑터스, 안테나, 울림엔터 가 아니면서
      성별이 여자이거나 나이가 45 이상인 데이터
      SELECT * FROM celeb
      WHERE
      NOT agency IN ('나무엑터스', '안테나', '울림엔터')
      AND (sex='F' OR age>=45);







LIKE

조건 값이 패턴에 맞으면 TURE


SELECT column1, column2, ...
FROM tablename
WHERE column LIKE pettern;



  • 예제 1.
    • 소속사 이름이 YG엔터 인 데이터 검색
      SELECT * FROM celeb
      WHERE agency
      LIKE 'YG엔터';
  • 예제 2.

    • YG로 시작하는 소속사 이름을 가진 데이터 검색
      SELECT * FROM celeb
      WHERE agency
      LIKE 'YG%';
  • 예제 3.

    • '엔터'로 끝나는 소속사 이름을 가진 데이터 검색
      SELECT * FROM celeb
      WHERE agency
      LIKE '%엔터';
  • 예제 4.

    • '가수'가 포함된 데이터 검색
      SELECT * FROM celeb
      WHERE job_title
      LIKE '%가수%';
  • 예제 5.

    • 소속사 이름의 두번째 글자가 G인 제이터 검색
      SELECT * FROM celeb
      WHERE agency
      LIKE '_G%';
  • 예제 6.

    • 직업명이 '가'로 시작하고 최소 2글자 이상인 데이터 검색
      SELECT * FROM celeb
      WHERE job_title
      LIKE '가_%';
  • 예제 7.

    • 직업명이 '가'로 시작하고 최소 5글자 이상인 데이터 검색
      SELECT * FROM celeb
      WHERE job_title
      LIKE '가____%'; # 언더바 4개
  • 예제 8.

    • 직업명이 '영'으로 시작, '모델'로 끝나는 데이터
      SELECT * FROM celeb
      WHERE job_title
      LIKE '영%모델';
  • 예제 9.

    • '영화배우'와 '탈렌트'를 병행하는 연예인 검색
      SELECT * FROM celeb
      WHERE job_title LIKE '%영화배우%' 
      AND job_title LIKE '%탈렌드%';
  • 예제 10.

    • 직업이 하나 이상인 연예인 중
      영화배우 혹은 탈렌트가 아닌 연예인 검색
      • (1) 직업이 1개 이상
        WHERE job_title
        LIKE '%,%'
      • (2) 영화배우 혹은 탈렌트가 아닌
        WHERE 
        NOT
        (job_title LIKE '%영화배우%'
        OR job_title LIKE '%탈렌트%')
    • 최종CODE
    SELECT * FROM celeb
    WHERE job_title LIKE '%,%'
    AND NOT
    (job_title LIKE '%영화배우%' OR job_title LIKE '%탈렌트%');

  • 예제 11.

    • 이름이 두글자인 연예인
      SELECT * FROM celeb
      WHERE name LIKE '__';
  • 예제 12.
    • 나이가 30 이상, 50이하, 개그맨이 아닌 데이터
      SELECT * FROM celeb
      WHERE age BETWEEN 30 AND 50 AND job_title LIKE '%개그맨%';
profile
비전공자의 데이터 공부법

0개의 댓글