** 자바 테스트 용을  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;

 



SELECT CONVERT(CHAR, GETDATE(), 0 )

: 06 29 2009  9:44AM            


SELECT CONVERT(CHAR, GETDATE(), 1 )

: 06/29/09                      


SELECT CONVERT(CHAR, GETDATE(), 2 )

: 09.06.29                      


SELECT CONVERT(CHAR, GETDATE(), 3 )

: 29/06/09                      


SELECT CONVERT(CHAR, GETDATE(), 4 )

: 29.06.09                      


SELECT CONVERT(CHAR, GETDATE(), 5 )

: 29-06-09                      


SELECT CONVERT(CHAR, GETDATE(), 6 )

: 29 06 09                      


SELECT CONVERT(CHAR, GETDATE(), 7 )

: 06 29, 09                     


SELECT CONVERT(CHAR, GETDATE(), 8 )

: 09:45:29                      


SELECT CONVERT(CHAR, GETDATE(), 9 )

: 06 29 2009  9:45:29:443AM     


SELECT CONVERT(CHAR, GETDATE(), 10 )

: 06-29-09                      


SELECT CONVERT(CHAR, GETDATE(), 11 )

: 09/06/29                      


SELECT CONVERT(CHAR, GETDATE(), 12 )

: 090629                        


SELECT CONVERT(CHAR, GETDATE(), 13 )

: 29 06 2009 09:46:10:770       


SELECT CONVERT(CHAR, GETDATE(), 14 )

: 09:46:10:770                  


SELECT CONVERT(CHAR, GETDATE(), 20 )

: 2009-06-29 09:47:45           


SELECT CONVERT(CHAR, GETDATE(), 21 )

: 2009-06-29 09:47:45.070       


SELECT CONVERT(CHAR, GETDATE(), 22 )

: 06/29/09  9:47:45 AM          


SELECT CONVERT(CHAR, GETDATE(), 23 )

: 2009-06-29                    


SELECT CONVERT(CHAR, GETDATE(), 24 )

: 09:47:45                      


SELECT CONVERT(CHAR, GETDATE(), 25 )

: 2009-06-29 09:47:45.070       


SELECT CONVERT(CHAR, GETDATE(), 120 )

: 2009-06-29 09:49:00           


SELECT CONVERT(CHAR, GETDATE(), 121 )

: 2009-06-29 09:49:00.070      



'DBMS > T-SQL' 카테고리의 다른 글

날짜,시간함수  (0) 2009.06.21
SQL server 2005 오류상태파악 함수  (0) 2009.06.21
저장프로시져 @@ERROR함수 사용 예  (0) 2009.06.21
저장프로시져 WHILE문 예  (0) 2009.06.21
저장프로시져 CASE문 예  (0) 2009.06.21


CREATE SYNONYM 별칭명 FOR table명;


'DBMS > 오라클기타' 카테고리의 다른 글

Marge  (0) 2013.05.03
두개이상 칼럼에 UPDATE하기  (0) 2013.05.03
INDEX사용시 주의  (0) 2013.05.02
오라클 날짜함수  (0) 2009.06.29
컬럼 unused 하기  (0) 2008.12.01

오라클 날짜함수 

 

# 날짜계산

select months_between(sysdate,to_date('2002-12-22','yyyy-mm-
dd'))
-- months_between(A,B) = A-B/30
--select add_months(sysdate,4) -- 특정일의 달수 더한 날
--select next_day(sysdate,'friday') -- 특정일의 다음주 요일
--select last_day(sysdate) -- 특정일의 해당 월의 마지막 날
--select round(sysdate,'dd') -- 특정일의 반올림(오후면 다음날..)
--select trunc(sysdate,'ww') -- 특정일의 전주 토요일(해당 전주의 마지막 날)에해당하는 날짜
--select trunc(sysdate,'D') -- 특정일의 주 일요일(해당 주의 첫째 날)에해당하는 날짜

from dual

/* 어제 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE-1) AND TRUNC(SYSDATE-1)+0.99999421
/* 오늘 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + 0.99999421
/* 내일 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE+1) AND TRUNC(SYSDATE+1)+0.99999421
/* 금주 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE+1)-TO_CHAR(SYSDATE,'D')
                        AND TRUNC(SYSDATE+1)-TO_CHAR(SYSDATE,'D')+6.99999421
/* 차주 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE+8)-TO_CHAR(SYSDATE, 'D')
                        AND TRUNC(TRUNC(SYSDATE)+14.99999421)-TO_CHAR(SYSDATE, 'D')
/* 금월 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE+1)-TO_CHAR(SYSDATE,'DD')
                        AND TRUNC(LAST_DAY(SYSDATE))+0.99999421
/* 전월 */ 날짜칼럼 BETWEEN TRUNC(ADD_MONTHS(SYSDATE,-1)+1)-TO_CHAR(SYSDATE,'DD')
                        AND TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE, -1)))+0.99999421
