직원 ‘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에서 가져오려는 컬럼을 출력한다.
WHERE 성별 = '남' ; -- 동등조건 ('=' 사용)
WHERE 연봉 >= 8000 ; -- 비동등조건 (>, <= 등을 사용)
AND
조건1 AND 조건2
조건1, 조건2 모두 TRUE 여야 TRUE 반환
하나라도 FALSE면 FALSE 반환
OR
조건1 OR 조건2
조건1, 조건2 중 하나만 TRUE여도 TRUE 반환
모두 FALSE면 FALSE 반환.
연산자 우선순위
만약 AND와 OR를 같이 쓴 SQL 문장은 처리 순서가 어떻게 될까?
WHERE 부서ID = ‘D001’
OR 부서ID = ‘D002’
AND 이름 = ‘강홍수’ ;
-- WHERE절에 사용하는 연산자에도 우선 순위가 존재한다.
WHERE (부서ID = ‘D001’
OR 부서ID = ‘D002’)
AND 이름 = ‘강홍수’ ;
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’) ;
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사이를 출력
LIKE : 매칭 연산자, ~로 시작하는(끝나는) 단어를 탐색한다.
LIKE는 _ 와 % 를 이용하여 다양한 결과 출력이 가능하다이름에 '홍'이 들어간 사람을 찾기 :
WHERE 이름 LIKE ‘%홍%'
(양쪽에 %)
시작하거나 끝나는 단어 찾기 :
'홍%'
(홍으로 시작하는)
'%홍'
(홍으로 끝나는)
3글자이고, ~부로 끝나는 단어 찾기: WHERE 부서명 LIKE ‘__부' (언더바 사용)