** 자바 테스트 용을  ORACLE 11G XE를 설치해 사용함.

 

 

[1] 오라클 시작하기

 

- 프로그램 설치하기(경로명에 한글이 있으면 안됨: password=>java1234)

- 관리자계정으로 로그인하기

   C:\>sqlplus / as sysdba

 

   또는

 

   C:\>sqlplus system/java1234


- 연습용 사용자 계정만들기

SQL> create user scott identified by tiger;

 

- 생성된 사용자에게 접속권한과 리소스 사용권한 부여하기

SQL> grant connect,resource to scott;

 

- 생성된 계정으로 접속하기

SQL> conn scott/tiger

 

- 연습용 테이블 생성하기

< 테스트 관련 테이블>

GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO SCOTT IDENTIFIED BY TIGER;
ALTER USER SCOTT DEFAULT TABLESPACE USERS;
ALTER USER SCOTT TEMPORARY TABLESPACE TEMP;
CONNECT SCOTT/TIGER
DROP TABLE DEPT;
CREATE TABLE DEPT
       (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
 DNAME VARCHAR2(14) ,
 LOC VARCHAR2(13) ) ;
DROP TABLE EMP;
CREATE TABLE EMP
       (EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
 ENAME VARCHAR2(10),
 JOB VARCHAR2(9),
 MGR NUMBER(4),
 HIREDATE DATE,
 SAL NUMBER(7,2),
 COMM NUMBER(7,2),
 DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
INSERT INTO DEPT VALUES
 (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES
 (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES
 (40,'OPERATIONS','BOSTON');
INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87')-85,3000,NULL,20);
INSERT INTO EMP VALUES
(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,to_date('13-JUL-87')-51,1100,NULL,20);
INSERT INTO EMP VALUES
(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
DROP TABLE BONUS;
CREATE TABLE BONUS
 (
 ENAME VARCHAR2(10) ,
 JOB VARCHAR2(9)  ,
 SAL NUMBER,
 COMM NUMBER
 ) ;
DROP TABLE SALGRADE;
CREATE TABLE SALGRADE
      ( GRADE NUMBER,
 LOSAL NUMBER,
 HISAL NUMBER );
INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);
COMMIT;

 

 

 

 

[2] SQL(Structured Query Language)

 

- 주요용어

 1) 테이블:관계형 DB에서 기본 데이터 저장구조로써 엔티티(실체)의 집합 저장소

 2) ROW : 테이블의 행(하나의 유효데이터)

 3) COLUMN : 테이블 열의 이름

 4) PRIMARY KEY:테이블에서 각 ROW를 유일하게 구분하는 컬럼

 5) FOREIGN KEY:다른 테이블의 컬럼을 참조하는 컬럼

 6) FIELD : 테이블에서 ROW와 COLUMN이 교차하는 데이터

 7) NULL : 데이터가 존재하는 않는 필드

 

- SQL의 종류

 1) DQL(Data Query Language):데이터 질의어(select)

 2) DML(Data Manipulate Langueage):데이터를 입력,수정,삭제할때사용(insert,update,delete)

 3) DDL(Data Definition Language): 테이블내의 객체를 생성,변경,삭제할때 사용(create,drop,alter,..)

 4) TCL(Transaction Control Language):테이블내의 DML문을 저장하거나 취소할때사용(commit,rollback)    

 5) DCL(Data Control Language):DB사용자에게 권한을 부여하거나 취소할때 사용(grant,revoke)

 

 

 

[3] DQL(SELECT)- 데이터 조회


 1) 기본구조

 SELECT 컬럼명1,컬럼명2,..
 FROM 테이블명
 [WHERE 조건절]
 [ORDER BY 정렬기준컬럼 [ASC|DESC]]


-- 테이블 정보 조회하기

SQL> select * from tab;

 

-- 테이블구조 조회하기

SQL> desc emp

 

Name
---------------
EMPNO ==> 사원번호
ENAME ==> 사원이름
JOB ==> 직업
MGR ==> 매니져번호
HIREDATE ==> 입사일
SAL ==> 급여
COMM ==> 커미션
DEPTNO ==> 부서번호 


 

-- EMP테이블에서 사원번호,사원이름,입사일,급여를 조회하시오.

   SELECT EMPNO,ENAME,HIREDATE,SAL
   FROM EMP;


     [결과]
     EMPNO ENAME                HIREDATE        SAL
