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

 

+ Recent posts