조건 검색

SQL> SELECT [DISTINCT | ALL] 컬럼, 컬럼 ...
     FROM  테이블
     WHERE 조건
     ORDER BY 컬럼 [ASC/DESC], 컬럼 [ASC/DESC].......

 

예제 1. 다음 각 조건에 맞는 정보를 검색

- 사원 중에 급여가 4000 이상인 사원의 명단

SELECT eno 사번, ename 이름, sal 급여
FROM emp
WHERE sal >= 4000;

사번    이름             급여
------- ---------- ----------
0001    안영희           4800
1001    문시현           4500
1002    김주란           4100
1003    양선호           4300
2003    정의찬           4350
0120    김경현           4000

- 이름이 '문시현'인 사원의 정보

SELECT *
FROM emp
WHERE ename = '문시현';

ENO     ENAME      SEX JOB     MGR      HDATE           SAL       COMM DNO
------- ---------- --- ------- -------- -------- ---------- ---------- ----
1001    문시현     남  모델링  0201     91/02/01       4500        520 10

- 10번 부서 이외 부서 사원의 명단

SELECT * FROM emp
WHERE dno != 10;

ENO     ENAME      SEX JOB     MGR      HDATE           SAL       COMM DNO
------- ---------- --- ------- -------- -------- ---------- ---------- ----
0001    안영희     여  경영             91/01/01       4800          0 01
0201    안영숙     여  지원    0001     91/02/01       3900       2000 01
0202    손하늘     여  지원    0001     91/12/01       3510        980 01
0301    이승철     남  회계    0001     92/02/01       3400          0 02
0302    박선경     여  회계    0301     91/03/02       3300          0 02
1002    김주란     여  모델링  0201     92/03/03       4100        330 20
1003    양선호     남  모델링  0201     95/02/21       4300            30

 

예제 2. 잘못된 조건 검색 (문자타입인데 숫자타입으로 검색)

SELECT * FROM emp
WHERE dno=10; #dno 칼럼음 문자타입

ENO     ENAME      SEX JOB     MGR      HDATE           SAL       COMM DNO
------- ---------- --- ------- -------- -------- ---------- ---------- ----
1001    문시현     남  모델링  0201     91/02/01       4500        520 10
2001    남궁연호   남  개발    0202     93/12/13       3950        200 10
3001    김선유     남  분석    1001     98/10/17       3200        300 10
0269    권나현     여  분석    0301     15/05/21       2600       1900 10
0401    김진성     남  회계    1001     08/03/13       3200       1000 10

 

예제 3. 연봉이 30,000 이상인 사원의 이름을 검색한다 검색

SELECT eno 사번, ename 이름, sal*12+NVL(comm,0) 연봉
FROM emp
WHERE sal*12+NVL(comm,0) >= 30000;

사번    이름             연봉
------- ---------- ----------
0001    안영희          57600
0201    안영숙          48800
0202    손하늘          43100
0301    이승철          40800
0302    박선경          39600
1001    문시현          54520
1002    김주란          49530

 

예제 4. 보너스가 200 이하인 사원을 검색

SELECT eno 사번, ename 이름, comm 보너스
FROM emp
WHERE comm <= 200;

사번    이름           보너스
------- ---------- ----------
0001    안영희              0
0301    이승철              0
0302    박선경              0
2001    남궁연호          200
0309    김선유             90
0702    김민지             60

보너스가 없는 사람은 NVL을 사용해 0으로 변경해 보너스가 NULL인 사람도 검색하도록 다음과 같이 검색한다.

SELECT eno 사번, ename 이름, comm 보너스
FROM emp
WHERE NVL(comm,0) <= 200;

사번    이름           보너스
------- ---------- ----------
0001    안영희              0
0301    이승철              0
0302    박선경              0
1003    양선호
2001    남궁연호          200
2003    정의찬
2008    윤고은

 

예제 5. 입사일이 1996년 이후인 사원의 정보를 검색

SELECT * FROM emp
WHERE hdate >= '1996/01/01';

ENO     ENAME      SEX JOB     MGR      HDATE             SAL       COMM DNO
------- ---------- --- ------- -------- ---------- ---------- ---------- ----
2002    제갈민     남  개발    0202     1996/04/30       1520       2000 20
3002    권아현     여  분석    1002     2001/01/29       2900            20
0309    김선유     남  회계    0302     2011/01/03        900         90 02
3001    김선유     남  분석    1001     1998/10/17       3200        300 10
0702    김민지     남  회계    0301     2017/01/09       1100         60 02
0269    권나현     여  분석    0301     2015/05/21       2600       1900 10
0401    김진성     남  회계    1001     2008/03/13       3200       1000 10

 

널과 비교 연산
 - 널은 결정된 값이 아님으로 '=', '<' 등의 비교 연산자를 사용할 수 없다. 

 - 널에 대한 직접적인 검색은 다음과 같이 특별한 연산자를 이용한다.

  IS NULL : 널을 검색한다.

  IS NOT NULL : 널이 아닌 값를 검색한다.

 