---------- -------------------- -------- ----------
      7369 SMITH                80/12/17        800
      7499 ALLEN                81/02/20       1600
      7521 WARD                 81/02/22       1250
      7566 JONES                81/04/02       2975
      7654 MARTIN               81/09/28       1250
      ...


-- EMP테이블에서 급여가 3000이상인 사원들의 모든 정보를 조회하시오. (결과는 급여가 낮은 순으로 출력)

   SQL> SELECT * FROM EMP
   2  WHERE SAL>=3000
   3  ORDER BY SAL ASC;

 

-- EMP테이블에서 부서번호가 30번 이고 급여가 1000이상인 사원들의 모든 정보를 조회하시오.(급여순으로 내림차순하고,사원번호순으로 오름차순해서 출력)

SQL> SELECT * FROM EMP
  2  WHERE DEPTNO=30 AND SAL>=1000
  3  ORDER BY SAL DESC,EMPNO ASC;

 


  Q1) 부서번호가 10번인 부서의 사원중 사원번호,이름,급여를 출력하시오.

  SELECT EMPNO,ENAME,SAL
  FROM EMP
  WHERE DEPTNO=10;

 

  Q2) 사원번호가 7369인 사람의 이름,입사일,부서번호를 출력하시오.

  SELECT ENAME,HIREDATE,DEPTNO
  FROM EMP
  WHERE EMPNO=7369;

 

  Q3) 급여가 800이상인 사원의 이름,급여,부서번호를 출력하시오.

  SELECT ENAME,SAL,DEPTNO
  FROM EMP
  WHERE SAL>=800;

 

  Q4) 급여가 1600보다 크고 3000보다 작은 사원의 이름,직업,급여를 출력하시오.

  SELECT EMPNO,JOB,SAL
  FROM EMP
  WHERE SAL>=1600 AND SAL<=3000;

 

  Q5) 부서번호가 30인 사원들의 이름,사원번호,부서번호를 사원번호순으로 오름차순 정렬해서 출력하시오.

  SELECT ENAME,EMPNO,DEPTNO
  FROM EMP
  WHERE DEPTNO=30
  ORDER BY EMPNO ; -- ASC는 생략가능


2) DISTINCT / ALL (중복데이터제거/중복데이터포함)

 

  -- EMP테이블의 모든 사원의 직업을 출력하시오.

  SQL>SELECT JOB FROM EMP;

 


  SQL>SELECT DISTINCT JOB FROM EMP;

 

3) ALIAS : 컬럼명에 별칭을 붙여 사용

  SELECT ENAME AS "사원이름",JOB AS "직업"
  FROM EMP;


  -- AS는 생략가능,ALIAS에 특수문자가 존재하면 반드시 ""로 묶어야 함

 

  SELECT ENAME 사원이름,JOB "직 업"
  FROM EMP;


  SELECT EMPNO,SAL*12 "연봉"
  FROM EMP;

 

 

4) 연산자

   (1) 산술연산자 +,-,*,/
   (2) 비교연산자 =, != , >,>=,<,<=
   (3) 논리연산자 NOT,AND,OR


Q1) 부서번호가 10번인 부서의 사원들의 10%인상된 급여를 출력해 보세요.

   SELECT DEPTNO,SAL,SAL*1.1 "10%인상된급여"
   FROM EMP
   WHERE DEPTNO=10;


   Q2) EMP테이블의 사원중 근무하는 부서번호를 중복되지 않도록 출력해 보세요.

   SELECT DISTINCT DEPTNO
   FROM EMP;

 

 

5) SQL연산자

   - IN,ANY,ALL,BETWEEN,LIKE,IS NULL,IS NOT NULL,EXISTS

 

 

(1) IN 연산자

 

-- 부서번호가 10번 또는 30번인 사원중에서 부서번호와 급여를 출력하시오.

   SELECT DEPTNO,SAL
   FROM EMP
   WHERE DEPTNO=10 OR DEPTNO=30;


   ==>IN 연산자로 바꿔보면

 

   SELECT DEPTNO,SAL
   FROM EMP
   WHERE DEPTNO IN(10,30); -- DEPTNO가 10번또는 30번인 데이터


(2) ANY 연산자

   SELECT DEPTNO,SAL
   FROM EMP
   WHERE DEPTNO=ANY(10,30); -- ANY는 10번또는 30번 둘중 하나만 일치하면 됨


