본문 바로가기
DataBase & DBMS

22.11.22 Oracle DB / PL-SQL 예제 쿼리 작성 및 각종 함수 응용

by SoulMania 2023. 2. 15.

5day 설명_me.txt
0.09MB
221122.zip
0.03MB
day2.sql
0.01MB
day2_ing.sql
0.00MB
day2_ing2.sql
0.00MB
day2_ing3.sql
0.00MB
day2_me.sql
0.01MB

 

 

*테이블 구조,골격 조회
테이블명
desc[ribe] 테이블명

SQL> describe emp;
Name Null? Type


EMPNO(사원번호) NOT NULL NUMBER(4)
ENAME(사원명) VARCHAR2(10)
JOB(업무) VARCHAR2(9)
MGR(상사사원번호) NUMBER(4)
HIREDATE(입사일) DATE
SAL(급여) NUMBER(7,2)
COMM(커미션) NUMBER(7,2)
DEPTNO(부서번호) NUMBER(2)

SQL> select *
2 from emp;

 EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO

  7369 SMITH                CLERK                    7902 80/12/17        800                    20
  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
  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

 EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO

  7934 MILLER               CLERK                    7782 82/01/23       1300                    10

12 rows selected.

SQL> describe dept
Name Null? Type


DEPTNO(부서번호) NOT NULL NUMBER(2)
DNAME(부서명) VARCHAR2(14)
LOC(위치) VARCHAR2(13)
-> location

SQL> select *
2 from dept;

DEPTNO DNAME                        LOC

    10 ACCOUNTING                   NEW YORK
    20 RESEARCH                     DALLAS
    30 SALES                        CHICAGO
    40 OPERATIONS                   BOSTON

SQL> select deptno, dname, loc
2 from dept;

DEPTNO DNAME                        LOC

    10 ACCOUNTING                   NEW YORK
    20 RESEARCH                     DALLAS
    30 SALES                        CHICAGO
    40 OPERATIONS                   BOSTON

SQL> desc salgrade
Name Null? Type


GRADE(등급) NUMBER
LOSAL(최저급여) NUMBER
HISAL(최고급여) NUMBER

SQL> select grade, losal, hisal
2 from salgrade;
or
SQL> select *
2 from salgrade;

 GRADE      LOSAL      HISAL

     1        700       1200
     2       1201       1400
     3       1401       2000
     4       2001       3000
     5       3001       9999

SQL> describe bonus;
Name Null? Type


ENAME(사원명) VARCHAR2(10)
JOB VARCHAR2(9)
SAL NUMBER
COMM NUMBER

--bonus 테이블의 내용조회
select *
from bonus;

SQL> select *
2 from bonus;

no rows selected

데이터가 없다는 뜻!!!!
bonus만 insert를 하지 않았다.

--부서번호 오름차순 조회
1 select [deptno, dname, loc]
2
from dept order by deptno asc
SQL> /

DEPTNO DNAME                        LOC

    10 ACCOUNTING                   NEW YORK
    20 RESEARCH                     DALLAS
    30 SALES                        CHICAGO
    40 OPERATIONS                   BOSTON

--부서명 오름차순 조회
1 select [deptno, dname, loc]
2
from dept order by dname asc
SQL> /

DEPTNO DNAME                        LOC

    10 ACCOUNTING                   NEW YORK
    40 OPERATIONS                   BOSTON
    20 RESEARCH                     DALLAS
    30 SALES                        CHICAGO

--위치 오름차순 조회
1 select [deptno, dname, loc]
2
from dept order by loc asc
SQL> /

DEPTNO DNAME                        LOC

    40 OPERATIONS                   BOSTON
    30 SALES                        CHICAGO
    20 RESEARCH                     DALLAS
    10 ACCOUNTING                   NEW YORK

-- 사원명, 입사일 조회
1 select ename, hiredate
2* from emp
SQL> /

ENAME HIREDATE


SMITH 80/12/17
ALLEN 81/02/20
WARD 81/02/22
JONES 81/04/02
MARTIN 81/09/28
BLAKE 81/05/01
CLARK 81/06/09
KING 81/11/17
TURNER 81/09/08
JAMES 81/12/03
FORD 81/12/03
MILLER 82/01/23

-- 사원명, 입사일 조회하여 사원명 오름차순으로 정렬 출력
ENAME HIREDATE


ALLEN 81/02/20
BLAKE 81/05/01
CLARK 81/06/09
FORD 81/12/03
JAMES 81/12/03
JONES 81/04/02
KING 81/11/17
MARTIN 81/09/28
MILLER 82/01/23
SMITH 80/12/17
TURNER 81/09/08
WARD 81/02/22

--고참부터 사원명, 입사일 조회 (입사일 오름차순!!)
1 select ename, hiredate
2* from emp order by hiredate asc
SQL> /

ENAME HIREDATE


SMITH 80/12/17
ALLEN 81/02/20
WARD 81/02/22
JONES 81/04/02
BLAKE 81/05/01
CLARK 81/06/09
TURNER 81/09/08
MARTIN 81/09/28
KING 81/11/17
JAMES 81/12/03
FORD 81/12/03
MILLER 82/01/23

--사원명, 급여, 커미션 조회~
1 select ename, sal, comm
2* from emp
SQL> /

ENAME SAL COMM


SMITH 800
ALLEN 1600 300
WARD 1250 500
JONES 2975
MARTIN 1250 1400
BLAKE 2850
CLARK 2450
KING 5000
TURNER 1500 0
JAMES 950
FORD 3000
MILLER 1300

12 rows selected.

--급여 많이 받는 순으로 정렬 조회~(내림차순!!)
1 select ename, sal, comm
2* from emp order by sal desc
SQL> /

ENAME SAL COMM


KING 5000
FORD 3000
JONES 2975
BLAKE 2850
CLARK 2450
ALLEN 1600 300
TURNER 1500 0
MILLER 1300
MARTIN 1250 1400
WARD 1250 500
JAMES 950
SMITH 800

12 rows selected.

null은 알수 없는 값, 미확정 된 값 이기 때문에
아무리 정렬을 해도 null이 먼저 출력된 다음에 확정된 값, 입력된 값들 만 가지고 정렬을 한다.
null 은 즉 무한대를 뜻하기도 한다. 그래서 먼저 출력.
null = ∞
*null은 무한대
*값에 null이 포함된 상태에서 숫자 오름차순이면
숫자 작 -> 큰 순으로 무한대이므로 가장 마지막 출력

--커미션 많이 받는 사원부터 출력
1 select ename, sal, comm
2* from emp order by comm desc
SQL> /

ENAME SAL COMM


SMITH 800
BLAKE 2850
FORD 3000
JAMES 950
KING 5000
JONES 2975
MILLER 1300
CLARK 2450
MARTIN 1250 1400
WARD 1250 500
ALLEN 1600 300
TURNER 1500 0

12 rows selected.

--급여 + comm 합 조회~==>null이 포함된 계산결과는 null

1 select ename, sal, comm, sal+comm
2* from emp
SQL> /

ENAME SAL COMM SAL+COMM


SMITH 800
ALLEN 1600 300 1900
WARD 1250 500 1750
JONES 2975
MARTIN 1250 1400 2650
BLAKE 2850
CLARK 2450
KING 5000
TURNER 1500 0 1500
JAMES 950
FORD 3000
MILLER 1300

12 rows selected.

SQL> ed
Wrote file afiedt.buf
위에 결과에서 내림차순 추가.
1 select ename, sal, comm, sal+comm
2* from emp order by ename desc
SQL> /

ENAME SAL COMM SAL+COMM


WARD 1250 500 1750
TURNER 1500 0 1500
SMITH 800
MILLER 1300
MARTIN 1250 1400 2650
KING 5000
JONES 2975
JAMES 950
FORD 3000
CLARK 2450
BLAKE 2850
ALLEN 1600 300 1900

12 rows selected.

-- nvl(표현식, null 대체값)함수 이용 해서 null 데이터 대체 하기
1 select ename, sal, comm, nvl(comm, 0)
2* from emp
SQL> /

ENAME SAL COMM NVL(COMM,0)


SMITH 800 0
ALLEN 1600 300 300
WARD 1250 500 500
JONES 2975 0
MARTIN 1250 1400 1400
BLAKE 2850 0
CLARK 2450 0
KING 5000 0
TURNER 1500 0 0
JAMES 950 0
FORD 3000 0
MILLER 1300 0

12 rows selected.

-- 대체 한 후에 더한 값 조회하여 출력 (ex. 커미션이 미확정된 사원의 경우 0으로 가정하여 급여와 커미션의 합을 구하세요.)
1 select ename, sal, comm, nvl(comm, 0), sal+nvl(comm, 0)
2* from emp
SQL> /

ENAME SAL COMM NVL(COMM,0) SAL+NVL(COMM,0)


SMITH 800 0 800
ALLEN 1600 300 300 1900
WARD 1250 500 500 1750
JONES 2975 0 2975
MARTIN 1250 1400 1400 2650
BLAKE 2850 0 2850
CLARK 2450 0 2450
KING 5000 0 5000
TURNER 1500 0 0 1500
JAMES 950 0 950
FORD 3000 0 3000
MILLER 1300 0 1300

