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 는 됐고
-------------------------------
서브쿼리로 테이블 생성하기 / 테이블구조뿐만아니라 데이터까지 가져온다 아주 좋돠
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 |