8-2. 널 값 삽입 방법 > 학습자료 | IOTsw_u2 U2 Project
학습자료

SQL 8-2. 널 값 삽입 방법

본문

 

 

암시적(Implicit) 열 목록에서 열을 생략합니다.

명시적(Explicit)

VALUES목록에서 NULL키워드를 지정합니다.

 

문자열 및 날짜에 대해 VALUES목록에서 공백 문자열( ‘ ’ )을 지정합니다.

오라클에서 DESCRIBE명령을, MSSQL에서 sp_columns 명령을 통해 Null상태를 확인하여 대상 열에서 널 값을 사용할 수

있는지 확인한다.

 

SQL Server는 자동으로 모든 데이터 유형, 데이터 범위를 사용하며 데이터 무결성 제약 조건을 보존한다.

목록에 없는 열은 명시적(explicit)으로 새 행에 널 값을 갖게 된다.

다음은 사용자 입력 중에 발생할 수 있는 일반적인 오류다.

 

․ NOT NULL열에 필수 값 누락

․ 중복 값으로 고유성 제약 조건 위반

․ 외래 키 제약 조건 위반

․ CHECK 제약 조건 위반

․ 데이터 유형 불일치

․ 값의 폭(width)이 너무 넓어 열에 맞지 않음

 

예제) 특정 값 삽입

SYSDATE 함수는 현재 날짜 및 시간을 기록한다.

오라클 디비 예제 : INSERT INTO employees (employee_id,

first_name, last_name, email, phone_number, hire_date, job_id, salary,commission_pct, manager_id, department_id)

VALUES (113, 'Louis', 'Popp', 'LPOPP', '515.124.4567', SYSDATE, 'AC_ACCOUNT', 6900, NULL, 205, 100);

 

참고] Oracle에서 스크립트파일 작성 : 데이터 조작 스크립트 작성 ․ SQL문에 & 치환을 사용하여 사용자에게 값을 요구합니다. ․ &는 변수 값에 대한 위치 표시자입니다.

 

 

☞설명) SQL함수를 사용하여 특정 값 삽입

함수를 사용하여 테이블에 특정 값을 입력할 수 있다.

예제는 EMPLOYEES테이블에 사원LPOPP에 대한 정보를 기록한다.

 

이 때 HIRE_DATE열에 현재 날짜 및 시간을 제공하기 위해 SYSDATE함수를 사용한다.

테이블에 행을 삽입할 때 USER함수를 사용하여 현재 사용자 이름을 기록할 수도 있다.

테이블에 추가한 항목 확인

 

오라클 디비 예제 : 

SELECT employee_id, last_name, job_id, hire_date, commission_pct

FROM employees

WHERE employee_id = 113;

 

MSSQL 디비 예제 :

INSERT INTO employee (emp_id, fname, minit, lname, job_id, job_lvl, pub_id, hire_date)

VALUES (113, 'Louis', 'M', 'LPOPP',15, 100, '0877', GETDATE());

 

테이블에 추가한 항목 확인

SELECT emp_id, lname, job_id, hire_date, minit

FROM employee

WHERE emp_id = 113;

 

USER_NAME 함수를 사용하여 현재 사용자 이름을 기록할 수 있다.

SELECT USER_NAME();

 

예제) 특정 날짜 값 삽입

오라클 디비 예제 : INSERT INTO employees

VALUES ( 114, 'Den', 'Raphealy', 'DRAPHEAL', '515.127.4561',

TO_DATE('FEB 3, 1999','MON DD, YYYY'), 'AC_ACCOUNT', 11000, NULL, 100, 30);

 

날짜 값을 삽입할 때 주로 사용하는 DD-MON-YY형식에서는 세기 기본값으로 현재 세기를 사용한다는 점을 기억해 두어야 한다.

날짜에도 시간 정보기 포함되므로 기본 시간은 자정(00:00:00)이다.

 

날짜를 기본형식이 아닌 다른형식(예:다른세기 또는 특정시간)으로 입력하려면 TO_DATE함수를 사용해야 한다.

예제는 사원 Raphealy의 정보를 EMPLOYEES테이블에 기록하며 HIRE_DATE열을 1999년 2월 f3일로 설정한다.

 

예제) 명령문을 사용할 경우 hire_date의 연도는 2099로 해석된다.

오라클 디비 예제 : INSERT INTO employees

VALUES (114, 'Den', 'Raphealy', 'DRAPHEAL', '515.127.4561',

'03-FEB-99', 'AC_ACCOUNT', 1100, NULL, 100, 30);

 

RR형식을 사용할 경우에는 현제 세기가 아닌 경우에도 자동으로 정확한 세기 정보를 제공한다.