12 rows selected.

-- 대체 한 후에 더한 값에 대한 컬럼 내림차순으로

1 select ename, sal, comm, nvl(comm, 0), sal+nvl(comm, 0)
2* from emp order by sal+nvl(comm, 0) desc
SQL> /

ENAME SAL COMM NVL(COMM,0) SAL+NVL(COMM,0)


KING 5000 0 5000
FORD 3000 0 3000
JONES 2975 0 2975
BLAKE 2850 0 2850
MARTIN 1250 1400 1400 2650
CLARK 2450 0 2450
ALLEN 1600 300 300 1900
WARD 1250 500 500 1750
TURNER 1500 0 0 1500
MILLER 1300 0 1300
JAMES 950 0 950
SMITH 800 0 800

12 rows selected.

-- nvl(표현식, null 대체값)
-- nvl함수 응용
-- nvl2(표현식, null 아닌값 대체값, null 대체값)
comm의 값이 null이 아닌 값은 20으로 대체하고 null이면 10으로 대체하여 출력

1 select ename, sal, comm, nvl(comm, 0), nvl2(comm, 20, 10)
2* from emp
SQL> /

ENAME SAL COMM NVL(COMM,0) NVL2(COMM,20,10)


SMITH 800 0 10
ALLEN 1600 300 300 20
WARD 1250 500 500 20
JONES 2975 0 10
MARTIN 1250 1400 1400 20
BLAKE 2850 0 10
CLARK 2450 0 10
KING 5000 0 10
TURNER 1500 0 0 20
JAMES 950 0 10
FORD 3000 0 10
MILLER 1300 0 10

12 rows selected.

*NULL관련(P.143)
-- nvl(표현식, null 대체값)
-- nvl2(표현식, null 아닌값 대체값, null 대체값)
-- NULLIF(표현식1, 표현식2)
표현식 1이 표현식 2와 같다면 null을 리턴
같지않다면 표현식1을 리턴

1 select ename, sal, comm, NULLIF(sal, comm)
2* from emp
SQL> /

ENAME SAL COMM NULLIF(SAL,COMM)


SMITH 800 800
ALLEN 1600 300 1600
WARD 1250 500 1250
JONES 2975 2975
MARTIN 1250 1400 1250
BLAKE 2850 2850
CLARK 2450 2450
KING 5000 5000
TURNER 1500 0 1500
JAMES 950 950
FORD 3000 3000
MILLER 1300 1300

12 rows selected.

--COALESCE(표현식1, 표현식2,.....)
NULL이 아닌 최초의 표현식을 리턴
두 컬럼 비교해서 한쪽이 null이면 다른 null이 아닌 값 출력하고
둘 다 null이 아니면 최초의 값을 출력한다.(처음 조회한값, 먼저 출력된 컬럼)

1 select ename, comm, sal, COALESCE(comm, sal)
2* from emp
SQL> /

ENAME COMM SAL COALESCE(COMM,SAL)


SMITH 800 800
ALLEN 300 1600 300
WARD 500 1250 500
JONES 2975 2975
MARTIN 1400 1250 1400
BLAKE 2850 2850
CLARK 2450 2450
KING 5000 5000
TURNER 0 1500 0
JAMES 950 950
FORD 3000 3000

ENAME COMM SAL COALESCE(COMM,SAL)


MILLER 1300 1300

12 rows selected.

---------------------------------곱하기 연산 추가 예제--------------------------------------

1 select ename, sal, sal13
2
from emp
SQL> /

ENAME SAL SAL*13


SMITH 800 10400
ALLEN 1600 20800
WARD 1250 16250
JONES 2975 38675
MARTIN 1250 16250
BLAKE 2850 37050
CLARK 2450 31850
KING 5000 65000
TURNER 1500 19500
JAMES 950 12350
FORD 3000 39000

ENAME SAL SAL*13


MILLER 1300 16900

12 rows selected.

SQL> ed
Wrote file afiedt.buf

1 select ename, sal, comm, sal13, (sal*13)+comm
2
from emp
SQL> /

ENAME SAL COMM SAL13 (SAL13)+COMM


SMITH 800 10400
ALLEN 1600 300 20800 21100
WARD 1250 500 16250 16750
JONES 2975 38675
MARTIN 1250 1400 16250 17650
BLAKE 2850 37050
CLARK 2450 31850
KING 5000 65000
TURNER 1500 0 19500 19500
JAMES 950 12350
FORD 3000 39000

ENAME SAL COMM SAL13 (SAL13)+COMM


MILLER 1300 16900

12 rows selected.

--공백값 까지 고려한 조회!!!
1 select ename, sal, comm, sal13, (sal*13)+nvl(comm, 0)
2
from emp
SQL> /

ENAME SAL COMM SAL13 (SAL13)+NVL(COMM,0)


SMITH 800 10400 10400
ALLEN 1600 300 20800 21100
WARD 1250 500 16250 16750
JONES 2975 38675 38675
MARTIN 1250 1400 16250 17650
BLAKE 2850 37050 37050
CLARK 2450 31850 31850
KING 5000 65000 65000
TURNER 1500 0 19500 19500
JAMES 950 12350 12350
FORD 3000 39000 39000

ENAME SAL COMM SAL13 (SAL13)+NVL(COMM,0)


MILLER 1300 16900 16900

12 rows selected.

--워급에 3% 더 준다.
1 select ename, sal, comm, sal13, (sal13)+nvl(comm, 0)+(sal0.03)
2
from emp
SQL> /

ENAME SAL COMM SAL13 (SAL13)+NVL(COMM,0)+(SAL*0.03)


SMITH 800 10400 10424
ALLEN 1600 300 20800 21148
WARD 1250 500 16250 16787.5
JONES 2975 38675 38764.25
MARTIN 1250 1400 16250 17687.5
BLAKE 2850 37050 37135.5
CLARK 2450 31850 31923.5
KING 5000 65000 65150
TURNER 1500 0 19500 19545
JAMES 950 12350 12378.5
FORD 3000 39000 39090

ENAME SAL COMM SAL13 (SAL13)+NVL(COMM,0)+(SAL*0.03)


MILLER 1300 16900 16939

12 rows selected.

--연봉 많은 사람부터 정렬!!!!

1 select ename, sal, comm, sal13, (sal13)+nvl(comm, 0)+(sal0.03)
2 from emp
3
order by (sal13)+nvl(comm, 0)+(sal0.03) desc
SQL> /

ENAME SAL COMM SAL13 (SAL13)+NVL(COMM,0)+(SAL*0.03)


KING 5000 65000 65150
FORD 3000 39000 39090
JONES 2975 38675 38764.25
BLAKE 2850 37050 37135.5
CLARK 2450 31850 31923.5
ALLEN 1600 300 20800 21148
TURNER 1500 0 19500 19545
MARTIN 1250 1400 16250 17687.5
MILLER 1300 16900 16939
WARD 1250 500 16250 16787.5
JAMES 950 12350 12378.5
SMITH 800 10400 10424

12 rows selected.

--위와 같은데 4라고 표현한것. 컬럼이 4번째 컬럼이기 때문에 이런식으로 표현 가능.. 하지만 좋은 방식은 아니다.
1 select ename, sal, comm, sal13, (sal13)+nvl(comm, 0)+(sal0.03)
2 from emp
3
order by 4 desc
SQL> /

ENAME SAL COMM SAL13 (SAL13)+NVL(COMM,0)+(SAL*0.03)


KING 5000 65000 65150
FORD 3000 39000 39090
JONES 2975 38675 38764.25
BLAKE 2850 37050 37135.5
CLARK 2450 31850 31923.5
ALLEN 1600 300 20800 21148
TURNER 1500 0 19500 19545
MILLER 1300 16900 16939
MARTIN 1250 1400 16250 17687.5
WARD 1250 500 16250 16787.5
JAMES 950 12350 12378.5
SMITH 800 10400 10424

--입력된 컬럼 명 바꾸기, 또는 별칭 별명 붙이기(한글로붙이면 깨진다.)
"annual income" 공백을 넣을거면 따옴표로 묶어야 하고 공백을 안쓸거면 무조건 다 붙여 써야한다. annual_income 언더바는 인식 가능

1 select ename, sal, comm, sal13, (sal13)+nvl(comm, 0)+(sal0.03) "annual income"
2 from emp
3
order by (sal13)+nvl(comm, 0)+(sal0.03) desc
SQL> /

ENAME SAL COMM SAL*13 annual income


KING 5000 65000 65150
FORD 3000 39000 39090
JONES 2975 38675 38764.25
BLAKE 2850 37050 37135.5
CLARK 2450 31850 31923.5
ALLEN 1600 300 20800 21148
TURNER 1500 0 19500 19545
MARTIN 1250 1400 16250 17687.5
MILLER 1300 16900 16939
WARD 1250 500 16250 16787.5
JAMES 950 12350 12378.5
SMITH 800 10400 10424

12 rows selected.

