본문 바로가기

SQL/내용 정리

WHERE 연산자(와일드카드로 필터링하기)+산술, 비교, 논리 연산자

WHERE란?
  • 데이터 필터(조건 걸러내기)
    • SELECT, UPDATE, DELETE에서 조건을 만족하는 행(row)만 선택/처리하도록 제한하는 구문
-- 기본 문법
SELECT
  컬럼명
FROM
  테이블명
WHERE
  조건;

 

※ SQL 실행 순서 : FROM → WHERE → SELECT
     1. 테이블에서 데이터를 가져옴
     2. WHERE에서 먼저 필터링
     3. SELECT에서 컬럼 선택

 

BETWEEN 연산자
  • BETWEEN : 범위 내의 값을 출력
  • NOT BETWEEN : 범위 밖의 값을 출력(OR)
-- between
-- products의 price가 10에서 20 사이의 값을 출력
-- 예시1
SELECT
  *
FROM
  products
WHERE
  price BETWEEN 10 AND 20;

-- 예시2
SELECT
  *
FROM
  products
WHERE
  price >= 10 AND price <= 20;


-- not between
-- products의 price가 10에서 20 범위 밖의 값을 출력(null 값이 있는 지 확인 필요)
-- 예시1
SELECT
  *
FROM
  products
WHERE
  price NOT BETWEEN 10 AND 20;

-- 예시2(두 조건을 모두 충족할 수 없으므로, AND는 사용하지 않음) → OR 사용
SELECT
  *
FROM
  products
WHERE
  price < 10 OR price > 20;

 

IN 연산자 / NOT IN 연산자
  • IN 연산자 : 괄호 안의 지정 값 중, 아무거나 출력
  • NOT IN 연산자 : 괄호 안의 지정 값을 제외하고(지정 값 중 아무것도 걸리지 않는) 아무거나 출력
-- 예시1 : team_id 내의 k04, k06, k10 중 아무거나 출력
SELECT
  player_name,
  team_id
FROM
  player
WHERE
  team_id IN ('k04', 'k06', 'k10');


-- 예시2-1 : team_id 내의 k04, k06를 제외하고 아무거나 출력(4번 팀도, 6번 팀도 아닌 값)
SELECT
  player_name,
  team_id
FROM
  player
WHERE
  team_id NOT IN ('k04', 'k06');

-- 예시2-2 : 2-1과 동일한 값 출력
SELECT
  player_name,
  team_id
FROM
  player
WHERE
  team_id <> 'k04' AND team_id 'k06';
-- IN 활용 예시
-- team_id가 'k04'이면서 position이 'gk'인 것과 team_id가 'k06'이면서 position이 'mf'인 값을 출력
SELECT
  player_name AS '선수 이름',
  team_id,
  position
FROM
  player
WHERE
  (team_id, position) IN (('k04', 'gk'), ('k06', 'mf'));

-- NOT IN 활용 예시
-- team_id가 'k04'가 position이 'gk'인 것을 제외한 값과 team_id가 'k06'이면서 position이 'mf'인 것을 제외한 값을 출력
SELECT
  player_name AS '선수 이름',
  team_id,
  position
FROM
  player
WHERE
  (team_id, position) NOT IN (('k04', 'gk'), ('k06', 'mf'));

 

LIKE 연산자
  • 문자열 비교 연산
  • 와일드 카드 사용 가능(와일드 카드 없이 지정 값을 입력하면 '='과 같이 작동)
    • ex. LIKE '홍길동'을 입력하면 '홍길동'과 일치하는 값만 출력
      • '%' : 임의의 문자 N개
      • '_' : 임의의 문자 1개(글자 수 제한)

* 와일드 카드 : 여러 데이터에서 부분적으로 일치하는 값이 있는지 확인할 때 사용되는 특수 문자(일부만 알고 있을 때 유용)

* 검색 패턴 : 문자나 와일드카드 또는 이 두개의 조합으로 구성된 검색 조건

* 유용한 예시 : 이메일 주소의 일부만으로 검색 가능
                       ex. WHERE email LIKE 'b%@naver.com'과 같이 이메일 주소의 일부만으로 이메일 주소를 검색할 수 있음

* NULL 주의 : '%' 와일드카드는 모든 것과 매칭되는 것처럼 보일지 모르지만, NULL은 예외(NULL인 행은 가져오지 않음)

-- player의 이름이 '김'인 값
SELECT
  player_name
FROM
  player
WHERE
  player_name LIKE '김';
	
-- player의 이름이 '김O'인 값
SELECT
  player_name
FROM
  player
WHERE
  player_name LIKE '김_';

-- player의 이름이 '김~'인 값
SELECT
  player_name
FROM
  player
WHERE
  player_name LIKE '김%';

 

ROWNUM(TOP N개의 레코드 반환) : 사용자가 아닌 시스템이 관리하는 Pseudo(의사) Column
  • 채번, 출력 개수 지정 등에 활용 가능
-- rownum : 시스템이 관리하는 번호
SELECT
  player_name,
  ROWNUM
FROM
  player;
-- 활용 예시
-- 한 행만 반환할 때
SELECT
  m.mbr_name,
  ROWNUM
FROM
  members m
WHERE
  ROWNUM = 1;   //'=' 허용

SELECT
  m.mbr_name,
  ROWNUM
FROM
  members m
WHERE
  ROWNUM <= 1;

	
//여러 행 반환할 때
SELECT
  m.mbr_name,
  ROWNUM
FROM
  members m
WHERE
  ROWNUM < 2;
	
SELECT
  m.mbr_name,
  ROWNUM
FROM
  members m
WHERE
  ROWNUM = 3;

SELECT
  m.mbr_name,
  ROWNUM
FROM
  members m
WHERE
  ROWNUM <= 3;
	
SELECT
  m.mbr_name,
  ROWNUM
FROM
  members m
WHERE
  ROWNUM < 4;

 

 

산술 연산자
연산자 설명
+ 두 수에 대한 덧셈
- 두 수에 대한 뺄셈
* 두 수에 대한 곱셈
/ 두 수에 대한 나눗셈
% 두 수를 나눈 후 그 나머지를 반환

 

비교 연산자
연산자 설명
>
< 작음
>= 크거나 같음
<= 작거나 같음

 

논리 연산자
연산자 설명
AND 모든 조건이 true일 때만 true
OR 조건 중 하나라도 true면 true
NOT 조건의 결과(true/false)를 반전시킴