태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.


댓글 하나가 운영자에겐 커다란 힘이 됩니다!

DML : DATABASE MANIPULATION LANGUAGE

--SELECT

-- INSERT
-- UPDATE
-- DELETE

 

-- DATA TYPE
  -- CHAR(5) --> 5글자 저장가능한데 남은 공간을 계속 가지고 있는다.
  -- 저장공간이 모두 일정하므로 ACCESS속도가 빠르다.
  -- 주민번호, 핸드폰번호 등과 같이 일정한 패턴이 있는 것에 주로 사용한다.

  -- VARCHAR2(5) --> 5글자 저장가능한데 공간이 남을 경우 SYSTEM에 공간 반환
  -- 그래서 저장공간이 모두 일정하지 않으므로 ACCESS속도가 느리다.

--NUMBER TYPE

  -- NUMBER(5) --> 숫자 다섯자리를 저장할 수 있는 공간 설정
  -- NUMBER(5, 2) --> 5자리를 설정하고 왼쪽에서 2번째를 소수점을 찍는다.

-- IMAGE와 같은 것은 경로만을 저장한다.

 

----------------------INSERT TUPLE(RECORD)을 삽입한다. 

 

INSERT INTO 테이블명 VALUES(DATA1, DATA2, DATA3, DATA4);

기본형식은 위와 같고 실질적 DATA인 DATA1 ~ DATA4는 테이블의 컬럼수와 DATA TYPE에 맞게 넣어 주어야 한다. 컬럼수가 틀릴경우 나머지 해당안돼는 컬럼은 NULL이 되고, DATA TYPE이 틀릴경우 ERROR가 발생한다.

 

-- 전체 DATA를 넣는 방법

INSERT INTO DIVISION VALUES(50, 'OPERATION ', '051-456-2345', 'DAEGU');

-- 특정 컬럼만 INSERT하는 방법으로 테이블명뒤에 컬럼명을 써주고

-- VALUES는 컬럼에 해당하는 값을 써준다.

INSERT INTO DIVISION(DNO, DNAME)  VALUES(60, 'OPERATION');
--> 컬럼명 : DNO, DNAME    , DATA 60, 'OPERATION'

-- DNO의 DATA는 60, DNAME의 DATA는 OPERATION이 해당된다.

 

-- 컬럼의 속성이 NOT NULL이면 NULL INSERT할 수 없다.

-- NULL을 INSERT 할 경우 아래와 같이 ERROR 발생한다.

INSERT INTO DIVISION(DNAME, POSITION) VALUES('ACCOUNTING', 'DAEJUN');

 

-- SUBQUERY를 사용하여 INSERT

 

--업무가 MANAGER인 사람의 데이터를 MANAGER 테이블에 삽입시키시오
SELECT *FROM MANAGER;
SELECT *FROM PERSONNEL WHERE JOB = 'MANAGER';

 

-- SELECT로 찾은것을 그대로 INSERT 하는 방법
INSERT INTO MANAGER
SELECT *FROM PERSONNEL WHERE JOB = 'MANAGER';

 

-- 업무가 SALESMAN인 사원의 모든 정보를 SALESMAN테이블로 복사하시오
INSERT INTO SALESMAN(PNO, PNAME, PAY, STARTDATE)
SELECT PNO, PNAME, PAY, STARTDATE
FROM PERSONNEL WHERE JOB = 'SALESMAN';
-- SELECT로 찾은 모든 것 말고 원하는 컬럼만을 지정해서 삽입할 수 있다.

-- NOT NULL이 아닐 경우 NULL 삽입방법

-- 암시적
INSERT INTO DIVISION(DNO, DNAME, POSITION)
VALUES(70, 'MIS', 'JEONJU');

INSERT INTO PERSONNEL (PNO, PNAME, PAY, DNO)
VALUES(7711, 'YOUNG', 4000, 20);
-->NULL OR ''를 써 주지 않는 방법이다.

 