/* 차월 */ 날짜칼럼 BETWEEN ADD_MONTHS(TRUNC(SYSDATE),1)-TO_CHAR(SYSDATE,'DD')+1
                        AND LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),1)+0.99999421)

 

 

# 특정일 까지의 간격을 년, 개월, 일로 표현하기

SELECT
TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('19970101', 'YYYYMMDD'))/12) "년",
TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('19970101', 'YYYYMMDD')) -
TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('19970101', 'YYYYMMDD'))/12) * 12) "개월",
TRUNC((MONTHS_BETWEEN(SYSDATE,TO_DATE('19970101', 'YYYYMMDD')) -
TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('19970101', 'YYYYMMDD')))) * 30.5) "일"
FROM DUAL;

 


# 당월의 주차 구하기..

SELECT '20040511' as "날짜"
, ceil((to_number(substrb('20040511', -2, 2)) + 7 - to_number(TO_CHAR(TO_DATE('20040511','YYYYMMDD'),'D')))/7) as "월별 주차"
from dual;


 

# 시간 계산 SQL

SELECT TRUNC(TO_DATE('20010502223443','YYYYMMDDHH24MISS')-TO_DATE('20010501213344','YYYYMMDDHH24MISS')) || ' day ' ||
       TRUNC(MOD((TO_DATE('20010502223443','YYYYMMDDHH24MISS')-TO_DATE('20010501213344','YYYYMMDDHH24MISS')),1)*24) || ' hour ' ||
       TRUNC(MOD((TO_DATE('20010502223443','YYYYMMDDHH24MISS')-TO_DATE('20010501213344','YYYYMMDDHH24MISS'))*24,1)*60) || ' minute ' ||
       TRUNC(ROUND(MOD((TO_DATE('20010502223443','YYYYMMDDHH24MISS')-TO_DATE('20010501213344','YYYYMMDDHH24MISS'))*24*60,1)*60)) || ' sec '
       " Time Interval "
FROM DUAL ;

'DBMS > 오라클기타' 카테고리의 다른 글

Marge  (0) 2013.05.03
두개이상 칼럼에 UPDATE하기  (0) 2013.05.03
INDEX사용시 주의  (0) 2013.05.02
SYNONYM  (0) 2009.06.29
컬럼 unused 하기  (0) 2008.12.01
  •  GETDATE        현재 날짜와 시간
                         SELECT GETDATE()
  •  DATEDIFF       두날짜 차이 리턴.
                          SELECT DATEDIFF(week, GETDATE(), '2009/09/01')
                            --> 현재부터 2009.9.1까지 남은 주
  •  DATENAME     날짜의 지정한 부분만 리턴
                           --> SELECT DATENAME(weekday, '2009/06/06' )
                           --> 2009.6.6 무슨요일인지 리턴.
  •  DAY                지정된 날짜의 일   SELECT DAY('2009/09/01')
  •  MONTH           지정된 날짜의 월
  •  YEAR              지정된 날짜의 년

     
  •  DATEADD        날짜에 더한 결과 리턴.
                          SELECT DATEADD(day, 100, '2006/10/10' )
                              --> 2006년 10월 10일 부터 100일 후의 날짜
                              --> day , year, month, week, hour, minute, second


'DBMS > T-SQL' 카테고리의 다른 글

시간함수  (0) 2009.06.29
SQL server 2005 오류상태파악 함수  (0) 2009.06.21
저장프로시져 @@ERROR함수 사용 예  (0) 2009.06.21
저장프로시져 WHILE문 예  (0) 2009.06.21
저장프로시져 CASE문 예  (0) 2009.06.21

+ Recent posts