--별칭을 붙이면 별칭으로 정렬하면 된다.

1 select ename, sal, comm, sal13, (sal13)+nvl(comm, 0)+(sal0.03) "annual income"
2 from emp
3
order by "annual income" desc
SQL> /

ENAME SAL COMM SAL*13 annual income


KING 5000 65000 65150
FORD 3000 39000 39090
JONES 2975 38675 38764.25
BLAKE 2850 37050 37135.5
CLARK 2450 31850 31923.5
ALLEN 1600 300 20800 21148
TURNER 1500 0 19500 19545
MARTIN 1250 1400 16250 17687.5
MILLER 1300 16900 16939
WARD 1250 500 16250 16787.5
JAMES 950 12350 12378.5
SMITH 800 10400 10424

--기호 대소문자 구분 가능!! as는 생략가능

1 select ename, sal, comm, sal13, (sal13)+nvl(comm, 0)+(sal0.03) as "Annual Income!!@@###"
2 from emp
3
/

SQL> /

ENAME SAL COMM SAL*13 Annual Income!!@@###


KING 5000 65000 65150
FORD 3000 39000 39090
JONES 2975 38675 38764.25
BLAKE 2850 37050 37135.5
CLARK 2450 31850 31923.5
ALLEN 1600 300 20800 21148
TURNER 1500 0 19500 19545
MARTIN 1250 1400 16250 17687.5
MILLER 1300 16900 16939
WARD 1250 500 16250 16787.5
JAMES 950 12350 12378.5
SMITH 800 10400 10424

"alias(별칭)
:컬럼의 별칭. 복잡한 컬럼을 명료하게 명명. 이해도를 높이고 간결하게 사용하고자 하는 목적
문법> 컬럼명 [as] 별칭 ---> order by 절에서 정렬을 해줄떄 사용된다!!!!!!!!!!!!!!!
큰 따옴표로 묶었을 때 ->"별칭" : 공백O, 대소문자 구분, 특수문자
큰 따옴표로 안 묶었을 때 -> 별칭:공백X, 대소문자 구분X, 특수문자X

-- 사원번호가 7369인 사원번호,사원명조회

select empno, ename
2 from emp
3* where empno=7369;

*조건

*논리연산자
NOT
OR => 나열된 조건중에 단 1개이상을 만족 시=> true리턴
AND => 나열된 모든 조건을 만족 시=> true리턴
단, 1개의 조건이라도 불만족 시 => false리턴

-- 부서번호 30인 부서에 근무하면서 급여가 1250 이상인 사번, 이름, 입사일, 부서번호 조회
1 select empno, ename, hiredate, deptno, sal
2 from emp
3* where deptno=30 and sal>=1250
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO        SAL

  7499 ALLEN                81/02/20         30       1600
  7521 WARD                 81/02/22         30       1250
  7654 MARTIN               81/09/28         30       1250
  7698 BLAKE                81/05/01         30       2850
  7844 TURNER               81/09/08         30       1500

--정렬까지 추가!

1 select empno, ename, hiredate, deptno, sal
2 from emp
3 where deptno=30 and sal>=1250
4* order by deptno asc, sal asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO        SAL

  7654 MARTIN               81/09/28         30       1250
  7521 WARD                 81/02/22         30       1250
  7844 TURNER               81/09/08         30       1500
  7499 ALLEN                81/02/20         30       1600
  7698 BLAKE                81/05/01         30       2850

--급여가 1250이상이면서 1600이하 조건 추가

1 select empno, ename, hiredate, deptno, sal
2 from emp
3 where deptno=30 and sal>=1250 and sal<=1600
4* order by deptno asc, sal asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO        SAL

  7521 WARD                 81/02/22         30       1250
  7654 MARTIN               81/09/28         30       1250
  7844 TURNER               81/09/08         30       1500
  7499 ALLEN                81/02/20         30       1600

*Between A and B : A와 B사이 --->결과는 위와 동일 (교재 116)
--급여가 1250이상이상이면서 급여가 1600이하
급여가 1250이상~1600이하

1 select empno, ename, hiredate, deptno, sal
2 from emp
3 where deptno=30 and sal BETWEEN 1250 and 1600
4* order by deptno asc, sal asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO        SAL

  7521 WARD                 81/02/22         30       1250
  7654 MARTIN               81/09/28         30       1250
  7844 TURNER               81/09/08         30       1500
  7499 ALLEN                81/02/20         30       1600/

*Between A and B : A와 B사이
-- 부서번호 30인 부서에 근무하는 사원중 급여가 1250 이상이고 1600이하이면서
입사일이 81년 9월에 입사한 사번, 이름, 입사일, 부서번호 조회

hiredate>='81/09/01' AND hiredate<='81/09/30'
hiredate BETWEEN '81/09/01' AND '81/09/30'

1 select empno, ename, hiredate, deptno
2 from emp
3 where deptno = 30 and sal BETWEEN 1250 AND 1600 and hiredate BETWEEN '81/09/01' AND '81/09/30'
4* order by deptno asc, sal asc

1 select empno, ename, hiredate, deptno
2 from emp
3 where deptno = 30 and (sal BETWEEN 1250 AND 1600) and (hiredate BETWEEN '81/09/01' AND '81/09/30')
4* order by deptno asc, sal asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO

  7654 MARTIN               81/09/28         30
  7844 TURNER               81/09/08         30

--급여가 1250이거나 1600또는 3000아니면 4000 받는 사원조회
1 select empno, ename, hiredate, deptno, sal
2 from emp
3 where sal = 1250 or sal = 1600 or sal = 3000 or sal = 4000
4* order by deptno asc, sal asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO        SAL

  7902 FORD                 81/12/03         20       3000
  7521 WARD                 81/02/22         30       1250
  7654 MARTIN               81/09/28         30       1250
  7499 ALLEN                81/02/20         30       1600

--IN(값1, 값2....값N)=>()안에 나열된 값과 일치
//위와 결과 동일
//in 은 괄호 안에 열거된 것과 일치되는 것을 모두 나열해라

1 select empno, ename, hiredate, deptno, sal
2 from emp
3 where sal in(1250, 1600, 3000, 4000)
4* order by deptno asc, sal asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO        SAL

  7902 FORD                 81/12/03         20       3000
  7521 WARD                 81/02/22         30       1250
  7654 MARTIN               81/09/28         30       1250
  7499 ALLEN                81/02/20         30       1600

--NOT IN(값1, 값2....값N)=>()안에 나열된 값과 일치하지 않는 값 나열
//
//NOT in 은 괄호 안에 열거된 것과 일치되는 것 외에 모두 나열해라
1 select empno, ename, hiredate, deptno, sal
2 from emp
3 where NOT (sal in(1250, 1600, 3000, 4000))
4* order by deptno asc, sal asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO        SAL

  7934 MILLER               82/01/23         10       1300
  7782 CLARK                81/06/09         10       2450
  7839 KING                 81/11/17         10       5000
  7369 SMITH                80/12/17         20        800
  7566 JONES                81/04/02         20       2975
  7900 JAMES                81/12/03         30        950
  7844 TURNER               81/09/08         30       1500
  7698 BLAKE                81/05/01         30       2850

  //결과는 동일

1 select empno, ename, hiredate, deptno, sal
2 from emp
3 where sal not in(1250, 1600, 3000, 4000)
4* order by sal asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO        SAL

  7369 SMITH                80/12/17         20        800
  7900 JAMES                81/12/03         30        950
  7934 MILLER               82/01/23         10       1300
  7844 TURNER               81/09/08         30       1500
  7782 CLARK                81/06/09         10       2450
  7698 BLAKE                81/05/01         30       2850
  7566 JONES                81/04/02         20       2975
  7839 KING                 81/11/17         10       5000

8 rows selected.

--BETWEEN에 NOT연산자 추가 예제 (NOT BETWEEN A AND B: A와 B사이가 아닌)
--급여가 1250~1600 사이가 아닌 사원 조회
1 select empno, ename, hiredate, deptno, sal
2 from emp
3 where NOT(sal BETWEEN 1250 AND 1600)
4* order by deptno asc, sal asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO        SAL

  7782 CLARK                81/06/09         10       2450
  7839 KING                 81/11/17         10       5000
  7369 SMITH                80/12/17         20        800
  7566 JONES                81/04/02         20       2975
  7902 FORD                 81/12/03         20       3000
  7900 JAMES                81/12/03         30        950
  7698 BLAKE                81/05/01         30       2850

    //결과는 위와 동일.

1 select empno, ename, hiredate, deptno, sal
2 from emp
3 where sal NOT BETWEEN 1250 AND 1600
4* order by deptno asc, sal asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO        SAL

  7782 CLARK                81/06/09         10       2450
  7839 KING                 81/11/17         10       5000
  7369 SMITH                80/12/17         20        800
  7566 JONES                81/04/02         20       2975
  7902 FORD                 81/12/03         20       3000
  7900 JAMES                81/12/03         30        950
  7698 BLAKE                81/05/01         30       2850

7 rows selected.

