문제1) EMP TABLER 구조 살펴보기
SQL> DESC EMP;
이름 널? 유형
----------------------------------------- -------- ----------------------------
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)
문제2) 급여를 기준으로 오름차순 정렬하여
사원이름, 사원번호, 업무, 급여를 출력
SQL> SET LINESIZE 150 PAGESIZE 100
SQL> SELECT ENAME,EMPNO,JOB,SAL
2 FROM EMP
3 ;
ENAME EMPNO JOB SAL
---------- ---------- --------- ----------
SMITH 7369 CLERK 800
ALLEN 7499 SALESMAN 1600
WARD 7521 SALESMAN 1250
JONES 7566 MANAGER 2975
MARTIN 7654 SALESMAN 1250
BLAKE 7698 MANAGER 2850
CLARK 7782 MANAGER 2450
SCOTT 7788 ANALYST 3000
KING 7839 PRESIDENT 5000
TURNER 7844 SALESMAN 1500
ADAMS 7876 CLERK 1100
JAMES 7900 CLERK 950
FORD 7902 ANALYST 3000
MILLER 7934 CLERK 1300
14 개의 행이 선택되었습니다.
문제3) SCOTT 사원의
사원번호, 사원명, 부서번호를 출력하라
SQL> SELECT EMPNO,ENAME,DEPTNO
2 FROM EMP
3 WHERE ENAME='SCOTT'
4 ;
EMPNO ENAME DEPTNO
---------- ---------- ----------
7788 SCOTT 20
문제4) 사원번호가 7499이거나 7251이거나 7566인 사원의
모든 정보를 출력하고
이때 커미션이 널 일경우에는 0으로 출력하시요
SQL> SELECT EMPNO, ENAME, JOB, SAL, COMM, MGR, HIREDATE, DEPTNO, NVL(COMM,0)
2 FROM EMP
3 WHERE EMPNO = 7499 OR EMPNO=7251 OR EMPNO=7566
4 ;
EMPNO ENAME JOB SAL COMM MGR HIREDATE DEPTNO NVL(COMM,0)
---------- ---------- --------- ---------- ---------- ---------- -------- ---------- -----------
7566 JONES MANAGER 2975 7839 81/04/02 20 0
7499 ALLEN SALESMAN 1600 300 7698 81/02/20 30 300
SQL>
문제5) 5번을 출력물을
입사일이 빠른 사원에서 늦은 사원순으로 하여 출력하시오. 내림차순
SQL> SELECT EMPNO, ENAME, JOB, SAL, COMM, MGR, HIREDATE, DEPTNO, NVL(COMM,0)
2 FROM EMP
3 WHERE EMPNO = 7499 OR EMPNO=7251 OR EMPNO=7566
4 ORDER BY HIREDATE DESC
5 ;
EMPNO ENAME JOB SAL COMM MGR HIREDATE DEPTNO NVL(COMM,0)
---------- ---------- --------- ---------- ---------- ---------- -------- ---------- -----------
7566 JONES MANAGER 2975 7839 81/04/02 20 0
7499 ALLEN SALESMAN 1600 300 7698 81/02/20 30 300
문제5) 5번을 출력물을 *OR을 쓰냐 안쓰냐? 문제
입사일이 빠른 사원에서 늦은 사원순으로 하여 출력하시오. 내림차순
SQL> SELECT EMPNO, ENAME, JOB, SAL, COMM, MGR, HIREDATE, DEPTNO, NVL(COMM,0)
2 FROM EMP
3 WHERE EMPNO = 7499 OR EMPNO=7251 OR EMPNO=7566
4 ORDER BY HIREDATE DESC
5 ;
EMPNO ENAME JOB SAL COMM MGR HIREDATE DEPTNO NVL(COMM,0)
---------- ---------- --------- ---------- ---------- ---------- -------- ---------- -----------
7566 JONES MANAGER 2975 7839 81/04/02 20 0
7499 ALLEN SALESMAN 1600 300 7698 81/02/20 30 300
3 WHERE EMPNO = 7499 OR EMPNO=7251 OR EMPNO=7566
더욱더 간단히 하는 방법 IN 연산자이다.
SQL> SELECT EMPNO, ENAME
2 FROM EMP
3 WHERE EMPNO IN(7499,7521,7566)
4 ;
EMPNO ENAME
---------- ----------
7566 JONES
7521 WARD
7499 ALLEN
## SQL 연산자
IN 연산자 (OR와 같은 결과)
문법 : IN(리스트)
문제1) 업무가 MANAGER 혹은 SALESMAN인 *작은 따옴표를 쓰냐 안쓰냐 문제
사원의 사원명과 업무를 출력
SQL> SELECT ENAME,JOB
2 FROM EMP
3 WHERE JOB IN('MANAGER','SALESMAN')
4 ;
ENAME JOB
---------- ---------
ALLEN SALESMAN
WARD SALESMAN
JONES MANAGER
MARTIN SALESMAN
BLAKE MANAGER
CLARK MANAGER
TURNER SALESMAN
7 개의 행이 선택되었습니다.
SQL> SELECT ENAME,JOB
2 FROM EMP
3 WHERE JOB IN('MANAGER','SALESMAN')
4 ORDER BY JOB
5 ;
ENAME JOB
---------- ---------
JONES MANAGER
BLAKE MANAGER
CLARK MANAGER
ALLEN SALESMAN
TURNER SALESMAN
MARTIN SALESMAN
WARD SALESMAN
7 개의 행이 선택되었습니다.
BETWEEN 연산자 (AND연산자와 같은 결과)
문법 : BETWEEN A AND B
문제1) 급여가 2000에서 3000사이인 사원의 사원명과 ,급여 출력
SQL> SELECT ENAME, SAL
2 FROM EMP
3 WHERE SAL>=2000 AND SAL<=3000
4 ;
ENAME SAL
---------- ----------
JONES 2975
BLAKE 2850
CLARK 2450
SCOTT 3000
FORD 3000
--BETWEEN 사용
SQL> SELECT ENAME, SAL
2 FROM EMP
3 WHERE SAL BETWEEN 2000 AND 3000 (사용 숫자까지 포함)
4 ;
ENAME SAL
---------- ----------
JONES 2975
BLAKE 2850
CLARK 2450
SCOTT 3000
FORD 3000
LIKE 연산자
부분 적으로 일치하면 침이 되는 연산자
LIKE :~와 같은(문자나 숫자)
문법 : LIKE ('문자나 숫자')
% : 모든것 = *
_ : 자리수 하나
문제1) 사원이름이 S로 시작하는
사원명, 업무를 출력
SQL> SELECT ENAME
2 FROM EMP
3 WHERE ENAME LIKE 'S%'
4 ;
ENAME
----------
SMITH
SCOTT
문제2) 사원이름이 N으로 끝나는
사원명, 업무 출력
SQL> SELECT ENAME,JOB
2 FROM EMP
3 WHERE ENAME LIKE('%N')
4 ;
ENAME JOB
---------- ---------
ALLEN SALESMAN
MARTIN SALESMAN
문제3) 사원이름중에 A가 들어간
사원명과 업무를 출력하시오.
SQL> SELECT ENAME, JOB
2 FROM EMP
3 WHERE ENAME LIKE('%A%')
4 ;
ENAME JOB
---------- ---------
ALLEN SALESMAN
WARD SALESMAN
MARTIN SALESMAN
BLAKE MANAGER
CLARK MANAGER
ADAMS CLERK
JAMES CLERK
7 개의 행이 선택되었습니다.
문제4) 사원이름 중에서 A가 두번째로 나온
사원의 모든 이름을 출력
SQL> SELECT ENAME
2 FROM EMP
3 WHERE ENAME LIKE('_A%') * '_A' = 2자리 글자만 찾는다.
4 ;
ENAME
----------
WARD
MARTIN
JAMES
문제5) 사원이름 중에 A가 3번째로 포함된
사원명을 출력하시오.
SQL> SELECT ENAME
2 FROM EMP
3 WHERE ENAME LIKE('__A%')
4 ;
ENAME
----------
BLAKE
CLARK
ADAMS
ESCAPE 옵션
문법 : ESCAPE "|"; |문자 뒤의 글자(_ ,%)는 WILDCARD가 아님을 뜻함.
와일드 카드
OS : * -> 임의의 모든 문자 Oracle : % ->임의의 모든 문자
? -> 한개 문자 _ -> 한개의 문자
문제1) 문자열로 %,_ 들어간 상황
SQL> INSERT INTO EMP(EMPNO, ENAME)
2 VALUES(456,'K_J_C')
3 ;
1 개의 행이 만들어졌습니다.
SQL> SELECT ENAME, EMPNO
2 FROM EMP
3 ;
ENAME EMPNO
---------- ----------
SMITH 7369
ALLEN 7499
WARD 7521
JONES 7566
MARTIN 7654
BLAKE 7698
CLARK 7782
SCOTT 7788
KING 7839
TURNER 7844
ADAMS 7876
JAMES 7900
FORD 7902
MILLER 7934
K_J_C 456
15 개의 행이 선택되었습니다.
문제2) 사원명이 K_J가 포함된
사원번호, 사원명 출력
SQL> SELECT EMPNO, ENAME
2 FROM EMP
3 WHERE ENAME LIKE('K\_J%') ESCAPE '\' * \ 뒤에 오는 는 것은 문자열이다.
4 ;
EMPNO ENAME
---------- ----------
456 K_J_C
NULL
SELECT ENAME, SAL, COMM
FROM EMP;
SQL> SELECT ENAME, SAL, COMM
2 FROM EMP
3 ;
ENAME SAL COMM
---------- ---------- ----------
SMITH 800
ALLEN 1600 300
WARD 1250 500
JONES 2975
MARTIN 1250 1400
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
TURNER 1500 0
ADAMS 1100
JAMES 950
FORD 3000
MILLER 1300
K_J_C
15 개의 행이 선택되었습니다.
문제1) 커미션이 NULL 인 사원의
사원명, 급여, 커미션을 출력
SQL> SELECT ENAME, SAL, COMM
2 FROM EMP
3 WHERE COMM=NULL
4 ;
선택된 레코드가 없습니다.
SQL> SELECT ENAME, SAL, COMM
2 FROM EMP
3 WHERE COMM IS NULL; * NULL값인 것은 이렇게 사용한다.
ENAME SAL COMM
---------- ---------- ----------
SMITH 800
JONES 2975
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
ADAMS 1100
JAMES 950
FORD 3000
MILLER 1300
K_J_C
11 개의 행이 선택되었습니다.
문제2) 커미션이 NULL이 아닌 사원의
사원명, 급여, 커미션 출력
SQL> SELECT ENAME, SAL, COMM
2 FROM EMP
3 WHERE COMM IS NOT NULL * NULL값이 아닌 것은 다음과 같이 사용한다.
4 ;
ENAME SAL COMM
---------- ---------- ----------
ALLEN 1600 300
WARD 1250 500
MARTIN 1250 1400
TURNER 1500 0
SQL> SELECT ENAME, SAL, COMM, SAL+COMM
2 FROM EMP
3 ;
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
SCOTT 3000
KING 5000
TURNER 1500 0 1500
ADAMS 1100
JAMES 950
FORD 3000
MILLER 1300
K_J_C
15 개의 행이 선택되었습니다.
연산자 우선순위
1 비교연산자(-,-!,^-,<>,>-,<<-)
SQL, 연산자(BETWEEN A AND B, IN, LIKE, IS NULL)
2 NOT
3 AND
4 OR
문제1) 업무가 PRESIDENT이고 급여가 3000이상이거나
업무가 SALESMAN인
사원의 이름, 업무, 급여를 출력
SQL> SELECT ENAME, JOB, SAL
2 FROM EMP
3 WHERE (JOB='PRESIDENT' AND SAL>=3000) OR JOB='SALESMAN';
ENAME JOB SAL
---------- --------- ----------
ALLEN SALESMAN 1600
WARD SALESMAN 1250
MARTIN SALESMAN 1250
KING PRESIDENT 5000
TURNER SALESMAN 1500
SQL과 SQL*PLUS 언어
차이점
SQL SQLPLUS
DATA를 엑세스 하기 위해 ORACLE SERVER와 통신 /SQL 문장을 인식
언어 / 환경 TOOL
ANSI 표준 / ORACLE 독점물 (단독 사용)
KEYWORD 단축X / 단축 가능
종료 문자 ; / 종료문자 ; 생략가능
연속문자(-) 없음 / 연속문자사용
SQL*PLUS 명령어
1. SQL*PLUS 시작, 종료 : CONN(ECT), EXIT
2. 실행명령어 : /, RUN, SPOOL(저장 SAVE기능-처음부터 저장해야 한다.)...
3. 편집명령어 : ED(IT)..
4. 포맷명령어 : COLUMN -> 컬럼의 포맷 변경
5. 기타명령어 : SET
CONNECT(CONN) , EXIT, SET LINESIZE, SET PAGESIZE, DESC(줄임말 SQL에 없다)
EDIT OR ED
에디트창 나오며 저장하고 종료하고 /입력
/ - 마지막에 실행했던 것을 기역하여 결과값만한다.
RUN - 커리문과 결과값 같이 표시
SPOOL
문법
SQL> SPOOL C:\J0326
SQL> SPOOL C:\J0326 *시작
SQL> SELECT * 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
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
7876 ADAMS CLERK 7788 87/05/23 1100 20
7900 JAMES CLERK 7698 81/12/03 950 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7934 MILLER CLERK 7782 82/01/23 1300 10
456 K_J_C
15 개의 행이 선택되었습니다.
SQL> SPOOL OFF *끝
*오라클 종료시 같이 종료
SQL> delete from emp
2 where empno=456;
1 행이 삭제되었습니다.
SQL> commit;
커밋이 완료되었습니다.