08. SQL- 다양한 조건 검색(NULL, BETWEEN, IN, LIKE)
학습목표
1. NULL 비교 연산자를 학습한다.
2. BETWEEN … AND 연산자를 학습한다.
3. IN 연산자를 학습한다.
4. LIKE 연산자를 학습한다.
part 1. NULL 비교 연산자를 학습한다.
NULL과 비교 연산
• NULL은 비교 연산자(=, <, >)를 사용할 수 없다.
• NULL에 대한 직접 검색은 다음 연산자를 이용한다.
‐ 컬럼 IS NULL
‐ 컬럼 IS NOT NULL
• 보너스가 결정되지 않은 사원을 검색한다.
part 2. BETWEEN … AND 연산자를 학습한다.
BETWEEN..AND 연산자
‐ '컬럼 >= 값1 AND 컬럼 <= 값2' 와 동일하다.
‐ 컬럼의 값이 값1에서 값2 사이의 값을 검색한다.
‐ 값1은 반드시 값2보다 작아야 한다.
‐ AND 연산자로 환원 가능하지만 가독성이 떨어진다.
• 급여가 1000에서 2000 이내인 사원을 검색한다.
• 1992년에서 1996년 사이에 입사한 사원을 검색한다.
‐ sal >= 1000 AND
sal <= 2000 ‐ hdate >= '1992/01/01 AND hdate <= '1996/12/31'
part 3. IN 연산자를 학습한다.
IN 연산자
‐ 값 중에 일치하는 값이 하나라도 있으면 검색된다.
- OR 연산자와 = 연산자로 교환 가능하다.
‐ 가독성이 매우 우수하다.
‐ IN 연산자는 나중에 서브 쿼리, 파티션 등의 여러 기능에 사용되는 중요한 연산자다.
• 개발이나 분석 업무를 담당하는 사원을 검색한다.
• 10, 20번 부서 사원을 검색한다.
‐ job='개발' OR job='관리'
‐ dno='10' OR dno='20'
part 4 . LIKE 연산자를 학습한다.
LIKE 연산자
‐ LIKE 연산자는 패턴 연산자의 일종으로 일부 문자열만을 이용해서 대상을 검색한다.
‐ 와일드 문자를 사용한다.
- % : 문자열 공백을 포함한다.
- _ : 문자
와일드 문자
• 김씨 성을 가진 사원
• 이름이 '하늘'인 사원
• 성과 이름이 각각 한 글자인 사원을 검색한다.
SELECT * FROM EMP; 문을 확인해보면 두 글자 이름을 가진 사람이 없다. 그래서 나는 4글자인 사람을 찾아봤다!
4글자이름을 가진 사람

• 이름에 '%' 문자가 포함된 사원을 검색한다.
실습
1. 1999년에서 2001년까지 부임한 교수의 명단을 검색한다.
SELECT pno, pname
FROM professor
WHERE hiredate BETWEEN '1999/01/01' AND '2001/12/31';
//데이터 포맷을 'YYYY/MM/DD:24HH:MI:SS'으로 바꾸면
//WHERE hiredate BETWEEN '1999/01/01:00:00:00' AND '2001/12/31:23:59:59';
//를 사용해 조금 더 명확한 조건문을 만들 수 있다.
2. 정교수와 조교수를 검색한다.
SELECT pno, pname, orders
FROM professor
WHERE orders LIKE "정%" OR orders LIKE "조%";
3. 학점수가 1학점, 2학점인 과목을 검색한다.
SELECT cno, cname, st_num
FROM course
WHERE st_num=1 OR st_num=2;
4. 1,2 학년 학생 중에 평점이 2.0에서 3.0사이인 학생을 검색한다.
SELECT sno, sname, syear, avr
FROM student
WHERE avr BETWEEN 2.0 AND 3.0
AND syear=1 OR syear=2
ORDER BY syear;
5. 물리, 화학과 학생 중 4.5 환산 평점이 3.5에서 4.0 사이인 학생을 검색한다.
SELECT sno, sname, avr*1.1, major
FROM student
WHERE avr*1.1 BETWEEN 3.5 AND 4.0
AND major='물리' OR major='화학'
ORDER BY major;
6. 물리, 화학과 학생의 정보를 학년별 성적순으로 검색한다.
SELECT *
FROM student
WHERE major='물리' OR major='화학'
ORDER BY syear, avr DESC;
7. 물리, 화학과 교수 중에 1999년에서 2000년 사이에 부임한 교수의 정보를 직위별로 검색한다.
SELECT pno, pname
FROM professor
WHERE hiredate BETWEEN '1999/01/01' AND '2000/12/31'
ORDER BY orders DESC;
8. 교수가 지정되지 않은 과목 중에 학점이 3학점인 과목을 검색한다.
SELECT *
FROM course
WHERE pno IS NULL AND st_num=3;
9. 화학 관련된 과목 중 평점이 2학점 이하인 과목을 검색한다.
: 화학 관련 과목은 과목 명에 화학이 들어간 과목을 의미한다.
SELECT *
FROM course
WHERE cname LIKE '%화학% AND st_num<=2'
10. 화학과 학생 중에 성이 권씨인 학생을 검색한다.
SELECT pno, pname
FROM student
WHERE sname LIKE '권%';