-- 명시적 : 직접 NULL을 써주거나 ''을 써주는 형태로 넣는다.
INSERT INTO DIVISION VALUES(80, 'PLANNING', '063-222-4567', NULL);
INSERT INTO DIVISION VALUES(90, 'SERVICE', '054-563-8763', '');


INSERT INTO PERSONNEL(PNO, PNAME, MANAGER, PAY, DNO)
VALUES(1300, 'CHOI', 1114, 5000,10);
SELECT *FROM PERSONNEL
-- PERSONNEL 다음에 오는 컬럼명을 제거하면 ERROR발생 DATA TYPE이 틀리기 때문에

 

-- SYSDATE함수를 이용해서 시스템날짜로 입력하는 것이 가능하다.
INSERT INTO PERSONNEL(PNO, PNAME, JOB, STARTDATE, DNO)
VALUES(1304, 'YOU', 'SALESMAN', SYSDATE, 10)


-- 치환변수 &
SELECT PNO, PNAME, JOB, STARTDATE, DNO
FROM PERSONNEL
WHERE DNO = &DIVISION_NO;

-- WHERE DNO의 값으로 입력하는 창이 뜬다.
-- 입력하는 값에 따라 WHERE문에 해당하는 컬럼이 출력된다.

 

--SQL PLUS에서는 수행이 되지만 SQLGATE에서는 실행이 되지 않는다.
SELECT *FROM BUSEO

INSERT INTO BUSEO(DNO, DNAME, PHONE, POSITION)
VALUES(&BUSEO_NO, '&BUSEO_NAME', '&BUSEO_PHONE', '&BUSEO_POSITION');
-- 위와 같이 실행하면 각 컬럼에 해당하는 DATA를 넣으라고 뜬다.

 

-- 치환변수 &&
SELECT PNO, PNAME, JOB, &&COLUMN_NAME
FROM PERSONNEL
ORDER BY &ORDER_COLUMN;


-- 역시 SQL PLUS에서 실행된다.
-- &&COLUMN_NAME은 실행후에 보고 싶은 컬럼명을 정할 수 있다.
-- / 에 의해서 다시 실행시 또 물어보지 않고 고정이 되어있다.
-- 그러나 &ORDER_COLUMN는 어떤한 컬럼을 기준으로 정령을 할 것인지 정하는 것으로
-- / 이것에 의해 다시 실행되면 정렬할 컬럼명을 다시 묻는다.
-- 보여줄 컬럼을 다시 설정하기 위해서는 UNDEFINE COLUMN_NAME 이라고
-- 적어준 뒤에 다시  / 에 의해서 실행을 하면 처음 실행한 것처럼
-- 보고 싶은 컬럼명을 적는 칸이 존재한다.


-- &와 &&의 차이

-- &는 고정을 시키지 않고 계속 입력해줘야하는 반면에
-- &&는 한번 입력을 하면 UNDEFINE ~ 을 쳐주기 전까지 고정이 된다.

-- 두 가지 모두 주로 PROCEDURE에서 사용한다.

--- ACCEPT 

-- 주로 PROCEDURE에서 사용 SQL-PLUS에서만 사용가능
ACCEPT BUSEO_NO PROMPT 'PLEASE ENTER THE BUSEO_NO : ';

-- 거의 사용하지 않으므로 그냥 보고 지나가는 정도만 알읍시다.

 

 

-------------UPDATE DATA수정

UPDATE 테이블명 SET 수정할컬럼명 = 수정DATA WHERE 수정할 조건


--사원번호가 1111인 사원의 부서를 30으로 수정하시오
WHERE PNO = 1111;

UPDATE PERSONNEL SET PNAME = 'HONG', PAY = 2000, DNO = 30 WHERE PNO = 1111;
-- 여러항목을 수정하려면 나열하면 된다.
-- 조건문을 이용해서 특정한 DATA를 수정을 할 수 있다.

 