*NOT 연산자
-- 부서번호 30인 부서에 근무하는 사원중 급여가 1250 이상이고 1600이하이면서
입사일이 81년 9월에 입사한 사람을 빼고!!! 사번, 이름, 입사일, 부서번호 조회

1 select empno, ename, hiredate, deptno
2 from emp
3 where NOT(deptno = 30 and (sal BETWEEN 1250 AND 1600) and (hiredate BETWEEN '81/09/01' AND '81/09/30'))
4* order by deptno asc, sal asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO

  7934 MILLER               82/01/23         10
  7782 CLARK                81/06/09         10
  7839 KING                 81/11/17         10
  7369 SMITH                80/12/17         20
  7566 JONES                81/04/02         20
  7902 FORD                 81/12/03         20
  7900 JAMES                81/12/03         30
  7521 WARD                 81/02/22         30
  7499 ALLEN                81/02/20         30
  7698 BLAKE                81/05/01         30

10 rows selected.

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&먼저 진행했던 논리연산자 쿼리&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
--research 부서 또는 부서번호가 10인 부서에 대한 정보 조회
1 select *
2 from dept
3 where dname = 'RESEARCH' or deptno = 10
4* order by dname asc
SQL> /

DEPTNO DNAME                        LOC

    10 ACCOUNTING                   NEW YORK
    20 RESEARCH                     DALLAS

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
-- 달라스 또는 뉴욕에 있는 부서는?
SQL> select *
2 from dept
3 where loc = 'DALLAS' or loc = 'NEW YORK';

DEPTNO DNAME                        LOC

    10 ACCOUNTING                   NEW YORK
    20 RESEARCH                     DALLAS

UPPER 함수에 오름차순 까지 사용
1 select *
2 from dept
3 where loc = UPPER('dallas') or loc = UPPER('new york')
4* order by dname asc
SQL> .
SQL> /

DEPTNO DNAME                        LOC

    10 ACCOUNTING                   NEW YORK
    20 RESEARCH                     DALLAS

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
--사번, 사원명, 급여, 입사일 조회
1 select empno, ename, sal, hiredate
2* from emp
SQL> /

 EMPNO ENAME                       SAL HIREDATE

  7369 SMITH                       800 80/12/17
  7499 ALLEN                      1600 81/02/20
  7521 WARD                       1250 81/02/22/
  7566 JONES                      2975 81/04/02
  7654 MARTIN                     1250 81/09/28
  7698 BLAKE                      2850 81/05/01
  7782 CLARK                      2450 81/06/09
  7839 KING                       5000 81/11/17
  7844 TURNER                     1500 81/09/08
  7900 JAMES                       950 81/12/03
  7902 FORD                       3000 81/12/03
  7934 MILLER                     1300 82/01/23

12 rows selected.

--7369이거나, 급여가 3000이상인 사원 조회
1 select empno, ename, sal, hiredate
2 from emp
3* where empno=7369 or sal>=3000
SQL> /

 EMPNO ENAME                       SAL HIREDATE

  7369 SMITH                       800 80/12/17
  7839 KING                       5000 81/11/17
  7902 FORD                       3000 81/12/03

--위에 조건에 입사일이 81/06/25 이후에 입사한 사원 추가
1 select empno, ename, sal, hiredate
2 from emp
3* where empno=7369 or sal>=3000 or hiredate>='81/06/26'
SQL> /

 EMPNO ENAME                       SAL HIREDATE

  7369 SMITH                       800 80/12/17
  7654 MARTIN                     1250 81/09/28
  7839 KING                       5000 81/11/17
  7844 TURNER                     1500 81/09/08
  7900 JAMES                       950 81/12/03
  7902 FORD                       3000 81/12/03
  7934 MILLER                     1300 82/01/23

7 rows selected.

--위에 조건에 급여 오름차순 추가!!!!
1 select empno, ename, sal, hiredate
2 from emp
3 where empno=7369 or sal>=3000 or hiredate>='81/06/26'
4* order by sal asc
SQL> /

 EMPNO ENAME                       SAL HIREDATE

  7369 SMITH                       800 80/12/17
  7900 JAMES                       950 81/12/03
  7654 MARTIN                     1250 81/09/28
  7934 MILLER                     1300 82/01/23
  7844 TURNER                     1500 81/09/08
  7902 FORD                       3000 81/12/03
  7839 KING                       5000 81/11/17

7 rows selected.
--위에 조건에 부서번호가 30인 사람까지 추가 출력.!!! 그리고 컬럼도 추가!
1 select deptno, empno, ename, sal, hiredate
2 from emp
3 where empno=7369 or sal>=3000 or hiredate>='81/06/26' or deptno=30
4* order by sal asc
SQL> /

DEPTNO      EMPNO ENAME                       SAL HIREDATE

    20       7369 SMITH                       800 80/12/17
    30       7900 JAMES                       950 81/12/03
    30       7521 WARD                       1250 81/02/22
    30       7654 MARTIN                     1250 81/09/28
    10       7934 MILLER                     1300 82/01/23
    30       7844 TURNER                     1500 81/09/08
    30       7499 ALLEN                      1600 81/02/20
    30       7698 BLAKE                      2850 81/05/01
    20       7902 FORD                       3000 81/12/03
    10       7839 KING                       5000 81/11/17

10 rows selected.

위에 조건에서 1차로 부서번호 오름차순으로 정렬하고 2차로 그안에서 부서번호 같은 애들끼리는 연봉순으로 오름차순 정렬해!
1 select empno, ename, deptno, sal, hiredate
2 from emp
3 where empno=7369 or sal>=3000 or hiredate>='81/06/26' or deptno=30
4* order by deptno asc, sal asc
SQL> /

 EMPNO ENAME                    DEPTNO        SAL HIREDATE

  7934 MILLER                       10       1300 82/01/23
  7839 KING                         10       5000 81/11/17
  7369 SMITH                        20        800 80/12/17
  7902 FORD                         20       3000 81/12/03
  7900 JAMES                        30        950 81/12/03
  7521 WARD                         30       1250 81/02/22
  7654 MARTIN                       30       1250 81/09/28
  7844 TURNER                       30       1500 81/09/08
  7499 ALLEN                        30       1600 81/02/20
  7698 BLAKE                        30       2850 81/05/01

10 rows selected.

-- 사원번호가 7369이거나 급여가 3000이상 또는 입사일이 81/06/25 이후에 입사한
사원번호, 사원명, 부서번호, 급여, 입사일을 부서번호 오름차순, 부서번호가 같으면 급여를 적게받는 사원부터, 동일부서내 급여도 같다면 입사일이 늦은 사원부터 정렬 하여 출력!

1 select empno, ename, deptno, sal, hiredate
2 from emp
3 where empno=7369 or sal>=3000 or hiredate>='81/06/26' or deptno=30
4* order by deptno asc, sal asc, hiredate desc
SQL> /

 EMPNO ENAME                    DEPTNO        SAL HIREDATE

  7934 MILLER                       10       1300 82/01/23
  7839 KING                         10       5000 81/11/17
  7369 SMITH                        20        800 80/12/17
  7902 FORD                         20       3000 81/12/03
  7900 JAMES                        30        950 81/12/03
  7654 MARTIN                       30       1250 81/09/28
  7521 WARD                         30       1250 81/02/22
  7844 TURNER                       30       1500 81/09/08
  7499 ALLEN                        30       1600 81/02/20
  7698 BLAKE                        30       2850 81/05/01

10 rows selected.

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

*비교연산자
a=b : 같다
a!=b, a<>b : 같지않다 (같지 않다는 것은 크거나 작다는 뜻)
a>b : a는 b보다 크다 (초과)
a>=b : a는 b보다 크거나 같다 (이상)
a<b : a는 b보다 작다 (미만)
a<=b : a는 b보다 작거나 같다 (이하)

주의. 문자는 ''(작은따옴표)로 감싸야 한다.

--81년 2월 20일에 입사한 사원번호, 이름, 입사일 조회

1 select empno, ename, hiredate
2* from emp where hiredate = '81/02/20'
2* from emp where hiredate = '81-02-20' --->이것도 되네????
SQL> /

 EMPNO ENAME                HIREDATE

  7499 ALLEN                81/02/20

--사원명이 FORD인 사원번호, 사원이름을 조회!!!
1 select empno, ename
2 from emp
3* where ename='FORD'
SQL> /

 EMPNO ENAME

  7902 FORD

1 select empno, ename
2 from emp
3* where empno!=7369
SQL> 사번이 7369와 같지 않은 것 출력

 EMPNO ENAME

  7499 ALLEN
  7521 WARD
  7566 JONES
  7654 MARTIN
  7698 BLAKE
  7782 CLARK
  7839 KING
  7844 TURNER
  7900 JAMES
  7902 FORD
  7934 MILLER

--같지 않다는 것은 크거나 작다는 뜻이므로!!!(위와 동일한 결과 출력)
1 select empno, ename
2 from emp
3* where empno<>7369
SQL> /

 EMPNO ENAME

  7499 ALLEN
  7521 WARD
  7566 JONES
  7654 MARTIN
  7698 BLAKE
  7782 CLARK
  7839 KING
  7844 TURNER
  7900 JAMES
  7902 FORD
  7934 MILLER