MSSQL 디비 예제 :

INSERT INTO employee (emp_id, fname, minit, lname, job_id, job_lvl, pub_id, hire_date)

VALUES (114, 'Louis', 'M', 'LPOPP', 15, 100, '0877', ‘2009-08-08’);

INSERT INTO employee (emp_id, fname, minit, lname, job_id, job_lvl, pub_id, hire_date)

VALUES (114, 'Louis', 'M', 'LPOPP', 15, 100, '0877', ‘99-08-08’);

'99-08-08'로 입력하게 되면 1999년으로 입력하게 된다.

 

INSERT INTO departments (department_id, department_name, location_id);

VALUES (&department_id, '&department name, &location);

 

치환 변수가 포함된 명령을 파일에 저장한 후 이 파일에 있는 명령을 실행할 수 있다.

예제는 부서 정보를 DEPARTMENTS테이블에 기록한다.

스크립트 파일을 실행하면 & 치환 변수의 값을 입력하라는 프롬프트가 나타난다.

 

사용자가 입력한 값은 명령문으로 치환된다.

이런 방식으로 매번 실행할 때마다 다른 값을 제공하면서 동일한 스크립트 파일을 반복해서 실행할 수 있다.

MSSQL 디비 예제 :

 

INSERT INTO insert_test(emp_id, fname, minit, lname, job_id, job_lvl, pub_id, hire_date)

SELECT emp_id, fname, minit, lname, job_id, job_lvl, pub_id, hire_date

FROM employee

where pub_id='0877'

 

SELECT * FROM employee WHERE pub_id='0877'

MSSQL에서는 4-part : 서버명.DB명.소유자명.OBJECT명

 

1. 가장 간단한 경우 : object_name만 기술한다.

- 원하는 SQL server에 연결되어 있고 원하는 DB에 연결이 되어 있고, object의 owner가 dbo인 경우

select * from employee

 

2. owner.object_name :

- 액세스하기를 원하는 Object가 존재하는 SQL 서버에 연결되어 있고, Object가 존재하는 DB에 연결되어 있는 경우

- Owner가 dbo이거나 현재 login한 사용자가 Owner인 object의 경우에는 Owner를 생략해도 된다.

- Owner가 dbo가 아니고, 현재 login한 사용자가 만든 object도 아닌 경우에는 Owner를 기술해 줘야한다.

select * from dbo.employee

 

3. dbname.owner.object_name

- 액세스하고자 하는 object가 존재하는 SQL 서버에 연결되어 있고, 액세스하고자 하는 DB가 아닌 다른 DB에 연결

형식

INSERT INTO table [ column (, column) ] subquery;

 

구문 설명 :

table 테이블 이름입니다.

column 데이터를 삽입할 테이블의 열 이름이다.

subquery 테이블에 삽입할 행을 반환하는 서브 쿼리다.

 

INSERT절의 열 목록에서 열 수 및 데이터 유형은 서브 쿼리의 열 수 및 데이터 유형과 일치해야 한다.

테이블의 행에 대해 복사본을 생성하려면 서브 쿼리에서 SELECT * 를 사용한다.

 

INSERT INTO copy_emp

SELECT *

FROM employees; 

댓글목록

8. 데이터 조작 DML
이어쓰기 1.A 8-1. INSERT문 구문
이어쓰기 2.B 8-2. 널 값 삽입 방법
이어쓰기 3.C 8-3. 다른 테이블에서 행 복사
이어쓰기 4.D 8-4. 명시적(Explicit) 기본 기능 개요
이어쓰기 5.E 8-5. UPDATE문 구문
이어쓰기 6.F 8-6. 서브 쿼리로 두 열 갱신
이어쓰기 7.G 8-7. 다른 테이블을 기반으로 행 갱신
이어쓰기 8.H 8-8. DELETE문 : 행 삭제
이어쓰기 9.I 8-9. 테이블 절단(제거)
이어쓰기 10.J 8-10. INSERT문에 서브 쿼리 사용 ーー MSSQL에서 지원되지 않는 기능
이어쓰기 11.K 8-11. 데이터베이스 트랜잭션
이 원글에 이어쓰기

학습자료 목록

Total 91건 1 페이지
게시물 검색

IOTsw_u2 정보

회사 . U2
주소 . 어느별 하늘 아래에 있것지요
사업자 등록번호 . 백수임 대표 . 김씨 전화 . 02-123-4567 팩스 . 팩스없음
통신판매업신고번호 . 낼할께 개인정보관리책임자 . 김씨가 알아서 함 부가통신사업신고번호 신고안함
Copyright © 2001-2013 U2. All Rights Reserved.
닫기