-- SAWON 테이블에서 모든 사원의 부서번호를 20으로 수정하시오
UPDATE SAWON SET DNO = 20;
-- 조건문을 없앨 경우는 모든 사람의 DATA를 수정한다.

 

 

ROLLBACK;

-- 수정된 것을 저장하지 않고 다시 예전 상태로 되돌리는 명령어

-- DCM의 한 종류

 

-- SUBQUERY를 이용해서 수정하는 방법
UPDATE PERSONNEL
SET(JOB, DNO) = ('ANALYST', 10)
WHERE PNO = 1114;

 

UPDATE PERSONNEL
SET(JOB, DNO) = (SELECT JOB, DNO FROM PERSONNEL WHERE PNO = 1118)
WHERE PNO=1114

-- PAIRWISE는 ORACLE에만 존재한다.

UPDATE PERSONNEL
SET(JOB, DNO) = (SELECT JOB, DNO FROM PERSONNEL WHERE PNO = 1113)
WHERE PNO=1226


-- 다른 테이블을 참조한 UPDATE

-- 부서이름이 SALES인 부서에 해당되는 사원의 업무를 SALESMAN으로 수정하시오

-- 우선 문제에 해당하는 DATA를 찾는다.
SELECT *FROM PERSONNEL
WHERE DNO=(SELECT DNO FROM DIVISION WHERE DNAME='SALES');

--그 다음에 SELECT문을 UPDATE문으로 수정을 하면 된다.
UPDATE PERSONNEL SET JOB='SALESMAN'
WHERE DNO=(SELECT DNO FROM DIVISION WHERE DNAME='SALES');

 

-- JOIN문을 이용한 UPDATE

SELECT *
FROM PERSONNEL A, DIVISION B
WHERE A.DNO=B.DNO AND DNAME='SALESMAN';

 

-- JOIN문으로 수정한 것을 UPDATE로 만들 수는 있으나 ORACLE에서는 ERROR가 난다. MS-SQL에서 실행가능
UPDATE PERSONNEL SET JOB='SALESMAN'
FROM PERSONNEL A, DIVISION B
WHERE A.DNO=B.DNO AND DNAME='SALES';

 

-- DELETE : TUPLE(RECORD)을 삭제한다.
-- 유일한 조건에 의한 값인지 찾아보고 바꾼다.
DELETE FROM 테이블명 WHERE 조건식


-- SELECT에서 DELETE로만 바꿔주면 된다.
DELETE FROM PERSONNEL
WHERE PNO=1111;

 

-- 부서명이 RESEARCH인 데이타를 모두 지우세요
SELECT *FROM BUSEO
WHERE DNAME='RESEARCH'   -- 우선 RESEARCH를 찾는다.

 

DELETE FROM BUSEO
WHERE DNAME='RESEARCH'    -- SELECT *를 지우고 DELETE로 바꾼다.

 

DELETE BUSEO
--테이블 명으로 DELETE를 하면 모든 값들이 삭제된다.

 

TRUNCATE TABLE BUSEO;

-- BUSEO가 모두 지워진다.

 

-- DELETE TRUNCATE와의 차이
-- DELETE는 LOG파일에 기록하고 지우기 때문에 삭제되는 속도가 느리다
-- 그러나 ROLLBACK에 의해서 다시 복구가 될 수 있다.
-- 복구라는 것은 C:ORACLE/ORADAT/ORA91에 100MB용량의 LOG파일이 3개가 존재하는데
-- 그곳에 잠시 저장이 된다. 하지만 수정이나 삭제가 LOG파일 3개에 해당하는 용량이
-- 넘어 설 때는 복구가 불가능해진다.

 

COMMIT;
-- 삭제, 수정이 완료가 되었다고 확정을 짓는 것으로 LOG파일들을 모두 초기화 시킨다.

위의 정보가 도움이 되셨나요? 그렇다면 댓글 하나만 남겨주세요.
댓글 하나가 운영자에겐 커다란 힘이 됩니다!

Write your message and submit
« PREV : 1 : ... 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : ... 442 : NEXT »