BETWEEN..AND 연산자
SELECT [DISTINCT | ALL] 컬럼, 컬럼 ...
FROM 테이블 WHERE 컬럼 BETWEEN 값1 AND 값2 (컬럼 >= 값1 AND 컬럼 <= 값2)
ORDER BY 컬럼 [ASC/DESC], 컬럼 [ASC/DESC].......
예제 1. 다음 조건에 맞는 사원을 검색한다.
- 급여가 1000에서 2000 이내인 사원
SELECT * FROM emp
WHERE sal BETWEEN 1000 AND 2000;
ENO ENAME SEX JOB MGR HDATE SAL COMM DNO
------- ---------- --- ------- -------- ---------- ---------- ---------- ----
2002 제갈민 남 개발 0202 1996/04/30 1520 2000 20
2007 이초록 남 개발 0001 1992/09/05 1989 2300 30
0702 김민지 남 회계 0301 2017/01/09 1100 60 02
- 10, 20번 부서 사원
SELECT * FROM emp
WHERE dno BETWEEN '10' AND '20'; #between을 문자에 쓰지 않기 > 좋지 않음
ENO ENAME SEX JOB MGR HDATE SAL COMM DNO
------- ---------- --- ------- -------- ---------- ---------- ---------- ----
1001 문시현 남 모델링 0201 1991/02/01 4500 520 10
1002 김주란 여 모델링 0201 1992/03/03 4100 330 20
2001 남궁연호 남 개발 0202 1993/12/13 3950 200 10
2002 제갈민 남 개발 0202 1996/04/30 1520 2000 20
3002 권아현 여 분석 1002 2001/01/29 2900 20
3001 김선유 남 분석 1001 1998/10/17 3200 300 10
0269 권나현 여 분석 0301 2015/05/21 2600 1900 10
BETWEEN을 문자열에 사용하면 답은 나오지만 좋지 않다. (IN 사용)
예제 2. 1992년에서 1996년 사이에 입사한 사원을 검색한다.
SELECT * FROM emp
WHERE hdate BETWEEN '1992/01/01' AND '1996/12/31'
ORDER BY hdate;
ENO ENAME SEX JOB MGR HDATE SAL COMM DNO
------- ---------- --- ------- -------- ---------- ---------- ---------- ----
0301 이승철 남 회계 0001 1992/02/01 3400 0 02
1002 김주란 여 모델링 0201 1992/03/03 4100 330 20
2008 윤고은 여 개발 0001 1992/03/03 2100 40
2003 정의찬 남 개발 0202 1992/03/03 4350 30
2007 이초록 남 개발 0001 1992/09/05 1989 2300 30
2001 남궁연호 남 개발 0202 1993/12/13 3950 200 10
1003 양선호 남 모델링 0201 1995/02/21 4300 30
예제 3. 급여가 2000에서 1000 사이인 사원을 검색한다.
SELECT * FROM emp
WHERE sal BETWEEN 2000 AND 1000;
선택된 레코드가 없습니다.
BETWEEN은 앞에 오는 값이 뒤에 값보다 작아야 한다.
IN 연산자
SELECT [DISTINCT | ALL] 컬럼, 컬럼 ...
FROM 테이블
WHERE 컬럼 IN (값1, 값2 ...) (컬럼=값1 OR 컬럼=값2 OR ....)
ORDER BY 컬럼 [ASC/DESC], 컬럼 [ASC/DESC].......
= 값이 여러개 있을 경우에 사용
값 여러개 중에 하나만 맞아도 사용 가능
예제 4. 다음 조건에 맞는 사원을 검색한다.
- 개발이나 관리 업무를 담당하는 사원
SELECT * FROM emp
WHERE job IN ('개발', '관리')
ORDER BY job;
ENO ENAME SEX JOB MGR HDATE SAL COMM DNO
------- ---------- --- ------- -------- ---------- ---------- ---------- ----
2001 남궁연호 남 개발 0202 1993/12/13 3950 200 10
2002 제갈민 남 개발 0202 1996/04/30 1520 2000 20
2008 윤고은 여 개발 0001 1992/03/03 2100 40
2007 이초록 남 개발 0001 1992/09/05 1989 2300 30
2003 정의찬 남 개발 0202 1992/03/03 4350 30
- 10, 20번 부서 사원
SELECT * FROM emp
WHERE dno IN ('10', '20')
ORDER BY dno;
ENO ENAME SEX JOB MGR HDATE SAL COMM DNO
------- ---------- --- ------- -------- ---------- ---------- ---------- ----
0401 김진성 남 회계 1001 2008/03/13 3200 1000 10
0269 권나현 여 분석 0301 2015/05/21 2600 1900 10
3001 김선유 남 분석 1001 1998/10/17 3200 300 10
1001 문시현 남 모델링 0201 1991/02/01 4500 520 10
2001 남궁연호 남 개발 0202 1993/12/13 3950 200 10
0120 김경현 남 지원 1002 1999/09/05 4000 2500 20
2002 제갈민 남 개발 0202 1996/04/30 1520 2000 20
예제 5. 결과가 동일한 두 개의 SQL문을 비교해 보자
SELECT * FROM emp
WHERE dno BETWEEN '10' AND '20' AND job = '개발';
ENO ENAME SEX JOB MGR HDATE SAL COMM DNO
------- ---------- --- ------- -------- ---------- ---------- ---------- ----
2001 남궁연호 남 개발 0202 1993/12/13 3950 200 10
2002 제갈민 남 개발 0202 1996/04/30 1520 2000 20
실습
1. 평점이 3.0에서 4.0 사이의 학생을 검색한다.
SELECT * FROM student
WHERE avr BETWEEN 3.0 AND 4.0;
SNO SNAME SEX SYEAR MAJOR AVR
------- ---------- --- ---------- ------- ----------
905301 유태지 남 4 화학 3.28
923903 정남윤 남 3 생물 3.23
948204 서창동 남 1 식영 3.21
945302 김람석 남 1 화학 3.56
913902 황진혜 여 4 생물 3.15
933904 임영현 여 2 생물 3.98
915604 정성현 남 4 유공 3.34
2. 1999년에서 2001년까지 부임한 교수의 명단을 검색한다.
SELECT * FROM professor
WHERE hiredate BETWEEN '1999/01/01' AND '2001/12/31'
ORDER BY hiredate;
PNO PNAME SECTION ORDERS HIREDATE
------- ---------- ------- ------- ----------
1018 김응전 물리 조교수 1999/02/18
1013 하영진 물리 부교수 1999/04/19
1012 이영준 물리 부교수 2000/05/18
1027 임충원 생물 조교수 2001/06/03
3. 화학과와 물리학과, 생물학과 학생을 검색한다.
SELECT * FROM student
WHERE major IN ('화학', '물리', '생물');
SNO SNAME SEX SYEAR MAJOR AVR
------- ---------- --- ---------- ------- ----------
915301 정동상 남 4 화학 .95
905301 유태지 남 4 화학 3.28
905302 정욱상 남 4 화학 1.44
915303 정욱주 남 4 화학 .95
923903 정남윤 남 3 생물 3.23
923904 한현석 남 3 생물 2.45
933901 김용서 남 2 생물 1.48
4. 정교수와 조교수를 검색한다.
SELECT * FROM professor
WHERE orders IN ('정교수', '조교수');
PNO PNAME SECTION ORDERS HIREDATE
------- ---------- ------- ------- ----------
1001 송강 화학 정교수 2002/08/12
1007 이초아 화학 조교수 2010/07/06
1008 문규식 화학 조교수 2005/02/11
1010 이규진 물리 정교수 1998/10/07
1009 이준영 물리 정교수 1991/10/04
1016 호연작 물리 조교수 2009/10/21
1018 김응전 물리 조교수 1999/02/18
5. 학점수가 1학점, 2학점인 과목을 검색한다.
SELECT * FROM course
WHERE st_num IN (1, 2);
CNO CNAME ST_NUM PNO
------- ------------ ---------- -------
1211 일반화학실험 2 1001
1214 무기화학 2 1004
1216 환경화학 2 1006
1218 생화학 2 1008
1227 이학수학 2 1017
1228 위상수학 2 1018
2365 전자기학 2 1029
6. 1, 2 학년 학생 중에 평점이 2.0에서 3.0 사이인 학생을 검색한다.
SELECT * FROM student
WHERE syear IN (1, 2) AND (avr BETWEEN 2.0 AND 3.0)
ORDER BY syear;
SNO SNAME SEX SYEAR MAJOR AVR
------- ---------- --- ---------- ------- ----------
948203 황보우리 여 1 식영 2.83
945605 오경운 남 1 유공 2.99
945604 권현 남 1 유공 2.89
945602 차정혜 여 1 유공 2.73
943901 최혜원 여 1 생물 2.54
948201 이창지 남 1 식영 2.9
945303 남궁경아 여 1 화학 2.36
7. 화학, 물리학과 학생 중 1, 2 학년 학생을 성적순으로 검색한다.
SELECT * FROM student
WHERE major IN ('화학', '물리') AND syear IN (1, 2)
ORDER BY avr DESC;
SNO SNAME SEX SYEAR MAJOR AVR
------- ---------- --- ---------- ------- ----------
945302 김람석 남 1 화학 3.56
934504 갑서진 여 2 물리 3.22
944503 곽득용 남 1 물리 3.2
935304 최홍승 남 2 화학 3
925309 오우재 여 1 화학 2.99
925306 김재백 남 2 화학 2.78
944511 김형진 여 1 물리 2.76
8. 물리, 화학과 학생 중 4.5 환산 평점이 3.5에서 4.0 사이인 학생을 검색한다.
SELECT * FROM student
WHERE major IN ('물리', '화학') AND ((avr*4.5/4) BETWEEN 3.5 AND 4.0);
SNO SNAME SEX SYEAR MAJOR AVR
------- ---------- --- ---------- ------- ----------
905301 유태지 남 4 화학 3.28
914502 문수보 남 4 물리 3.33
944503 곽득용 남 1 물리 3.2
934504 갑서진 여 2 물리 3.22
914504 심빈경 남 4 물리 3.33
9. 물리, 화학과 학생의 정보를 학년별 성적순으로 검색한다.
SELECT * FROM student
WHERE major IN ('물리', '화학')
ORDER BY syear, avr DESC;
SNO SNAME SEX SYEAR MAJOR AVR
------- ---------- --- ---------- ------- ----------
945302 김람석 남 1 화학 3.56
944503 곽득용 남 1 물리 3.2
925309 오우재 여 1 화학 2.99
944511 김형진 여 1 물리 2.76
945303 남궁경아 여 1 화학 2.36
945314 이철윤 남 1 화학 2.22
944512 서동조 남 1 물리 1.99
10. 물리, 화학과 교수 중에 1999년에서 2000년 사이에 부임한 교수의 정보를 직위별로 검색한다.
SELECT * FROM professor
WHERE section IN ('물리', '화학') AND (hiredate BETWEEN '1999/01/01' AND '2000/12/31')
ORDER BY orders;
PNO PNAME SECTION ORDERS HIREDATE
------- ---------- ------- ------- ----------
1013 하영진 물리 부교수 1999/04/19
1012 이영준 물리 부교수 2000/05/18
1018 김응전 물리 조교수 1999/02/18
'SQL 공부 기록' 카테고리의 다른 글
SQL 9 - 조인 : 자기 참조 조인(Self join)과 외부조인(Outer join) (0) | 2021.11.04 |
---|---|
SQL 8 - 조인 : 등가 조인(Equi join)과 비등가 조인(Non Equi-join) (0) | 2021.11.01 |
SQL 6 - 관계 연산자와 LIKE 연산자 (0) | 2021.10.27 |
SQL 5 - WHERE 절을 이용한 조건 검색 (0) | 2021.10.26 |
SQL 4 - 정렬을 이용한 자료 검색 및 그룹 검색 (0) | 2021.10.26 |