1. SELECT 명령
: 테이블에서 조건이나 자료를 통해 QUERY를 뽑아내겠다는 명령어
2. 형식
select ColLlist ... FROM 테이블명 [별명,.......]
*: 모든 col 출력
DISTINCT ColList
: 자료가 중복되지 않게 출력
* WHERE 조건
: ROW에 대한 조건으로 생략시 모든 ROW가 대상이된다
* ORDER BY col명이나 수식 [ASC/DESC]
: 오름차순 혹은 내림차순으로 소트시킨다.
- * GROUP BY col명이나 수식
: 그룹설정
* Having 조건
: GROUP BY 에 대한 조건
< 실습 1. COLLIST 의 활용 > SQL> select a.saname, a.sajob, a.sapay FROM sawon a;
-- sawon을 a 라는 별명으로 고쳐 출력
SQL> select saname 이름, sajob 직책, sapay 급여 FROM sawon;
-- saname을 이름, sajob을 직책, sapay을 급여로 헤딩명를 변경
이름 직책 급여
---------- ---------- ---------
이순신 과장 3500
이미라 대리 2503
............................................
20 개의 행이 선택되었습니다.
SQL> select saname 이 름, sajob 직 책 FROM sawon;
select saname 이 름, sajob 직 책 FROM sawon
--> 헤딩명을 띄어 쓰면 에러 발생...
라인 1 에 오류:
ORA-00923: FROM 키워드가 있어야할 곳에 없습니다
SQL> select saname "이 름", sajob "직 책", sapay "급여" FROM sawon;
--> 정상적으로 수행 ,,, 헤딩명을 입력 시킬 때만 " "를 쓰고, 그 이외의 경우는 ' '를 쓴다.
이 름 직 책 급여
---------- ---------- ---------
이순신 과장 3500
이미라 대리 2503
...................................
20 개의 행이 선택되었습니다.
--> 주로 아래와 같은 형태에서 이용....
SQL> select saname, sajob, sapay*1.5, sapay*2 "보너스" FROM sawon;
SANAME SAJOB SAPAY*1.5 보너스
---------- ---------- --------- ---------
이순신 과장 5250 7000
이미라 대리 3754.5 5006
..........................................................
20 개의 행이 선택되었습니다.
SQL> select sajob FROM sawon;
SAJOB
----------
과장
대리
사원
과장
...........................
20 개의 행이 선택되었습니다.
SQL> select DISTINCT sajob FROM sawon;
--> 위와 같이 job만 출력 시킬 경우 데이타가 모두 출력됨으로 직책의 종류만 알고자 한다면, DISTINT 명령 사용
SAJOB
----------
과장
대리
부장
사원
회장
SQL> select Distinct Deptno, sajob FROM sawon;
--> 직책별 부서의 수를 알 수 있다.
DEPTNO SAJOB
--------- ----------
10 과장
10 대리
10 부장
10 사원
10 회장
20 과장
20 부장
20 사원
30 과장
30 대리
30 부장
30 사원
12 개의 행이 선택되었습니다.
< 실습2. where 의 활용 > SQL> select * FROM sawon where sajob='과장';
--> 과장만 출력
SABUN SANAME DEPTNO SAJOB SAHIRE SAMGR SAPAY SASE
--------- ---------- --------- ---------- ---------------- --------- --------- ----
3 이순신 20 과장 85/03/01 2 3500 남자
6 공부만 30 과장 95/05/01 17 4003 남자
.........................................................................
SQL> select * FROM sawon where sajob IN ('과장','부장','대리');
--> 과장, 부장, 대리 출력
SABUN SANAME DEPTNO SAJOB SAHIRE SAMGR SAPAY SASE
------- ---------- --------- ---------- ---------------- --------- --------- ----
3 이순신 20 과장 85/03/01 2 3500 남자
4 이미라 30 대리 83/04/01 17 2503 여자
........................................................................
11 개의 행이 선택되었습니다.
SQL> select * FROM sawon where sajob not IN ('과장','부장','대리');
--> 과장, 부장, 대리 가 아닌 사람만 출력
SABUN SANAME DEPTNO SAJOB SAHIRE SAMGR SAPAY SASE
------ ---------- --------- ---------- ---------------- --------- --------- ----
5 이순라 20 사원 90/05/01 3 1200 여자
16 김유신 30 사원 81/04/01 4 400 남자
....................................................................
9 개의 행이 선택되었습니다.
SQL> select * FROM sawon where sapay between 2000 AND 4000;
SABUN SANAME DEPTNO SAJOB SAHIRE SAMGR SAPAY SASE
--------- ---------- --------- ---------- ---------------- --------- --------- ----
3 이순신 20 과장 85/03/01 2 3500 남자
4 이미라 30 대리 83/04/01 17 2503 여자
..........................................................................
9 개의 행이 선택되었습니다.
SQL> select * FROm sawon where deptno=10 AND sajob='과장';
SABUN SANAME DEPTNO SAJOB SAHIRE SAMGR SAPAY SASE
------ ---------- --------- ---------- ---------------- --------- --------- ----
20 깨똥이 10 과장 90/05/01 13 4500 남자
SQL> select * FROM sawon ORDER BY sajob;
---> 항상 최종명령으로 소트 명령 (ORDER BY...) 를 쓴다....
SABUN SANAME DEPTNO SAJOB SAHIRE SAMGR SAPAY SASE
-------- ---------- --------- ---------- ---------------- --------- --------- ----
3 이순신 20 과장 85/03/01 2 3500 남자
6 공부만 30 과장 95/05/01 17 4003 남자
7 놀기만 20 과장 93/05/01 2 2300 여자
20 깨똥이 10 과장 90/05/01 13 4500 남자
11 류별나 20 과장 89/12/01 2 1600 여자
4 이미라 30 대리 83/04/01 17 2503 여자
................................................................................
19 임꺼정 20 사원 88/04/01 7 2200 남자
16 김유신 30 사원 81/04/01 4 400 남자
15 최진실 10 사원 91/04/01 12 2000 여자
10 공부해 30 사원 88/11/01 4 1303 남자
1 홍길동 10 회장 80/01/01 5000 남자
20 개의 행이 선택되었습니다.
SQL> select * FROM sawon ORDER BY sajob, sapay DESC;
--> job 을 오름차순으로 먼저 정렬후 ,ㅡ sapay를 내림차순으로 정렬
SABUN SANAME DEPTNO SAJOB SAHIRE SAMGR SAPAY SASE
--------- ---------- --------- ---------- ---------------- --------- --------- ----
20 깨똥이 10 과장 90/05/01 13 4500 남자
6 공부만 30 과장 95/05/01 17 4003 남자
11 류별나 20 과장 89/12/01 2 1600 여자
4 이미라 30 대리 83/04/01 17 2503 여자
............................................................................
5 이순라 20 사원 90/05/01 3 1200 여자
9 무궁화 10 사원 84/08/01 12 1100 여자
18 강감찬 30 사원 86/07/01 4 1003 남자
16 김유신 30 사원 81/04/01 4 400 남자
1 홍길동 10 회장 80/01/01 5000 남자
20 개의 행이 선택되었습니다.
SQL> select saname, sapay, sapay*1.2 보너스 FROM sawon ORDER BY 보너스;
-->수식에의한 소트
SANAME SAPAY 보너스
---------- --------- ---------
김유신 400 480
강감찬 1003 1203.6
무궁화 1100 1320
이순라 1200 1440
............................................
깨똥이 4500 5400
홍길동 5000 6000
20 개의 행이 선택되었습니다.
< 실습3. group by의 활용 > SQL> select sajob, count(*) 인원수, avg(sapay) "평균 급여", sum(sapay) "급여합"
FROM sawon GROUP BY sajob;
--> sajob이라는 그룹에서 인원수, 평균 급여, 급여합 출력
SAJOB 인원수 평균 급여 급여합
---------- --------- --------- ---------
과장 5 3180.6 15903
대리 3 2002 6006
부장 3 2934.3333 8803
사원 8 1575.75 12606
회장 1 5000 5000
SQL> select sajob, count(*) 인원수, avg(sapay) "평균 급여", sum(sapay) "급여합" FROM sawon
2 GROUP BY sajob
3 having count(*)>=5;
--> sajob이라는 그룹에서 인원수, 평균 급여, 급여합 계산후 인원수 5이상만 출력
SAJOB 인원수 평균 급여 급여합
---------- --------- --------- ---------
과장 5 3180.6 15903
사원 8 1575.75 12606
문 제 풀 이
1. 입사일이 '90-1-1'부터 오늘까지인 사람?
SQL> select * FROM sawon where sahire between '90-1-1' and sysdate;
2. 직책이 과장이 아닌 사람?
SQL> select * FROM sawon where sajob !='과장';
3. 고객 테이블에서 이름이 2자이고, 담당자가 있는 사람
SQL> select * FROm gogek where goname like '__' AND godam is NOT NULL;
4. 10번 부서에서 회장 부장 과장을 제외한 사람?
SQL> select * FROM sawon where deptno=10 AND sajob not in ('회장', '부장','대리');
5. 이름안에 '한'자가 들어간 사람?
SQL> select * FROM sawon where saname like '%한%';
6. 성씨가 이씨가 아닌 사람?
SQL> select * FROM sawon where saname not like '이%';
7. 이름이 세자로 된사람중에서서 가운데 글자가 순인 사람?
SQL> select * FROM sawon where saname like '_순_';
8. 과장과 대리중 10부서인 사람
SQL> select * FROM sawon
where deptno=10 AND ( sajob='과장' or sajob='대리');
'I T. > Oracle' 카테고리의 다른 글
Oracle Backup (0) | 2009.12.10 |
---|---|
Oracle 권한 (0) | 2009.12.10 |
오라클 정리 From 송~ (0) | 2009.12.10 |
ORACLE 9i ARCHITECTURE 아키텍쳐 (0) | 2009.12.10 |
Oracle 함수 (0) | 2009.12.09 |
오라클 SQL (0) | 2009.12.09 |