11 rows selected.

--문자데이터는 맞춤법, 스펠링, 대소문자가 정확히 일치해야한다.
--대소문자 구분 해서 정확히 쿼리문 입력 해야한다.
1 select empno, ename
2 from emp
3* where ename='Ford'
SQL> /

no rows selected

--UPPER()대문자로 변환해주는 함수 사용

SQL> ed
Wrote file afiedt.buf

1 select empno, ename
2 from emp
3* where ename=UPPER('Ford')
SQL> /

 EMPNO ENAME

  7902 FORD

--실제 출력되는건 셀렉트 절에 있는 empno, ename 이므로 ename을 LOWER()함수 처리하면 된다.

1 select empno, ename, LOWER(ename)
2 from emp
3* where ename=UPPER('Ford') --->>>안에 유저가 입력한 Ford는 입력값이라 보면된다
SQL> /

 EMPNO ENAME                LOWER(ENAME)

  7902 FORD                 ford

INITCAP(char) : char의 첫 문자는 대문자로, 나머지는 소문자로 반환​
첫 문자 인식 기준은 공백 그리고 알파벳과 숫자를 제외한 문자​
LOWER(char) : 소문자 변환 후 반환​
UPPER(char) : 대문자 변환 후 반환​

--대소문자 상관없이 사원명이 FORD인 사원의 이름 출력되는건
-- ename => 사원명컬럼에 입력된 그대로 출력
INITCAP(ename) => 첫 문자는 대문자로 출력
LOWER(ename) => 소문자 변환 후, 출력
UPPPER('Ford') => 대문자 변환 후, 출력

1 select ename, INITCAP(ename), LOWER(ename), UPPER('Ford')
2 from emp
3* where ename=UPPER('Ford')
SQL> /.

ENAME INITCAP(ENAME) LOWER(ENAME) UPPER('F


FORD Ford ford FORD

-- 별명쓰려면 정렬문 까지 써야한다.별 의미는 없다.

1 select ename, INITCAP(ename), LOWER(ename) as "ename"
2 from emp
3 where ename=UPPER('Ford')
4* order by "ename" desc
SQL> /

ENAME INITCAP(ENAME) ename


FORD Ford ford

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

-------*|| 연결연산자(concat과 유사) (교재 p112)

SQL> select deptno, dname
2 from dept
3 order by dname asc;

DEPTNO DNAME

    10 ACCOUNTING
    40 OPERATIONS
    20 RESEARCH
    30 SALES

SQL> ed
Wrote file afiedt.buf

1 select deptno || dname
2 from dept
3* order by dname asc
SQL> /

DEPTNO||DNAME

10ACCOUNTING
40OPERATIONS
20RESEARCH
30SALES

SQL> ed
Wrote file afiedt.buf

1 select deptno || ' : ' || dname
2 from dept
3* order by dname asc
SQL> /

DEPTNO||':'||DNAME

10 : ACCOUNTING
40 : OPERATIONS
20 : RESEARCH
30 : SALES

---부서번호 40 을 찾는 조건 where 절까지 추가
1 select deptno || ' : ' || dname
2 from dept
3 where deptno = 40
4* order by dname asc
SQL> /

DEPTNO||':'||DNAME

40 : OPERATIONS

--부서번호가 40이거나 30인 부서번호, 부서명 조회
1 select deptno, dname
2 from dept
3 where deptno = 40 or deptno=30
4* order by dname asc
SQL> /

DEPTNO DNAME

    40 OPERATIONS
    30 SALES

--concat()
CONCAT(char1, char2) : 두 문자를 붙여 반환​ (교재 p131)
예) CONCAT('I Have', ' A Dream')  I Have A Dream​

1 select 'empName:', ename
2* from emp
SQL> /

'EMPNAME:' ENAME


empName: SMITH
empName: ALLEN
empName: WARD
empName: JONES
empName: MARTIN
empName: BLAKE
empName: CLARK
empName: KING
empName: TURNER
empName: JAMES
empName: FORD
empName: MILLER

12 rows selected.

SQL>
SQL>
SQL> ed
Wrote file afiedt.buf

1 select concat('empName: ', ename)
2* from emp
SQL> /

CONCAT('EMPNAME:',ENAME)

empName: SMITH
empName: ALLEN
empName: WARD
empName: JONES
empName: MARTIN
empName: BLAKE
empName: CLARK
empName: KING
empName: TURNER
empName: JAMES
empName: FORD
empName: MILLER

12 rows selected.

1 select concat(ename, job)
2* from emp
SQL> /

CONCAT(ENAME,JOB)

SMITHCLERK
ALLENSALESMAN
WARDSALESMAN
JONESMANAGER
MARTINSALESMAN
BLAKEMANAGER
CLARKMANAGER
KINGPRESIDENT
TURNERSALESMAN
JAMESCLERK
FORDANALYST
MILLERCLERK

--함수안에 함수가 있으면
=> 함수가 중첩되어있으면
=> 가장 안쪽에 위치한 함수부터 실행된다.
--아래에서는 안쪽에 위치한 concat(ename, ' : ')부터 실행된다.
'MILLER : '
--바깥쪽에 있는 concat('MILLER : ', job)이 실행되었다.

--concat함수 2번 쓰면 컬럼끼리 중간에 문자를 삽입하여 이을수 있다.
1 select concat(concat(ename, +' : '), job)
2* from emp
SQL> /

CONCAT(CONCAT(ENAME,+':'),JOB)

SMITH : CLERK
ALLEN : SALESMAN
WARD : SALESMAN
JONES : MANAGER
MARTIN : SALESMAN
BLAKE : MANAGER
CLARK : MANAGER
KING : PRESIDENT
TURNER : SALESMAN
JAMES : CLERK
FORD : ANALYST
MILLER : CLERK

12 rows selected.

*NULL조건
--커미션이 미확정된 사원조회

=>커미션이 null인 사원조회
where comm not in(0, 300, 500, 1400)
null은 = 이것이 아니라 is로 해야한다.

1 select empno, ename, hiredate, deptno, sal, comm
2 from emp
3 where comm is NULL
4* order by comm asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO        SAL       COMM

  7369 SMITH                80/12/17         20        800
  7566 JONES                81/04/02         20       2975
  7698 BLAKE                81/05/01         30       2850
  7934 MILLER               82/01/23         10       1300
  7839 KING                 81/11/17         10       5000
  7900 JAMES                81/12/03         30        950
  7902 FORD                 81/12/03         20       3000
  7782 CLARK                81/06/09         10       2450

8 rows selected.

is NOT NULL
=>커미션이 확정된 사원조회
1 select empno, ename, hiredate, deptno, sal, comm
2 from emp
3 where comm is NOT NULL
4
order by comm asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO        SAL       COMM

  7844 TURNER               81/09/08         30       1500          0
  7499 ALLEN                81/02/20         30       1600        300
  7521 WARD                 81/02/22         30       1250        500
  7654 MARTIN               81/09/28         30       1250       1400

*애매모호한 조건
LIKE '~~'

*wild card
*wild card의 와 %가 아닌 단순한 특수문자임을 표현하기 위한 방법
문법> *escape '문자' 또는 '특수문자', '기호'
'문자'
, '문자'% 이런식으로 적용

% : 0글자 이상의 자릿수
_ : 1글자 자릿수
LIKE 'T%' : 대문자 T로 시작하는 .....거 다 찾아라

~ 몇글자가 되든지
LIKE '%R' : 대문자 R로 끝나는 .....거 다 찾아라

몇글자가 되든지

특정글자로 시작

1 select empno, ename, hiredate, deptno, sal, comm
2 from emp
3 where ename LIKE 'T%'
4* order by comm asc
SQL> /

 EMPNO ENAME                HIREDATE     DEPTNO        SAL       COMM

  7844 TURNER               81/09/08         30       1500          0

-- 이름에 A가 포함된 사원명 조회~
1 select empno, ename
2 from emp
3 where ename LIKE '%A%'
4* order by comm asc
SQL> /

 EMPNO ENAME

  7499 ALLEN
  7521 WARD
  7654 MARTIN
  7698 BLAKE
  7782 CLARK
  7900 JAMES

6 rows selected.

-- 이름에 2번쨰 글자가 A인 사원명 조회 --->_언더바를 이용

1 select empno, ename
2 from emp
3 where ename LIKE '_A%'
4* order by comm asc
SQL> /

 EMPNO ENAME

  7521 WARD
  7654 MARTIN
  7900 JAMES

--이름 'M'으로 시작해서 'R'로 끝나는 사원명 조회~
1 select empno, ename
2 from emp
3 where ename LIKE 'M%R'
4* order by comm asc
SQL>
SQL> /

 EMPNO ENAME

  7934 MILLER

--이름이 'M'으로 시작해서 'R'로 끝나는 이름 글자수가 6인 사원명 조회
1 select empno, ename
2 from emp
3 where ename LIKE 'M____R'
4* order by comm asc
SQL> /

 EMPNO ENAME

  7934 MILLER

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

