본문 바로가기

wif LiNoUz/Oracle,Sql

2




 CHAR

 고정 길이 문자데이터 정해진 길이만큼 저장 영역 차지 최소크기 1

 VARCHAR2

up to 2000Bytes 가변 길이 문자데이터, 최대크기 명시해야 한다. 실제입력된 문자열의 길이만큼 저장차지

 number 

40자리까지 숫자저장 가능 소수점이나 부호는 길이포함x 

number(x) 

w자리까지의 수치로 최대 38자리까지 가능 

number(x,d)

W는 전체길이, d는 소수점이하 자릿수  

 date 

LONG

 가변길이 문자형 데이터타입, 최대크기 2G 
 LOB

 2GB까지의 가변 길이 바이너리 데이터 저장가능, 이미지 문서, 실행파일 저장 가능 

ROWID 

 

 BFILE  

 TIMESTAMP

 
 INTERVAL YEAR TO MONTH 
 INTERVAL DAY TO SECOND 





CREATE TABLE SAM02(YEAR01 INTERVAL YEAR(3) TO MONTH); // 

CREATE 는 됐고


-------------------------------

 서브쿼리로 테이블 생성하기 / 테이블구조뿐만아니라 데이터까지 가져온다 아주 좋돠

CREATE TABLE EMP02 

AS

SELECT * FROM EMP;


//밑은 원하는 컬럼만 복제테이블 생성

CREATE TABLE EMP03

AS

SELECT EMPNO, ENAME FROM EMP;


원하는 행으로 구성된 복제테이블 생성하기

서브 쿼리문 SELECT구성할떄 WHERE절을 추가하여 원하는 조건 제시하믄 일부행만 복사가능

CREATE TABLE EMP05

AS

SELECT * FROM EMP

WHERE DEPTNO=10; //10부서의 소속사원들만 구성된 테이블 생성됨



테이블의 구조만 복사하기

CREATE TABLE EMP06

AS

SELECT * FROM EMP WHERE 1=0;  //WHERE 1=0 이뜻은 항상 거짓 이란 뜻 데이터는 가져오지않고 구조만 복사

구조변경 틀 ALTER TABLE


ADD COLUMN

MODIFY COLUMN

DROP COLUMN



테이블 EMP01 에 JOB VARCHAR2(9)추가

ALTER TABLE EMP01

ADD(JOB VARCHAR2(9)); 


수정

ALTER TABLE EMP01

MODIFY(JOB VARCHAR2(30)); // 30으로 수정 



ALTER TABLE EMP01

DROP COLUMN JOB;


SET UNUSED 삭제 말고 제한

ALTER TATBLE EMP02

SET UNUSED(JOB)




테이블의 모든 로우 제거

TRUNCATE 

TRUNCATE TABLE EMP02;


테이블명 변경

RENAME

RENAME EMP02 TO TEST;



DBA 데이터 딕셔너리와 데이터 딕셔너리뷰는 다음에!!! 뭬야 이거

시퀀스랑 다 하고나서 하자



INSERT INTO DEPT01

(DEPTNO, DNAME, LOC)

VALUES(10, 'ACCOUNTING', 'NEW YORK');


인서트 넣을때 컬럼명이 3개인데 밸류를 2개만 넣으면 에뤄난다

밸류갯수가 4개이어도 에러난돠, 반드시 一定일치해야함 


컬럼명 생략한채 컬럼만 채워서 보내도 됨

INSERT INTO DEPT01 VALUES( 20, 'RESEARCH', 'DALLAS');


NULL 값 넣는건 넘어가좌


서브 쿼리로 데이터를 삽입한다?????????????

INTERT INTO 다음에 VALUES절을 사용안하고 서브 쿼리를 사용한다


SAM01테이블에서 서브쿼리문을 사용하여 EMP에 저장된 사원 중 

10번 사원의 정보를 추가해보자 302페이지 문줴





다중 테이블에 다중행 입력하기


사원번호, 사원명, 입사일자 = EMP_HIR

사원번호, 사원명, 해당관리자 = EMP_MGR

사원테이블(EMP)에서  부서번호가 20인 사원을 검색하여 

EMP_HIRE테이블에 사원번호,사원명, 급여를

EMP_MGR테이블에는 사원번호,사원명,해당관리자를 입력하려면 우째해야 될까?


INSERT INTO EMP_HIRE

SELECT EMPNO, ENAME, HIREDATE FROM EMP

WHERE DEPNO=20;


INSERT INTO EMP_MGR VALUES(EMPNO, ENAME, MGR)

SELECT EMPNO, ENAME, MGR

FROM EMP

WHERE DEPTNO=20;


두번을 해야하지만 INSERT ALL 을 사용하면 한번에 된다.

INSERT ALL

INTO EMP_HIR VALUES(EMPNO, ENAME, HIREDATE)

INTO EMP_MGR VALUES(EMPNO, ENAME, MGR)

SELECT EMPNO, ENAME, HIREDATE, MGR

FROM EMP

WHERE DEPTNO=20;







요건 INSERT ALL 명령에 조건( WHEN)으로 다중테이블에 다중행 입력하기


오라클 날짜가 내꺼 좀 이상하다 이거 날짜포맷 한쿡으로 바꿔서다시 해보좌 닝기리


PIVOTING 좀 헷갈리는구만

INSERT ALL

INTO SALES_DATA VALUES(SALES_ID, WEEK_ID, 1, MON_SALES)

INTO SALES_DATA VALUES(SALES_ID, WEEK_ID, 2, TUE_SALES)

INTO SALES_DATA VALUES(SALES_ID, WEEK_ID, 3, WED_SALES)

INTO SALES_DATA VALUES(SALES_ID, WEEK_ID, 4, THU_SALES)

INTO SALES_DATA VALUES(SALES_ID, WEEK_ID, 5, FRI_SALES) 

SELCT *FROM SALES;



테이블 모든 행 변경

CREATE TABLE EMP01 AS

SELECT * FROM EMP;


UPDATE EMP01

SET DEPTNO=30;


SELECT * FROM EMP01;


UPDATE EMP01

SET SAL = SAL * 1.1;


SELECT * FROM EMP01;


UPDATE EMP01

SET HIREDATE = SYSDATE;


SELECT * FROM EMP01;



테이블의 특정 행만 변경

CREATE TALE EMP01

AS SELECT * FROM EMP;


UPDATE EMP01

SET DEPTNO=30

WHERE DEPTNO=10;



UPDATE EMP01

SET HIREDATE = SYSDATE

WHERE SUBSTR(HIREDATE, -2, 2)='87';

87년입사사람 오늘날짜로 바꾸기


SAM01테이블 저장된 사원중 급여가 10000이상인 사원들의 급여를 5000원삭감

UPDATE SAM01

SET SAL=SAL-5000 WHERE SAL>=10000;
















'wif LiNoUz > Oracle,Sql' 카테고리의 다른 글

DW ERD  (0) 2012.10.16
이게 2번인듯  (0) 2012.08.15
Oracle SQL문  (0) 2012.08.10
Oracle 설치  (0) 2012.08.09
Oacle 10g for Linux 다운로드 링크  (0) 2012.08.09