(3) ALL 연산자

   SELECT DEPTNO,SAL
   FROM EMP
   WHERE DEPTNO=ALL(10,30); -- ALL는 10번과 30번 모두 일치해야 됨


(4) BETWEEN A AND B : A와 B사이의 값

 

-- 급여가 1000부터 3000사이인 사원들의 사원번호,이름,급여를 출력하시오.

   SELECT EMPNO,ENAME,SAL
   FROM EMP
   WHERE SAL>=1000 AND SAL<=3000;

 

   ==> BETWEEN연산자로 바꿔보면

 

   SELECT EMPNO,ENAME,SAL
   FROM EMP
   WHERE SAL BETWEEN 1000 AND 3000;


-- 사원번호가 7300부터 7500사이인 사원들의 모든 정보를 출력해 보세요.(BETWEEN사용)

  SELECT * FROM EMP
   WHERE EMPNO BETWEEN 7300 AND 7500;


-- 사원이름이 'J'로 시작하는 사원의 모든 정보를 조회하시오.

   SELECT * FROM EMP
   WHERE ENAME LIKE 'J%'; -- ENAME이 'J'로 시작하는 모든 데이터


-- 사원이름에 'E'를 포함하는 사원의 모든 정보를 조회하시오.

   SELECT * FROM EMP
   WHERE ENAME LIKE '%E%';


-- 사원이름이 'N'으로 끝나는 사원의 모든 정보를 조회하시오.

   SELECT * FROM EMP
   WHERE ENAME LIKE '%N';


-- 사원이름중 두번째 문자가 'L'인 사원의 모든 정보를 조회하시오.

   SELECT * FROM EMP
   WHERE ENAME LIKE '_L%';

 

-- 사원이름중 두번째 문자가 'L'이 아닌 사원의 모든 정보를 조회하시오.

   SELECT * FROM EMP
   WHERE ENAME NOT LIKE '_L%';


-- 커미션이 NULL인 사원들의 모든 정보를 조회하시오.

   SELECT * FROM EMP
   WHERE COMM IS NULL;


-- 커미션이 NULL이 아닌 사원들의 모든 정보를 조회하시오.

   SELECT * FROM EMP
   WHERE COMM IS NOT NULL;

 


(5) 결합연산자 (||) - 문자열연결

   SELECT ENAME || '의 급여는 ' || SAL ||'입니다.'
   FROM EMP;

    

-- XXX의 직업은 XXX입니다.

   SELECT ENAME || '의 직업은 ' || JOB ||'입니다.'
   FROM EMP;


    
Q1) 직업이 'MANAGER'이거나 또는 'SALESMAN'인 사원의 이름과 직업을 출력(IN사용)

  SELECT ENAME,JOB
  FROM EMP
  WHERE JOB IN('MANAGER','SALESMAN');

 

Q2) 이름이 'S'로 시작하는 사원의 번호,이름,입사일,부서번호 출력

  SELECT EMPNO,ENAME,HIREDATE,DEPTNO
  FROM EMP
  WHERE ENAME LIKE 'S%';

 

Q3) 입사일이 81년도인 사원의 입사일,이름 출력

  SELECT HIREDATE,ENAME
  FROM EMP
  WHERE HIREDATE LIKE '81%';

 

 

Q4) 이름이 'A'로 시작하고 마지막글자가 'N'인 사원의 모든 정보를 출력

  SELECT * FROM EMP
  WHERE ENAME LIKE 'A%N';  


Q5) 이름의 두번째 문자가 'A'인 사원의 이름을 출력하시오.

  SELECT ENAME FROM EMP
  WHERE ENAME LIKE '_A%';

 

Q6) 이름의 첫글자가 'A'로 시작하거나 부서번호가 30인 사원의 사원번호,이름,부서번호를 출력

  SELECT EMPNO,ENAME,DEPTNO
  FROM EMP
  WHERE ENAME LIKE 'A%' OR DEPTNO=30;

 

Q7) 입사일이 81년도가 아닌 사원들의 입사일과 이름을 출력

  SELECT HIREDATE,ENAME
  FROM EMP
  WHERE HIREDATE NOT LIKE '81%';

 

Q8) 급여가 2000에서 3000사이인 사원들의 사원번호,이름,급여출력(BETWEEN사용)

  SELECT EMPNO,ENAME,SAL
  FROM EMP
  WHERE SAL BETWEEN 2000 AND 3000;

 

+ Recent posts