--사번, 사원명, 급여, 업무
--업무 오름차순

SQL> select empno, ename, sal, job
2 from emp
3 order by job asc;

 EMPNO ENAME                       SAL JOB

  7902 FORD                       3000 ANALYST
  7934 MILLER                     1300 CLERK
  7900 JAMES                       950 CLERK
  7369 SMITH                       800 CLERK
  7566 JONES                      2975 MANAGER
  7698 BLAKE                      2850 MANAGER
  7782 CLARK                      2450 MANAGER
  7839 KING                       5000 PRESIDENT
  7844 TURNER                     1500 SALESMAN
  7521 WARD                       1250 SALESMAN
  7499 ALLEN                      1600 SALESMAN
  7654 MARTIN                     1250 SALESMAN

12 rows selected.

GROUP BY
--동일 업무를 하는 사원들의 사번, 사원명, 급여, JOB조회 -->그룹바이로 할 수 없음.
1 select empno, ename, sal, job
2 from emp
3
group by job
SQL> /
select empno, ename, sal, job
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

============> 이유 : GROUP BY 절에서 사용된 컬럼이 아닌 일반 컬럼은 select절에서 작성하면 안된다.

            해결방법  : GROUP BY 

그룹바이에 기준이 되는 컬럼만 셀렉트절에 쓸 수 있다!!!!!! 나머지 컬럼은 모두 삭제 해야한다.
1 select job
2 from emp
3* group by job
SQL> /

JOB

CLERK
SALESMAN
PRESIDENT
MANAGER
ANALYST

//대신에 count 함수를 이용해서 카운트를 해준다. --->업무별 사원수 조회! 그럴때 그룹바이와 카운트를 쓴다.
1 select job, count(job)
2 from emp
3* group by job
SQL> /

JOB COUNT(JOB)


CLERK 3
SALESMAN 4
PRESIDENT 1
MANAGER 3
ANALYST 1

---업무별 사원수 조회, 최고급여, 최저급여, 총급여, 평균급여 조회~
1 select job, count(job), max(sal), min(sal), sum(sal), avg(sal)
2 from emp
3* group by job
SQL> /

JOB COUNT(JOB) MAX(SAL) MIN(SAL) SUM(SAL) AVG(SAL)


CLERK 3 1300 800 3050 1016.66667
SALESMAN 4 1600 1250 5600 1400
PRESIDENT 1 5000 5000 5000 5000
MANAGER 3 2975 2450 8275 2758.33333
ANALYST 1 3000 3000 3000 3000

//정렬까지 ~
1 select job, count(job), max(sal), min(sal), sum(sal), avg(sal)
2 from emp
3 group by job
4* order by count(job) desc
SQL> /

JOB COUNT(JOB) MAX(SAL) MIN(SAL) SUM(SAL) AVG(SAL)


SALESMAN 4 1600 1250 5600 1400
MANAGER 3 2975 2450 8275 2758.33333
CLERK 3 1300 800 3050 1016.66667
ANALYST 1 3000 3000 3000 3000
PRESIDENT 1 5000 5000 5000 5000

--부서별 사원수, 부서에서 제일 많이 받는 최고급여, 최저급여, 부서별 평균급여
1 select deptno, count(deptno), max(sal), min(sal), sum(sal), avg(sal)
2 from emp
3 group by deptno
4* order by avg(sal) desc
SQL> /

DEPTNO COUNT(DEPTNO)   MAX(SAL)   MIN(SAL)   SUM(SAL)   AVG(SAL)

    10             3       5000       1300       8750 2916.66667
    20             3       3000        800       6775 2258.33333
    30             6       2850        950       9400 1566.66667

--count(컬럼명) : 해당컬럼의 확정값을 카운트 한다.(NULL)제외
--count(*) : null푸함해서 모든 값을 카운트 한다.
==>아래코드에서 comm에는 (0, 300, 500, 1400) 데이터만 카운트해서 4라는 결과가 나온다.

count(deptno), count(job), count(*) ..... 모두 같은 값.
기준은 DEPTNO이고 컬럼에 입력된 값의 개수로 카운트 하기 때문에 comm 빼고는 모두 같은 값 출력 (확정값만 카운트한다! NULL은 미확정값)
*은 NULL이든 아니든 다 카운트한다!

1 select count(), count(empno), count(ename), count(job), count(sal), count(comm), count(deptno)
2
from emp
SQL> /

COUNT(*) COUNT(EMPNO) COUNT(ENAME) COUNT(JOB) COUNT(SAL) COUNT(COMM) COUNT(DEPTNO)


    12           12           12         12         12           4            12

※그래서 카운트 할때는 count(*)보다는 데이터가 다 들어가 있는 컬럼을 카운트 하는게 좋다. NOT NULL PK 컬럼!!! empno

--동일부서에 근무하는 사원조회
1 select deptno, count(deptno)
2 from emp
3* group by deptno
SQL> /

DEPTNO COUNT(DEPTNO)

    30             6
    20             3
    10             3

--동일부서내 같은 일을 하는 사원 조회
1 select deptno, job, count(job)
2 from emp
3 group by deptno, job
4* order by deptno asc, job asc
SQL> /

DEPTNO JOB                COUNT(JOB)

    10 CLERK                       1
    10 MANAGER                     1
    10 PRESIDENT                   1
    20 ANALYST                     1
    20 CLERK                       1
    20 MANAGER                     1
    30 CLERK                       1
    30 MANAGER                     1
    30 SALESMAN                    4

9 rows selected.

DEPTNO 를 그룹으로 묶은 결과내에서 동일한 JOB을 가진 사람들의 수를 count한다..
근데 1명이어도... 출력... 앞에서 먼저 필터되어서 다 출력 하는듯???

즉먼저 부서번호로 필터링 된 인원들의 job별로 인원을 출력!~

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
분석 함수 !!!!!보고서 작성 시 매우 중요!
1 select deptno, job, count(job)
2 from emp
3 group by cube(deptno, job)
4* order by deptno asc, job asc
SQL> /

DEPTNO JOB                COUNT(JOB)

    10 CLERK                       1
    10 MANAGER                     1
    10 PRESIDENT                   1
    10                             3
    20 ANALYST                     1
    20 CLERK                       1
    20 MANAGER                     1
    20                             3
    30 CLERK                       1
    30 MANAGER                     1
    30 SALESMAN                    4
    30                             6
       ANALYST                     1
       CLERK                       3
       MANAGER                     3
       PRESIDENT                   1
       SALESMAN                    4
                                  12

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1 select deptno, job, count(job)
2 from emp
3 group by rollup(deptno, job)
4* order by deptno asc, job asc
SQL> /

DEPTNO JOB                COUNT(JOB)

    10 CLERK                       1
    10 MANAGER                     1
    10 PRESIDENT                   1
    10                             3
    20 ANALYST                     1
    20 CLERK                       1
    20 MANAGER                     1
    20                             3
    30 CLERK                       1
    30 MANAGER                     1
    30 SALESMAN                    4
    30                             6
                                  12

13 rows selected.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  • distict : 중복되는 데이터는 한 번만 출력하기
  • -job을 종류별로 조회
    1 select distinct job
    2 from emp
    3* order by job asc
    SQL> /

JOB

ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN

--사원들이 근무하는 부서를 종류별로 조회~ ( not null 왜 넣은 이해 안감);;;
select distinct deptno
from emp
where deptno is NOT NULL
order by deptno asc
SQL> /

DEPTNO

    10
    20
    30

--->>--->> dept 테이블로 해야한다고 생각;;;; (그런데 이러면 distinct를 안써도 된다. 부서가 무조건 1개씩만 있는 테이블이라서)
1 select distinct deptno, dname
2 from dept
3 where deptno is NOT NULL
4* order by deptno asc
SQL> /

DEPTNO DNAME

    10 ACCOUNTING
    20 RESEARCH
    30 SALES
    40 OPERATIONS
    90 dept90
    91 dept91
    92 dept_92
    93 dept%93

8 rows selected.

--부서별로 근무하는 사원수, 급여총합, 평균급여를 사원수가 많은 부서부터 출력
1 select deptno, count(empno), sum(sal), avg(sal)
2 from emp
3 group by deptno
4* order by count(empno) desc
SQL> /

DEPTNO COUNT(EMPNO)   SUM(SAL)   AVG(SAL)

    30            6       9400 1566.66667
    10            3       8750 2916.66667
    20            3       6775 2258.33333

empno가 NOT NULL 컬럼이기 때문에 수를 셀때는 이런 컬럼을 써주는 것이 좋다.

1 select deptno, count(empno), sum(sal), avg(sal), ceil(avg(sal)), floor(avg(sal))
2 from emp
3 group by deptno
4* order by count(empno) desc
SQL> /

DEPTNO COUNT(EMPNO)   SUM(SAL)   AVG(SAL) CEIL(AVG(SAL)) FLOOR(AVG(SAL))

    30            6       9400 1566.66667           1567            1566
    10            3       8750 2916.66667           2917            2916
    20            3       6775 2258.33333           2259            2258