예제 6. 보너스 컬럼이 널인 사원를 검색

SELECT *  FROM emp
WHERE comm IS NULL;  # comm = NULL 절대 안됨!!!

ENO     ENAME      SEX JOB     MGR      HDATE           SAL       COMM DNO
------- ---------- --- ------- -------- -------- ---------- ---------- ----
1003    양선호     남  모델링  0201     95/02/21       4300            30
2003    정의찬     남  개발    0202     92/03/03       4350            30
2008    윤고은     여  개발    0001     92/03/03       2100            40
3002    권아현     여  분석    1002     01/01/29       2900            20

 

실습

1. 화학과 학생을 검색한다. 

SELECT * FROM student
WHERE major = '화학';

SNO     SNAME      SEX      SYEAR MAJOR          AVR
------- ---------- --- ---------- ------- ----------
915301  정동상     남           4 화학           .95
905301  유태지     남           4 화학          3.28
905302  정욱상     남           4 화학          1.44
915303  정욱주     남           4 화학           .95
915304  권보수     남           4 화학          2.32
915305  최정희     여           3 화학           .58
925306  김재백     남           2 화학          2.78

 

2. 평점이 2.0 미만인 학생을 검색한다. 

SELECT * FROM student
WHERE avr < 2.0;

SNO     SNAME      SEX      SYEAR MAJOR          AVR
------- ---------- --- ---------- ------- ----------
915301  정동상     남           4 화학           .95
905302  정욱상     남           4 화학          1.44
915303  정욱주     남           4 화학           .95
933901  김용서     남           2 생물          1.48
915305  최정희     여           3 화학           .58
935303  김완창     남           2 화학           .34
913903  정도정     남           4 생물           .15

 

3. 권현 학생의 평점을 검색한다. 

SELECT sno 학번, sname 이름, avr 평점
FROM student
WHERE sname = '권현';

학번    이름             평점
------- ---------- ----------
945604  권현             2.89

 

4. 정교수의 명단을 검색한다. 

SELECT * FROM professor
WHERE orders = '정교수';

PNO     PNAME      SECTION ORDERS  HIREDATE
------- ---------- ------- ------- ----------
1001    송강       화학    정교수  2002/08/12
1010    이규진     물리    정교수  1998/10/07
1009    이준영     물리    정교수  1991/10/04
1021    왕사진     생물    정교수  1997/02/17
1029    주동평     생물    정교수  2006/01/26
1030    김동평     유공    정교수  2002/02/15
1033    박삭광     유공    정교수  2005/07/14

 

5. 화학과 소속 교수의 명단을 검색한다. 

SELECT * FROM professor
WHERE section = '화학';

PNO     PNAME      SECTION ORDERS  HIREDATE
------- ---------- ------- ------- ----------
1001    송강       화학    정교수  2002/08/12
1004    시진영     화학    부교수  1991/02/01
1006    장청아     화학    부교수  2003/05/20
1007    이초아     화학    조교수  2010/07/06
1008    문규식     화학    조교수  2005/02/11

 

6. 송강 교수의 정보를 검색한다. 

SELECT * FROM professor
WHERE pname = '송강';

PNO     PNAME      SECTION ORDERS  HIREDATE
------- ---------- ------- ------- ----------
1001    송강       화학    정교수  2002/08/12

 

7. 학년별로 화학과 학생의 성적을 검색한다. 

SELECT major 학과, syear 학년, sno 학번, sname 이름, avr 성적
FROM student
WHERE major = '화학' 
ORDER BY syear;

학과          학년 학번    이름             성적
------- ---------- ------- ---------- ----------
화학             1 945302  김람석           3.56
화학             1 925309  오우재           2.99
화학             1 945314  이철윤           2.22
화학             1 945303  남궁경아         2.36
화학             2 935304  최홍승              3
화학             2 935301  이준혜           1.99
화학             2 925306  김재백           2.78

 

8. 2000년 이전에 부임한 교수의 정보를 부임일순으로 검색한다. 

SELECT * FROM professor
WHERE hiredate < '2000/01/01'
ORDER BY hiredate ASC;

PNO     PNAME      SECTION ORDERS  HIREDATE
------- ---------- ------- ------- ----------
1035    장관용     식영    정교수  1985/07/28
1032    이유당     유공    부교수  1988/11/01
1022    이준       생물    부교수  1989/05/05
1004    시진영     화학    부교수  1991/02/01
1009    이준영     물리    정교수  1991/10/04
1031    김서령     식영    부교수  1991/10/09
1036    성현수     유공    부교수  1993/07/13

 

9. 담당 교수가 없는 과목의 정보를 검색한다. 

SELECT * FROM course
WHERE pno IS NULL;

CNO     CNAME            ST_NUM PNO
------- ------------ ---------- -------
2369    무기화학실험          2

 

10. 보너스가 급여의 10% 이상인 사원을 검색한다.

SELECT * FROM emp
WHERE comm >= sal*1.1;

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

 

+ Recent posts