3. WHERE

jedo5000·2023년 11월 26일
0

DataBase

목록 보기
3/13

3.1 WHERE 사용 이유와 원리

직원 ‘A0001’의 정보만 출력하고 싶다! = 조건

직원ID가 ‘A0001’ 이라는 조건을 부여해서 컴퓨터가 계산하도록 요구

SELECT * 
FROM 직원 
WHERE 직원ID = 'A0001';

WHERE문법을 사용하면 조건에 해당하는 튜플만 출력 가능해진다.

위 테이블을 가지고 WHERE의 순서를 알아보자.

SELECT *
FROM 직원
WHERE 부서ID = 'D001' ;

실행 순서
1. FROM 직원 → 직원 테이블을 조회하여 정보를 불러옴.
2. WHERE 부서ID = 'D001';WHERE 조건에 부합하는 행(튜플)을 선택
							이 때 조건에 부합하는지 모든 튜플에 대해 검사한다.
3. SELECT *SELECT에서 가져오려는 컬럼을 출력한다.


3.2 비교 조건과 논리 조건

3.2.1 비교 조건

  • 비교 조건은 = , > , <= 등으로 비교하는 조건
WHERE 성별 = '남' ; -- 동등조건 ('=' 사용)

WHERE 연봉 >= 8000 ; -- 비동등조건 (>, <= 등을 사용)

3.2.2 논리 조건

  • 논리조건 → true or false (참, 거짓으로 반환)
AND

조건1 AND 조건2 

조건1, 조건2 모두 TRUE 여야 TRUE 반환
하나라도 FALSEFALSE 반환

OR

조건1 OR 조건2

조건1, 조건2 중 하나만 TRUE여도 TRUE 반환
모두 FALSEFALSE 반환.

연산자 우선순위

만약 AND와 OR를 같이 쓴 SQL 문장은 처리 순서가 어떻게 될까?

WHERE 부서ID = ‘D001’
OR 부서ID = ‘D002’
AND 이름 = ‘강홍수’ ;
-- WHERE절에 사용하는 연산자에도 우선 순위가 존재한다.
  • AND 연산이 OR 연산보다 우선적으로 실행된다.
    OR 연산이 우선적으로 처리되게 하고싶다면 괄호를 사용하면 된다!
WHERE (부서ID = ‘D001’
OR 부서ID = ‘D002’)
AND 이름 = ‘강홍수’ ;

3.3 IN / BETWEEN / LIKE 조건(SQL 연산자)

SQL 연산자를 사용하는 이유?

복잡하고 특별한 계산이 필요할 때

3.3.1 IN


ex) 직원 ID가 ‘A0001’, A0003’, ‘A0006’인 직원의 정보를 출력해주세요
SELECT *
FROM 직원
WHERE 직원ID = ‘A0001’
OR 직원ID = ‘A0003’
OR 직원ID = ‘A0006’ -- 더 많아지면 코드가 너무 길어짐.

IN : “ = ”의 복수형 연산자
-- WHERE 직원ID = ‘A0001’ , ‘A0003’, ‘A0006’ ;
불가능하다! 등호('=')는 1:1 연산자다!
IN 앞에 NOT이 있다면 특정 조건을 제외한 모든 경우를 출력함.

SELECT *
FROM 직원
WHERE 직원ID IN (‘A0001’ , ‘A0003’, ‘A0006’) ;

3.3.2 BETWEEN

ex) 직원의 연봉이 2800이상, 3400 이하인 직원의 정보를 출력해주세요.
SELECT *
FROM 직원
WHERE 2800 =< 연봉 =< 3400 (x) -- 불가능! DB는 3항 연산을 지원하지 않는다!

BETWEEN :
BETWEEN A AND B 의 형태로 사용하며,
A와 B의 사이에 있는 값을 출력 (범위조건 연산)

( B값이 더 큰 경우 B AND A는 불가능, 큰 값이 먼저 올 수 없다.)

SELECT *
FROM 직원
WHERE 직원ID BETWEEN ‘A0001’ AND ‘A0004’
→ 문자열 형태에도 사용이 가능하다! A0001 A0004사이를 출력

3.3.3 LIKE

LIKE : 매칭 연산자, ~로 시작하는(끝나는) 단어를 탐색한다.
LIKE는 _ 와 % 를 이용하여 다양한 결과 출력이 가능하다

이름에 '홍'이 들어간 사람을 찾기 : WHERE 이름 LIKE ‘%홍%' (양쪽에 %)

시작하거나 끝나는 단어 찾기 :
'홍%' (홍으로 시작하는)
'%홍' (홍으로 끝나는)

3글자이고, ~부로 끝나는 단어 찾기: WHERE 부서명 LIKE ‘__부' (언더바 사용)

0개의 댓글