평균 구한 값에 대한 올림값 버림값!!!! 더욱 더 보기 편하게!!
소수점 첫째 자리를 DB에서는 0번째 자리로 처리 해야한다.

*ceil() : 소수점 값에 대해서 올림 1566.66667 1567
*floor() : 소수점 값에 대해서 내림 1566.66667 1566
*round(값, 자릿수) : 반올림

  • 자릿수 : 일의 자리(-1)1 select round(1566.6712, 0), round(1566.6712, 1), round(1566.6712, 2)
    2* from dual
    SQL> /
  • : 소수점 첫번째자리(기준, 0) : 소수점 두번째자리(기준, 1) : 소수점 세번째자리(기준, 2)

ROUND(1566.6712,0) ROUND(1566.6712,1) ROUND(1566.6712,2)


          1567             1566.7            1566.67

--아무것도 안지정하면 소수점 첫번쨰 자리 (기준0번째 자리)에서 처리!
1 select round(1566.6712), round(1566.6712, 0), round(1566.6712, 1), round(1566.6712, 2)
2* from dual
SQL> /

ROUND(1566.6712) ROUND(1566.6712,0) ROUND(1566.6712,1) ROUND(1566.6712,2)


        1567               1567             1566.7            1566.67

--일의 자리에서 반올림! -1
1 select round(1566.6712, -1), round(1566.6712), round(1566.6712, 0), round(1566.6712, 1), round(1566.6712, 2)
2* from dual
SQL> /

ROUND(1566.6712,-1) ROUND(1566.6712) ROUND(1566.6712,0) ROUND(1566.6712,1) ROUND(1566.6712,2)


           1570             1567               1567             1566.7            1566.67

----부서별로 근무하는 사원수, 소수점 첫번째 자리에서 반올림한 평균급여를 사원수가 많은 부서부터 출력
-- 반올림함수를 사용!!!!

1 select deptno, count(deptno), round(avg(sal))
2 from emp
3 group by deptno
4* order by count(deptno) desc
SQL> /

DEPTNO COUNT(DEPTNO) ROUND(AVG(SAL))

    30             6            1567
    10             3            2917
    20             3            2258

----부서별로 근무하는 사원수를 출력하고, p152 (having절)
근무하는 사원수가 6명인 부서의(먼저 group by를 하고 having 절을 이용하라는 얘기)소수점 첫번째 자리에서 반올림한 평균급여를 사원수가 많은 부서부터 출력
1 select deptno, count(deptno), round(avg(sal))
2 from emp
3 group by deptno
4 having count(deptno) = 6
5* order by count(deptno) desc
SQL> /

DEPTNO COUNT(DEPTNO) ROUND(AVG(SAL))

    30             6            1567

--6명 이하라서 다 출력
1 select deptno, count(deptno), round(avg(sal))
2 from emp
3 group by deptno
4 having count(deptno)<= 6
5* order by count(deptno) desc
SQL> /

DEPTNO COUNT(DEPTNO) ROUND(AVG(SAL))

    30             6            1567
    10             3            2917
    20             3            2258

--부서별 사원들이 받는 평균급여가 2917 이상인
부서번호, 사원수, 평균급여 출력
단, 평균급여는 소수점 첫번쨰 자리에서 반올림.
1 select deptno, count(deptno), round(avg(sal), 0)
2 from emp
3 group by deptno
4* having round(avg(sal), 0)>= 2917
SQL> /

DEPTNO COUNT(DEPTNO) ROUND(AVG(SAL),0)

    10             3              2917

****그냥 팁!!!!

where 절로 1개의 조건을 지정하는 쿼리 문에서는 일반 컬럼만 사용 하든지 아니면 sum, avg 같은 그룹단위의 컬럼만 쓰든지 해야한다!!!!

밑에 그룹바이 절과 해빙절 까지 써야 셀렉트절에 일반 컬럼과 avg, sum, min, max 같은 컬럼 같이 사용가능

-- 같은 업무를 하는 사원들의 최저급여, 최고급여를 조회, 단, 많은 급여순로 정렬
1 select min(sal), max(sal)
2 from emp
3 group by job
4* order by max(sal) desc
SQL> /

MIN(SAL) MAX(SAL)


  5000       5000
  3000       3000
  2450       2975
  1250       1600
   800       1300

--위의 결과에서 최고급여가 1600~3000인 결과만 출력
1 select job, min(sal), max(sal)
2 from emp
3 group by job
4 having max(sal) BETWEEN 1600 and 3000
5* order by max(sal) desc
SQL> /

JOB MIN(SAL) MAX(SAL)


ANALYST 3000 3000
MANAGER 2450 2975
SALESMAN 1250 1600

--비트윈 말고 그냥 비교연산 구문으로 (결과는 위와 동일)
1 select job, min(sal), max(sal)
2 from emp
3 group by job
4 having max(sal)>= 1600 and max(sal)<=3000
5* order by max(sal) desc
SQL> /

JOB MIN(SAL) MAX(SAL)


ANALYST 3000 3000
MANAGER 2450 2975
SALESMAN 1250 1600

--10번 또는 30번 부서에 근무하는 사원수, 평균급여, 최고급여를
1 select deptno, count(empno), min(sal), max(sal), max(sal)-min(sal)
2 from emp
3 where deptno =10 or deptno = 30
4 group by deptno
5* order by max(sal)-min(sal) asc
SQL> /

DEPTNO COUNT(EMPNO)   MIN(SAL)   MAX(SAL) MAX(SAL)-MIN(SAL)

    30            6        950       2850              1900
    10            3       1300       5000              3700

1 select deptno, count(empno), min(sal), max(sal), max(sal)-min(sal)
2 from emp
3 group by deptno
4 having deptno =10 or deptno = 30
5* order by max(sal)-min(sal) asc
SQL> /

DEPTNO COUNT(EMPNO)   MIN(SAL)   MAX(SAL) MAX(SAL)-MIN(SAL)

    30            6        950       2850              1900
    10            3       1300       5000              3700

1 select deptno, count(empno), min(sal), max(sal), max(sal)-min(sal)
2 from emp
3 group by deptno
4 having deptno in (10, 30)
5* order by max(sal)-min(sal) asc
SQL> /

DEPTNO COUNT(EMPNO)   MIN(SAL)   MAX(SAL) MAX(SAL)-MIN(SAL)

    30            6        950       2850              1900
    10            3       1300       5000              3700

where 절과 having 절 둘다 쓸수 있다면 where절에 먼저 써서 필터링을 하는것이 훨씬 퍼포먼스가 좋은 쿼리문!!!!!

내생각!
(where절을 먼저 써서 10, 30 을 필터링해도 되고 그룹바이 다음에 해빙절을 써서 조건을 10, 30 필터를 걸어도 같은데..
국어를 잘해야할듯... 그룹으로 묶은 다음의 조건인지 그룹묶기 전에 조건인지...)

--10을 숫자가 아닌 문자타입으로 넣었을떄 문자 -> 숫자 형변환 함수 사용!
1 select deptno, count(empno), min(sal), max(sal), max(sal)-min(sal)
2 from emp
3 where deptno = to_number('10') or deptno = 30
4 group by deptno
5* order by max(sal)-min(sal) asc
SQL> /

DEPTNO COUNT(EMPNO)   MIN(SAL)   MAX(SAL) MAX(SAL)-MIN(SAL)

    30            6        950       2850              1900
    10            3       1300       5000              3700

SQL> ed
--30을 숫자가 아닌 문자타입으로 변경 -> 문자 형변환 함수 사용!
3 where deptno = to_number('10') or deptno = to_char(30) --->이거 아닌지 의심...ㅋㅋ
3 where deptno = to_number('10') or deptno = to_char('30') -->이것도 되긴 한다.
3 where deptno = to_number('10') or to_char(deptno) = '30' --> 이것도 동일 (문자를 문자로 변경하는것)

1 select deptno, count(empno), min(sal), max(sal), max(sal)-min(sal)
2 from emp
3 where deptno = to_number('10') or to_char(deptno) = 30
4 group by deptno
5* order by max(sal)-min(sal) asc
SQL> /

DEPTNO COUNT(EMPNO)   MIN(SAL)   MAX(SAL) MAX(SAL)-MIN(SAL)

    30            6        950       2850              1900
    10            3       1300       5000              3700

*함수(4장)
-내장 함수
-사용자정의 함수 => PL/SQL

-암묵적 함수
-명시적 함수

*데이터 타입
-문자 함수
-char
-varchar2

-숫자 함수
-number

-날짜 함수
-date

*형변환 함수(p140) ★★★★★
to_number(문자) : 문자 -> 숫자
to_char(숫자, '숫자 format' : 숫자 -> 문자
to_char(날짜, '날짜시간 format') : 날짜 -> 문자
to_date(문자, '날짜시간 format') : 문자 -> 날짜
to_timestamp(문자, '날짜시간 format') : 문자 -> 날짜

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
*집합연산자(p163)
-제한사항 :
1)집합연산자로 연결되는 각 select문의 select리스트의 개수와 데이터 타입은 일치해야한다.
2)집합연산자로 select문을 연결할 때 order by 절은 맨 마지막 문장에서만 사용.

