CH3 기본적인 SELCT문
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select e.ename, d.dname, e.sal
2 from emp e, dept d
3* where e.deptno = 30 and sal >= 1500 and e.deptno = d.deptno
SQL> /
ENAME DNAME SAL
---------- -------------- ----------
ALLEN SALES 1600
BLAKE SALES 2850
TURNER SALES 1500
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select e.ename, e.deptno, d.dname, e.sal
2 from emp e, dept d
3* where e.deptno = 30 and sal >= 1500 and e.deptno = d.deptno
SQL> /
ENAME DEPTNO DNAME SAL
---------- ---------- -------------- ----------
ALLEN 30 SALES 1600
BLAKE 30 SALES 2850
TURNER 30 SALES 1500
SQL>
SQL>
SQL>
SQL> select ename || ' 의' || '년 연봉은 =' || sal //string 연결
2 AS 연봉 from emp;
연봉
----------------------------------------------------------------
SMITH 의년 연봉은 =800
ALLEN 의년 연봉은 =1600
WARD 의년 연봉은 =1250
JONES 의년 연봉은 =2975
MARTIN 의년 연봉은 =1250
BLAKE 의년 연봉은 =2850
CLARK 의년 연봉은 =2450
SCOTT 의년 연봉은 =3000
KING 의년 연봉은 =5000
TURNER 의년 연봉은 =1500
ADAMS 의년 연봉은 =1100
연봉
----------------------------------------------------------------
JAMES 의년 연봉은 =950
FORD 의년 연봉은 =3000
MILLER 의년 연봉은 =1300
14 개의 행이 선택되었습니다.
ANY 연산자
=ANY(), IN()은 같은 의미임. ()안에 들어가는 것과 어느것이라도 같으면 된다는 의미.
통상적으로는 ANY보다는 IN을 많이 쓴다.
SQL> select * from emp
2 where sal = ANY(select sal from emp where deptno = 30);
//=ANY는 뒤에나오는 것의 컬럼들 중에서 sal이 하나라도 같으면 출력 한다.
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7900 JAMES CLERK 7698 81/12/03 950 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7698 BLAKE MANAGER 7839 81/05/01 2850 30
6 개의 행이 선택되었습니다.
UNION 연산자
첫 번째 쿼리와 두 번째 쿼리의 내용을 모두 보여줌. 단, 중복된 정보는 한 번만 보여줌.
SQL> select * from emp where sal >= 1500
2 union // union은 연산자 or와 같음. 단, where의 조건이 아니라 sql문장 두개를 이어주는 형태. 중복되는 결과 한번만.
3 select * from emp where deptno = 30;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7566 JONES MANAGER 7839 81/04/02 2975 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7788 SCOTT ANALYST 7566 87/04/19 3000 20
7839 KING PRESIDENT 81/11/17 5000 10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7900 JAMES CLERK 7698 81/12/03 950 30
7902 FORD ANALYST 7566 81/12/03 3000 20
11 개의 행이 선택되었습니다.
UNION ALL 연산자
첫 번째 쿼리와 두 뻔째 쿼리에 있는 모든 데이터를 보여줌
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select * from emp where sal >= 1500
2 union all
// union all 은 연산자 or와 같음. 단, where의 조건이 아니라 sql문장 두개를 이어주는 형태. 중복되는 결과 모두 출력.
3* select * from emp where deptno = 30
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7566 JONES MANAGER 7839 81/04/02 2975 20
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7788 SCOTT ANALYST 7566 87/04/19 3000 20
7839 KING PRESIDENT 81/11/17 5000 10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7900 JAMES CLERK 7698 81/12/03 950 30
14 개의 행이 선택되었습니다.
MINUS 연산자
두번째 쿼리에는 없고 첫 번째 쿼리에만 있는 데이터를 보여줌. 차집합 연산
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select * from emp where sal >= 1500
2 minus
3* select * from emp where deptno = 30
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7566 JONES MANAGER 7839 81/04/02 2975 20
7782 CLARK MANAGER 7839 81/06/09 2450 10
7788 SCOTT ANALYST 7566 87/04/19 3000 20
7839 KING PRESIDENT 81/11/17 5000 10
7902 FORD ANALYST 7566 81/12/03 3000 20
같은결과 ↑↓
SQL> select * from emp where sal >=1500 and deptno <> 30;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7566 JONES MANAGER 7839 81/04/02 2975 20
7782 CLARK MANAGER 7839 81/06/09 2450 10
7788 SCOTT ANALYST 7566 87/04/19 3000 20
7839 KING PRESIDENT 81/11/17 5000 10
7902 FORD ANALYST 7566 81/12/03 3000 20
INTERSECT 연산자
두 번째 쿼리와 첫 번째 쿼리에서 중복된 데이터를 보여줌
1 select * from emp
2 where sal >=1500
3 intersect
4 select * from emp
5* where deptno = 30
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
CH5 함수
연습문제 5_1. EMP Table에서 이름, 급여, 커미션, 충액(sal + comm)을 구하여 총액이 많은 순서로 출력하라. 단, 커미션이 NULL인 사람은 제외한다.
SQL> ed
file afiedt.buf(이)가 기록되었습니다
2 from emp
3 where comm is not null
4* order by total
SQL> /
---------- ---------- ---------- ----------
TURNER 1500 0 1500
WARD 1250 500 1750
ALLEN 1600 300 1900
MARTIN 1250 1400 2650
연습문제 5_1_new. EMP Table에서 이름, 급여, 커미션, 총액(sal + comm)을 구하여 총액이 많은 순서로 출력하라.
SQL> ed
file afiedt.buf(이)가 기록되었습니다
2 from emp
3* order by total
SQL> /
---------- ---------- ---------- ----------
TURNER 1500 0 1500
WARD 1250 500 1750
ALLEN 1600 300 1900
MARTIN 1250 1400 2650
SMITH 800
JONES 2975
JAMES 950
MILLER 1300
FORD 3000
ADAMS 1100
BLAKE 2850 //null값이 들어가있으면 산술연산이 되지 않는다.
---------- ---------- ---------- ----------
CLARK 2450
SCOTT 3000
KING 5000
SQL>
SQL> select ename as '이름', sal '급여', comm '커미션', total sum(sal, comm)
2 from emp
3 where comm is not null
4 order by total;
select ename as '이름', sal '급여', comm '커미션', total sum(sal, comm)
*
1행에 오류:
ORA-00923: FROM 키워드가 있어야할 곳에 없습니다
SQL> ed
file afiedt.buf(이)가 기록되었습니다
2 from emp
3 where comm is not null
4* order by total
SQL> /
select ename 이름, sal 급여, comm 커미션, total sum(sal, comm)
*
1행에 오류:
ORA-00923: FROM 키워드가 있어야할 곳에 없습니다
SQL> ed
file afiedt.buf(이)가 기록되었습니다
2 from emp
3 where comm is not null
4* order by total
SQL> /
select ename 이름, sal 급여, comm 커미션, total=sum(sal, comm)
*
1행에 오류:
ORA-00923: FROM 키워드가 있어야할 곳에 없습니다
SQL> ed
file afiedt.buf(이)가 기록되었습니다
2 from emp
3 where comm is not null
4* order by total
SQL> /
select ename 이름, sal 급여, comm 커미션, sum(sal, comm) total
*
1행에 오류:
ORA-00909: 인수의 개수가 부적합합니다
SQL> ed
file afiedt.buf(이)가 기록되었습니다
2 from emp
3 where comm is not null
4* order by total
SQL> /
select ename 이름, sal 급여, comm 커미션, sum(sal+ comm) total
*
1행에 오류:
ORA-00937: 단일 그룹의 그룹 함수가 아닙니다
SQL> ed
file afiedt.buf(이)가 기록되었습니다
2 from emp
3 where comm is not null
4* order by total
SQL> /
select ename 이름, sal 급여, comm 커미션, total = sal+ comm
*
1행에 오류:
ORA-00923: FROM 키워드가 있어야할 곳에 없습니다
SQL> ed
file afiedt.buf(이)가 기록되었습니다
2 from emp
3 where comm is not null
4* order by total
SQL> /
---------- ---------- ---------- ----------
TURNER 1500 0 1500
WARD 1250 500 1750
ALLEN 1600 300 1900
MARTIN 1250 1400 2650
file afiedt.buf(이)가 기록되었습니다
2 from emp
3* order by total
SQL> /
---------- ---------- ---------- ----------
TURNER 1500 0 1500
WARD 1250 500 1750
ALLEN 1600 300 1900
MARTIN 1250 1400 2650
SMITH 800
JONES 2975
JAMES 950
MILLER 1300
FORD 3000
ADAMS 1100
BLAKE 2850
---------- ---------- ---------- ----------
CLARK 2450
SCOTT 3000
KING 5000
2 from emp
3 where deptno = 10;
select ename 이름, sal 급여, sal *0.13 보너스 deptno 부서번호
*
1행에 오류:
ORA-00923: FROM 키워드가 있어야할 곳에 없습니다
SQL> ed
file afiedt.buf(이)가 기록되었습니다
2 from emp
3* where deptno = 10
SQL> /
---------- ---------- ---------- ----------
CLARK 2450 318.5 10
KING 5000 650 10
MILLER 1300 169 10
각 부서별 부서 번호와 부서인원, 평균급여, 총급여, 최고급여, 최저급여를 출력하시오.
SP2-0734: "각 부서별 ..."(으)로 시작되는 알 수 없는 명령 - 나머지 줄은 무시되었습니다.
SQL> selct * from dept;
SP2-0734: "selct * fr..."(으)로 시작되는 알 수 없는 명령 - 나머지 줄은 무시되었습니다.
SQL> select * from dept;
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
2 from emp
3 group by deptno;
---------- ---------- ---------- ---------- ----------
10 3 2916.66667 5000 1300
20 5 2175 3000 800
30 6 1566.66667 2850 950
file afiedt.buf(이)가 기록되었습니다
2 from emp
3* group by deptno
SQL> /
---------- ---------- ---------- ---------- ---------- ----------
10 3 2916.66667 8750 5000 1300
20 5 2175 10875 3000 800
30 6 1566.66667 9400 2850 950
'Fundamental Notes > Data Base' 카테고리의 다른 글
[DB] Quiz1_1 해답 (0) | 2009.04.06 |
---|---|
2009. 03. 23 - CH5 함수 (0) | 2009.03.23 |
[DB] 09. 03. 13 - Ch3. 기본적인 SELECT문 연습문제 (0) | 2009.03.13 |
[DB] 2009. 03. 09 - SQL*PLUS (0) | 2009.03.09 |