조건 검색
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
'SQL 공부 기록' 카테고리의 다른 글
SQL 7 - BETWEEN과 IN 연산자 (0) | 2021.10.28 |
---|---|
SQL 6 - 관계 연산자와 LIKE 연산자 (0) | 2021.10.27 |
SQL 4 - 정렬을 이용한 자료 검색 및 그룹 검색 (0) | 2021.10.26 |
SQL 페이지, 글자 포멧 설정 (0) | 2021.10.25 |
SQL 3 - 연결 연산자(||) 및 중복 제거(DISTINCT) (0) | 2021.10.22 |