select 컬럼명
from 테이블명

집합연산자

select 컬럼명
from 테이블명;

--교집합(intersect) -->값이 겹쳐지는 동일한 컬럼이 있는 테이블끼리 해야한다.

1 select deptno
2 from dept
3 intersect
4 select deptno
5* from emp
SQL> /

DEPTNO

    10
    20
    30

--차집합(minus)
1 select deptno
2 from dept
3 minus
4 select deptno
5* from emp
SQL> /

DEPTNO

    40
    90
    91
    92
    93

--합집합(union)중복값 제외 출력 / (union all) 중복값 상관없이 두 컬럼 값 모두 출력
1 select deptno
2 from dept
3 union
4 select deptno
5* from emp
SQL> /

DEPTNO

    10
    20
    30
    40
    90
    91
    92
    93

8 rows selected. 1 select deptno
2 from dept
3 union all
4 select deptno
5* from emp
SQL> /

DEPTNO

    10
    20
    30
    40
    90
    91
    92
    93
    20
    30
    30
    20
    30
    30
    10
    10
    30
    30
    20
    10

20 rows selected.

★★★★★★★함수
★★★★★★★join, subquery
★★★★★★★DML
조회~
selct {
| 컬럼명, 컬럼명} -->컬럼명 여러개 가능 다 출력은 *조회~
selct {
| 컬럼명, [AS] alias} -->컬럼명 여러개 가능 다 출력은 *
from 테이블
[where 조건]
[group by 그룹기준]
[group by 그룹1차기준, ...그룹n차 기준];
[having 그룹조건] --> 그룹바이의 조건절 독단적으로 쓸수 없다. 무조건 그룹바이 절 선행되어야 한다.
[ORDER BY 정렬방법];
[ORDER BY 정렬1차기준 정렬방법, ..., 정렬n차 기준 정렬방법];

*정렬방법 -->정렬방법을 기재하지 않으면 기본 오름차순!

  • 오름차순(기본) : 1100 작은수에서 큰수로 A->Z, ㄱ->ㅎ, 예전->최근
  • 내림차순 : 1001 큰수에서 작은수로 z->A, ㅎ->ㄱ, 최근->예전

*입력 (p.95)
INSERT into 테이블명[(컬럼명, 컬럼명, ...컬럼명)] --->테이블 안에 모든 컬럼에 데이터를 넣어줄거면 컬럼명 생략가능
values(값, 값, ......값); [where 조건]

--부서테이블에 90, dept90, SEOUL 입력!
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
1 INSERT into dept(deptno, dname, loc)
2* values(90, 'dept90', 'SEOUL')
SQL> /

1 row created.

SQL> select * from dept;

DEPTNO DNAME                        LOC

    10 ACCOUNTING                   NEW YORK
    20 RESEARCH                     DALLAS
    30 SALES                        CHICAGO
    40 OPERATIONS                   BOSTON
    90 dept90                       SEOUL

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
1 insert into dept(deptno, dname, loc)
2* values(91, 'dept91', 'JEJU')
SQL> /

1 row created.

SQL> ed
Wrote file afiedt.buf

1 insert into dept(deptno, dname, loc)
2* values(92, 'dept_92', 'DOKDO')
SQL> /

1 row created.

SQL> ed
Wrote file afiedt.buf

1 insert into dept(deptno, dname, loc)
2* values(93, 'dept%93', 'PUSAN')
SQL> /

1 row created.

SQL> select * from dept;

DEPTNO DNAME                        LOC

    10 ACCOUNTING                   NEW YORK
    20 RESEARCH                     DALLAS
    30 SALES                        CHICAGO
    40 OPERATIONS                   BOSTON
    90 dept90                       SEOUL
    91 dept91                       JEJU
    92 dept_92                      DOKDO
    93 dept%93                      PUSAN

8 rows selected.

SQL> commit;

Commit complete.

--부서명에 가 포함된 부서번호, 부서명, 지역 조회
1 select deptno, dname, loc
2 from dept
3* where dname LIKE '%$
%' escape '$'
SQL> /

DEPTNO DNAME                        LOC

    92 dept_92                      DOKDO

--부서명에 %문자가 포함된 부서 조회
1 select deptno, dname, loc
2 from dept
3* where dname LIKE '%@%%' escape '@'
SQL> /

DEPTNO DNAME                        LOC

    93 dept%93                      PUSAN

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

*수정
UPDATE 테이블명
SET 컬럼명 = 새값, 컬럼명 = 새값
[where 조건];

*삭제
Delete [from] 테이블명
[where 조건]

*query문(질의어)

SQLPLUS 명령어
;생략가능
단어축약
show user : 접속중인 user명 조회
conn[ect]:다른 user로 접속
exit:종료
ed[it] : 버퍼에 저장된 쿼리문 불러와 편집
/:실행(run) 실행했던 쿼리문을 보여주지 않고 실행한다.
run : 실행했던 쿼리문을 보여주고 실행한다.
@
desc[ribe]

set linesize 400 행당 출력할 글자 수 설정
set pagesize 200 출력할 행 수 설정

----연습----

--부서번호 10 인 사람 출력
1 select *
2* from emp where deptno = '10'
SQL> /

 EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO

  7782 CLARK                MANAGER                  7839 81/06/09       2450                    10
  7839 KING                 PRESIDENT                     81/11/17       5000                    10
  7934 MILLER               CLERK                    7782 82/01/23       1300                    10



  emp에서 mgr이 7698 인 사람들을 내림차순으로 출력

1 select *
2* from emp where mgr = '7698' order by ename desc
SQL> /

 EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO

  7521 WARD                 SALESMAN                 7698 81/02/22       1250        500         30
  7844 TURNER               SALESMAN                 7698 81/09/08       1500          0         30
  7654 MARTIN               SALESMAN                 7698 81/09/28       1250       1400         30
  7900 JAMES                CLERK                    7698 81/12/03        950                    30
  7499 ALLEN                SALESMAN                 7698 81/02/20       1600        300         30

dept 테이블에 deptno를 내림차순으로 모두 출력 (2가지방법 )
SQL> select *
2 from dept order by deptno desc;

DEPTNO DNAME                        LOC

    40 OPERATIONS                   BOSTON
    30 SALES                        CHICAGO
    20 RESEARCH                     DALLAS
    10 ACCOUNTING                   NEW YORK

1 select deptno, dname, loc
2* from dept order by deptno desc
SQL> /

DEPTNO DNAME                        LOC

    40 OPERATIONS                   BOSTON
    30 SALES                        CHICAGO
    20 RESEARCH                     DALLAS
    10 ACCOUNTING                   NEW YORK




dept 테이블에 deptno를 오름차순으로 모두 출력    (2가지방법 )    --->asc 굳이 안해줘도 오름차순으로 출력 된다. 기본값이라.

1 select *
2* from dept order by deptno asc
SQL> /

DEPTNO DNAME                        LOC

    10 ACCOUNTING                   NEW YORK
    20 RESEARCH                     DALLAS
    30 SALES                        CHICAGO
    40 OPERATIONS                   BOSTON    

1 select deptno, dname, loc
2* from dept order by deptno asc
SQL> /

DEPTNO DNAME                        LOC

    10 ACCOUNTING                   NEW YORK
    20 RESEARCH                     DALLAS
    30 SALES                        CHICAGO
    40 OPERATIONS                   BOSTON

dept 테이블에 dname을 오름차순으로 모두 출력
1 select [deptno, dname, loc]
2
from dept order by dname asc
SQL> /

DEPTNO DNAME                        LOC

    10 ACCOUNTING                   NEW YORK
    40 OPERATIONS                   BOSTON
    20 RESEARCH                     DALLAS
    30 SALES                        CHICAGO

dept 테이블에 loc를 사전순으로 모두 출력(오름차순)
1 select *
2* from dept order by loc asc
SQL> /

DEPTNO DNAME                        LOC

    40 OPERATIONS                   BOSTON
    30 SALES                        CHICAGO
    20 RESEARCH                     DALLAS
    10 ACCOUNTING                   NEW YORK

-- 연산하는 테이블(더미데이터?)
1 select 1+1
2* from dual
SQL> /

   1+1

     2

SQL> desc dual
Name Null? Type


DUMMY VARCHAR2(1)

-- 현재 날짜 시간 조회 (얘도 더미테이블 이용.)아마 연산이나 날짜 계산할때 쓰이는 테이블 같음.
SQL> select sysdate
2 from dual;

SYSDATE

22/11/17

//임프토 할때 cmd 창에서 dmp파일 위치로 이동하고 거기서 아래 명령어 입력!!!(p39~41)
C:\backup>

imp ora_user/hong file=expall.dmp log=empall.log ignore=y grants=y rows=y indexes=y full=y

imp ora_user/hong file=expcust.dmp log=expcust.log ignore=y grants=y rows=y indexes=y full=y
-->두번째 것은 캐릭터셋 안 맞아서 포기~ 그냥 첫번째 것만