Oracle - DML - INSERT/UPDATE/DELETE

갓김치·2020년 7월 22일
0

Oracle

목록 보기
6/33
post-thumbnail

참고

책 p.177-179
2020-07-22-03.sql
2020-07-23-01.sql

추가

  • 오라클 창 이상할게 창 - 팩토리 설정으로 창 재설정
  • NULLABLE의 의미가 정확히 뭐지..?
  • 오라클에서 문자열 표현 -> '' 싱글쿼트 (자바에서는 "문자열", '문자')
  • 영문자1개=1byte / 한글1글자=3byte
  • SUBSTRING (START INDEX, 개수) (오라클)
  • SUBSTRING (START INDEX, END INDEX) (자바)

DML?

  • INSERT, UPDATE, DELETE
  • 조작어
  • !! 실행 전 SELECT로 검증해야함
  • ROLLBACK 가능
  • 트리거:이벤트 (인서트/업데이트/딜리트) 발생 전/후에 해당되는 쿼리
    : EX) 카트 테이블에서 고객이 5개 사가면, 자동으로 재고 데이터 5개 차감됨

1. INSERT

  • 테이블에 새로운 자료를 삽입할 때 사용
  • 새롭게 삽입하고자하는 데이터가 테이블에 존재하지 않아야 함

INSERT INTO 테이블명 [(컬럼명[,컬럼명,...])]
VALUES(값1[,값2,...]);

  • 테이블명[(컬럼명[,컬럼명,...])]에 기술된 컬럼의 갯수, 순서, 타입과 VALUES 값의 갯수, 순서, 타입은 일치해야 한다.
  • 테이블명 다음 컬럼명이 생략되면, 테이블 생성시 정의한 모든 컬럼의 값을 기술된 순서에 맞게 VALUES절에 정의 해야함
  • 테이블명[(컬럼명[,컬럼명,...])]에서 컬럼명을 기술하는 경우는 일부 컬럼에만 값을 정의하는 경우에 사용됨.
  • 컬럼의 제약사항 중 NOT NULL 항목은 생략 불가

예제1)

사원테이블에 다음의 자료를 입력하시오

  1. 실행 전 SELECT로 검증
    SELECT FROM EMPLOYEE; -- = ALL 전부 다

  2. 1행에 자료 INSERT
    INSERT INTO EMPLOYEE(E_EMP_NO,E_NAME,E_ADDR,E_POSITION,E_DEPARTMENT)
    VALUES('E101','홍길동','OO시 중구 OO동','사원','개발팀')

  • 전화번호는 NULLBALE 이어서 꼭 안넣어도됨.
  1. 잘 들어갔나 SELECT로 확인
    SELECT * FROM EMPLOYEE;

  2. 2행에 자료 INSERT
    INSERT INTO EMPLOYEE
    VALUES('E201','강감찬','OO시 서구 OO동','02-123-3456','부장','운영팀');

  • 반드시 컬럼명에 정의된 순서대로 하나라도 빠뜨리지않고 기입. NULLABLE도 예외없음.
  • NULLABLE 전화번호를 안넣고 싶으면 ''(화이트스페이스)로 대체해서 기입하면 NULL로 기입됨.
  1. 잘 들어갔나 SELECT로 확인
    SELECT * FROM EMPLOYEE;

  2. 3행에 자료 INSERT
    INSERT INTO EMPLOYEE
    VALUES('E202','홍길순','대한민국 대전광역시 유성구 유천동 금성백조아파트 106동 4002호','010-1234-5678','사원','개발팀');

  • 만약 주소(varchar(50)) 범위가 넘는 길이를 넣으려고하면 오류나서 실행 안 됨.
  • error: value too large for column "user"."EMPLOYEE"."E_ADDR" (actual: 85, maxium: 50)
  1. 길이 수정 후 3행 삽입
    INSERT INTO EMPLOYEE
    VALUES('E202','홍길순','대전 유성구 유천동 금성백조 106-4002','010-1234-5678','사원','개발팀');

  2. 번외

  • 처음에 테이블 생성시 EMPLOYEE 테이블에 E_TEL_NO를 VARCHAR(12)로 설정했음, (15)로 바꿔줘야함
    ALTER TABLE EMPLOYEE
    MODIFY E_TEL_NO VARCHAR(15);

2. UPDATE

  • 저장된 데이터의 내용을 변경

UPDATE 테이블명
SET 컬럼명=값[,컬럼명=값,...][**WHERE** 조건];

  • [WHERE 조건] 절이 생략되면 테이블의 모든행에 존재하는 컬럼에 새로운 값으로 변경

예제1) UPDATE

사원테이블 (EMPLOYEES)에서 사원들의 급여를 15000으로 변경하시오.

  1. 실행 전 SELECT로 검증

  2. 급여 컬럼(SALARY)를 15000으로 UPDATE

  3. 다음 예제를 위해 ROLLBACK

예제2) 조건에 따른 UPDATE

사원테이블 (EMPLOYEES) 에서 부서코드가 50번인 사원들의 급여를 15000으로 변경하시오.

  1. 실행 전 SELECT로 검증
  • WHERE 조건에는 관계연산자, 논리연산자가 들어간다.
  1. 부서코드(DEPARTMENT_ID)가 50인 사원들의 급여를 15000으로 UPDATE

  2. 다음 예제를 위해 ROLLBACK

예제3) 연산이 들어간 UPDATE

회원테이블 (MEMBER) 에서 회원들의 마일리지를 20% 추가지급하시오.

  1. 실행 전 SELECT로 검증

  2. 마일리지(MEM_MILEAGE)를 20% 추가해서 UPDATE

  • 혹은 UPDATE MEMBER SET MEM_MILEAGE*1.2;
  1. 다음 예제를 위해 ROLLBACKCOMMIT

3. DELETE

  • 저장된 테이블 내의 행(들)을 삭제
  • 테이블 자체를 지우는건 DROP
    DELTE 테이블명
    [WHERE 조건];
  • !! WHERE 조건이 없으면, 해당 테이블의 모든 행을 전부 삭제함
  • 간단한 만큼 조심해서 써야함

예제1) 테이블 내 모두 DELETE

장바구니테이블(CART) 내의 자료를 모두 삭제하시오
1. 실행 전 SELECT로 검증
SELECT * FROM CART;

  1. CART 테이블 내 자료 전부 DELETE
    DELETE CART;

  2. 다음 예제를 위해 ROLLBACKCOMMIT
    ROLLBACK;
    COMMIT;

예제2) 조건에 따른 DELETE

장바구니테이블(CART)에서 2005년 6월 이전 자료를 모두 삭제하시오.
1. 실행 전 SELECT 검증
SELECT * FROM CART;

  1. CART 테이블 내, 2005년 6월 이전(= 2005년 5월 31일까지) 자료 DELETE
    DELETE CART
    WHERE SUBSTR(CART_NO,1,8) < '20050601';
  • SUBSTR(컬럼명,숫자1,숫자2) : '숫자1' 자리부터 '숫자2' 개 부분 문자열**
  1. ROLLBACKCOMMIT
    ROLLBACK;
    COMMIT;
profile
갈 길이 멀다

0개의 댓글