5월 26일 수요일 (12일차) - INSERTㅇ

@_@·2021년 5월 26일
0

Database

목록 보기
23/28

<목차>
(DML)
ㅇ INSERT
ㅇ NULL을 입력하는 방법
ㅇ INSERT에서 많이 하는 실수




ㅇ INSERT : 테이블에 새 행 추가

  • 새로운 행은 맨 마지막에 저장됨
    • 테이블은 행의 순서를 지정하지는 않기 때문에
    • 이게 가능한 이유는 저장되어 있는 주소로 찾는 게 아니라 안의 데이터로 찾으니까
    • 행이 어디에 있는지 상관 안 해
    • (어떤 분들은 300데이터가 맨 위에 있는 사람도 있긴 해. 화면 설정의 차이니까 크게 신경 안 써도 돼)
  • 한 번에 하나만 삽입
    • INSERT라는 명령문 하나에 한 행만 추가 가능
    • 즉, 100개 행 넣으려면 인서트 명령문 100개 해야 해
      (현업에서는 인서트 작업을 좋아하지 않아.. ㅋㅋ 너무 단순 작업이라서)

CF. DESC로 사전에 테이블 구조를 확인하고
각각의 컬럼들에 어떤 데이터와 어떤 값을 저장해야 할지 확인하는 선 작업 진행하는 게 좋아

INSERT INTO 테이블 (컬럼1, 컬럼2, 컬럼3) <- 컬럼은 선택사항
VALUES (각 컬럼에 맞는 데이터 값)
  • VALUES 절 쓸 때 주의할 점
    : INTO 절에 명시된 컬럼의 수, 순서, 타입, 길이, 조건에 맞게 VALUES 절에 데이터가 1:1로 맵핑 되어야 해

ㅇ 테이블 이름만 쓰는 방법

  • d 테이블 확인 : d_id(PK)가 10번 ~ 270번까지 (27행)
  • d_id가 300번인 ITCENTER라는 부서 추가하자
INSERT INTO departments
values( 300, 'ITCENTER', 100, 1700)
1 row created.

(d_id, d_name, m_id, l_id) 순서, 데이터타입 맞춰서


ㅇ 컬럼 이름을 직접 명시하는 방법

  • d_id가 310번인 ADMIN이라는 부서 추가하자
INSERT INTO departments(department_id, department_name, manager_id, location_id)
VALUES (310, 'ADMIN', 101, 1800)
  • 컬럼 순서를 바꾸면?
INSERT INTO departments( location_id,  manager_id, department_id, department_name)
VALUES (1700, 100, 320,  'CCC')

바뀐 순서에 맞게 밸류도 순서 맞추면 돼

  • 즉, INTO절과 VALUES절 데이터가 1:1로 맵핑되는 게 포인트!


ㅇ 테이블에 NULL을 입력하는 방법 (2가지)

  • 암시적 방법 (implicit)

    • INTO 절에서 컬럼을 삭제하면 자동으로 NULL값 삽입돼
    • 이유 : 인서트라는 문장은 행을 삽입하는 것. 행단위 작업을 해
      그래서 자동으로 삭제가 된 컬럼에 널 값을 삽입
    • 예) 컬럼을 4개 중 2개만 입력하고 VALUES절에도 그에 맞게 2개만 입력하면 나머지는 NULL이 돼
  • 명시적 방법 (explicit) - 이 방법을 더 선호

    • VALUES 절에 NULL이라는 키워드 직접 명시하기
INSERT INTO departments
VALUES ( 340, 'FFFF', NULL, NULL)
  • 조심해야 할 것
    • NULL에 작은따옴표 있으면 안 돼 : NULL이라는 문자를 저장하겠다~ 가 돼버려

ㅇ 현재 날짜 삽입

  • VALUES 에 값 대신 SYSDATE 사용
  • 특정 날짜 값 삽입은 안 배운 거라 넘어가

ㅇ 스크립트 작성은 안 쓰는 방법이라 소개만 하고 넘어가

  • 여러 개의 행을 삽입할 때 일일이 쓰면 귀찮잖아. 그래서 값을 키보드로 입력받을 수 있게
  • 외부에서 값을 받아들일 때 치환 변수를 사용 &a, &b
  • sql 명령문에서도 외부에서 값을 받아들일 때 이걸 사용해
  • 인서트 문장에서 많이 사용하지 않아.
  • 현업에서 쓰는 방법은 내일 소개해드릴 거야

ㅇ 서브쿼리를 포함하는 인서트문
내일 테이블 생성하는 방법 배우고 같이 배울 거야




(INSERT에서 많이 하는 실수)


ㅇ 데이터를 삽입할 때는 무결성 검증을 해

  • 컬럼 무결성 : 컬럼의 데이터 타입과 길이에 맞는 데이터만을 삽입해야 해
    예) d_id 숫자(5) : 'aa'(문자), 293845(6자리)는 안돼
  • 제약조건 무결성 : PK, FK가 제약조건이야
    • 제약조건이 설치되어 있으면 제약조건에 맞는 데이터들만 들어와야 해
    • 만약 d_id 에 10 삽입하면? 에러나
      프라이머리 키는 중복을 허용하지 않으니까
      프라이머리 키 무결성에 의해 에러가 나
  • 각각의 에러 문구
INSERT INTO departments
VALUES ( 10, 'AA', 100, 1700)
SQL> /
ERROR at line 1:
ORA-00001: unique constraint (HR.DEPT_ID_PK) violated

d_id는 프라이머리 키인데 10번이 이미 있어서

INSERT INTO departments
VALUES ( 'AA', 'AA', 100, 1700)
SQL> /
ERROR at line 2:
ORA-01722: invalid number

d_id는 숫자만 가능해서


ㅇ INSERT는 한 번에 하나의 행만 삽입 가능
INSERT
VALUES
VALUES
VALUES
이렇게는 안 돼

(물론 엑셀 사용해서 로드하거나 고급기능으로 여러 개 집어넣을 수 있지만) 기본 문법은 이래


profile
STEP BY STEP

0개의 댓글