INSERT 명령문은 오라클에서 데이터를 추가할 때 사용되는 기본 문법입니다.
해당 명령문의 사용방법을 익히기 위해서 샘플로 활용할 데이터베이스는 오라클 설치 시 기본으로 제공되는
scott 계정에 있는 테이블을 기반으로 해서 작성하도록 하겠습니다.
1. INSERT 명령어
INSERT문은 오라클에서 데이터를 추가할 때 사용하는 명령어입니다. 모든 데이터의 추가는 INSERT문을 통해서 이루어지기 때문에 기본적인 사용방법을 알고 있어야 합니다.
(1) 문법
INSERT INTO 테이블명 [(컬럼명1, 컬럼명2,...)]
VALUES (값1, 값2, ...);
INSERT문의 기본 문법입니다.
INSERT INTO 키워드 뒤에는 데이터를 추가할 테이블 명과 추가하려는 컬럼명을 작성합니다.
VALUES 키위드 뒤에는 해당 테이블과 컬럼에 추가할 실제 데이터를 입력합니다.
2. 데이터 추가하기
INSERT 기본 문법의 형태만 보면 아~ 이렇게 데이터를 넣는 거구나! 하고 알 수 있는 분들도 계시지만 쉽게 이해하기 어려울 수 있는데요. 실제 데이터를 추가해보면서 INSERT문의 기본적인 사용방법을 알아보도록 하겠습니다.
(2-1) 데이터 추가하기
INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES(7935, 'PETER', 'CLERK', 7821, SYSDATE, 3200, 0, 20);
해당 SQL문을 바탕으로 SQL문이 의미하는 바를 살펴보겠습니다.
INSERT INTO EMP : EMP 테이블에 데이터를 추가하겠다.
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) : EMP테이블에 추가할 컬럼명을 나열합니다.
VALUES : 위에서 작성된 컬럼 순서와 테이블에 추가하고자 하는 데이터를 넣겠습니다.
(7935, 'PETER', 'CLERK', 7821, SYSDATE, 3200, 0, 20) : 추가하고자 하는 실제 데이터
이와 같이 데이터를 추가했을 때의 실행결과를 살펴보겠습니다.
(2-2) 데이터 추가하기 실행결과
위의 SQL문을 작성하고 실행하면 위와 같이 1행이 삽입되었다는 메시지가 나타납니다.
이와 같은 메시지가 나타났다면 추가하고자 하는 데이터가 EMP 테이블에 이상 없이 추가되었음을 의미합니다.
이제 실제로 데이터가 잘 추가되었는지 SELECT문을 이용해서 확인해보겠습니다.
SELECT *
FROM EMP
WHERE EMPNO = 7935;
추가한 데이터를 살펴보면 EMPNO에 해당하는 값이 7935인 것을 확인할 수 있는데요. 이때 추가한 7935 값을 WHERE 조건에 추가하여 데이터를 조회해보면 위와 같이 아까 추가한 데이터가 정상적으로 조회되는 것을 확인할 수 있습니다.
3. 컬럼명 생략하여 데이터 추가하기
INSERT를 통해 데이터를 추가하는 방법을 알아보았습니다. 그러나 여기서 불편한 점이 있는데요. 바로 매번 INSERT문을 작성할 때마다 컬럼명을 작성해야 한다는 점인데요.
컬럼명은 다음 2가지 경우일 때 일부 컬럼명을 생략하거나, 아예 사용하지 않을 수 있습니다.
첫 번째는 추가하고자 하는 테이블의 모든 컬럼에 해당하는 데이터가 있을 경우.
이럴 경우에는 컬럼명을 명시하지하지 않고 VALUES에 해당 값만을 입력하면 됩니다. 단, 이때 입력하는 VALUES의 데이터 순서는 컬럼 순서와 일치해야 합니다.
두 번째는 추가하고자 하는 데이터가 특정 컬럼 몇몇에 국한되는 경우.
예를 들어 나는 EMP 테이블에서 EMPNO값과 ENAME값만을 입력하길 원할 경우에는
INSERT INTO EMP뒤에 EMPNO, ENAME 컬럼명만 작성하면 되고, VALUES부분에는 각 컬럼에 해당하는 값만 넣으면 됩니다.
(3-1) 컬럼명 생략
먼저 컬럼명을 생략하여 데이터를 입력해보도록 하겠습니다.
아래의 SQL문을 실행시켜보세요.
INSERT INTO EMP
VALUES(7936, 'TOM', 'CLERK', 7821, SYSDATE, 3500, 0, 20);
SQL문을 살펴보면 INSERT INTO EMP뒤에 컬럼명을 작성하지 않고 INSERT문을 실행시킬 수 있습니다.
단, 이럴 경우 VALUES의 값은 EMP 테이블이 가지고 있는 모든 컬럼에 해당하는 값이 컬럼의 순서에 맞게 작성되어 있어야 합니다.
만약 컬럼의 순서에 맞게 데이터가 없거나 순서에 맞지 않게 데이터가 입력되었을 경우 예상치 못한 에러가 발생할 수 있습니다. 이제 이렇게 입력한 데이터가 정상적으로 출력되는지 확인해보도록 하겠습니다.
(3-2) 컬럼명 생략 실행결과
SELECT *
FROM EMP
WHERE EMPNO = 7936;
이번에 입력한 값은 EMPNO의 값이 7936이므로, 해당 값을 조건으로 설정하여 데이터를 조회해보도록 하겠습니다.
실행결과를 보면 VALUES의 값이 모두 정상적으로 추가됨을 확인할 수 있습니다.
4. 특정 컬럼명만으로 데이터 추가하기
방금 살펴본 데이터 입력방식은 컬럼 내의 모든 VALUES값을 추가할 때 유용한 방법입니다. 그러나 특정값만을 넣고 싶을 때는 방금과 같은 방식으로 SQL문을 작성하면 적용이 불가능합니다. 이럴 경우에는 어떻게 INSERT문을 작성해야 할까요?
아래의 예시 SQL문을 확인해보겠습니다.
(4-1) 특정 컬럼명
INSERT INTO EMP (EMPNO, ENAME, SAL)
VALUES(7937, 'LINDA', 4000);
해당 문법을 살펴보면 INSERT INTO EMP 뒤쪽에 EMPNO, ENAME, SAL이라는 컬럼명이 작성되어 있음을 확인할 수 있습니다. 단, 맨처음에 작성했던 INSERT문과는 다른점은 전체 컬럼명을 작성하는것이 아닌, 특정한 몇몇 컬럼명만을 작성했다는 차이점이 있는데요. 이와같이 SQL문을 실행하면 결과값이 어떤식으로 나타나는지 확인해보도록 하겠습니다.
(4-2) 특정 컬럼명 실행결과
SELECT *
FROM EMP
WHERE EMPNO = 7937;
이번에 입력한 값은 7937이므로 해당 값을 조건으로 하여 데이터를 조회해보도록 하겠습니다.
실행결과를 살펴보면 방금 입력한 EMPNO, ENAME, SAL 컬럼에만 데이터가 입력되어 있음을 확인할 수 있습니다.
5. INSERT문 작성 시 참고사항
INSERT 하는 방법은 여러 가지 방법이 있습니다. 반복문을 활용하여 데이터를 추가할 수 있고, SELECT문을 이용해서 조회된 데이터를 이용해서 데이터를 추가할 수 있습니다. 이와 같은 방법은 나중에 별도로 다루기로 하고 마지막으로 작성하는 내용은 일반적으로 INSERT문을 작성할 때 개인적으로는 이 정도는 참고하면 좋을 것 같은 내용을 작성해보도록 하겠습니다.
(5-1) 가급적 컬럼명은 작성해주세요.
위에서 소개해드린 INSERT 방법 중에서 모든 컬럼 값을 입력할 때는 컬럼명을 생략해도 된다는 내용을 작성했습니다.
물론, 컬럼명을 생략하여 INSERT문을 만들 수 있지만, 가급적이면 전체 데이터를 입력할때도 컬럼명을 전부 작성하는 습관을 들이시는 것을 권해드립니다. 그 이유는 보통 개발을 할 때는 혼자 일하지 않고 여러 명이 일하는 환경에 놓이게 됩니다. 그렇기 때문에 예상치 못한 상황 혹은 프로세스 변경으로 인해 간혹 가다 테이블에 컬럼이 추가될 수 있고, 일부 컬럼이 제거될 수 있습니다.
만약 테이블 내의 컬럼이 변경되면 INSERT INTO EMP (컬럼 없음) 이와 같이 SQL문을 작성했다면 경우에 따라선 에러가 발생되거나, 데이터가 엉뚱한 컬럼으로 추가될 수 있습니다.
따라서 모든 데이터를 추가하는 INSERT문일지라도 가급적이면 컬럼명을 명시하여 작성하는 것을 권해드립니다.
(5-2) 묵시적 형 변환
조금 민감한 사람이었다면 위에서 작성한 VALUES를 보면 어떤 곳에는 홀따옴표( ' )가 있고, 어떤곳에는 홀 따옴표가 없는것을 볼 수 있으셨을탠데요. 보통 데이터를 추가할때 홀따옴표가 있는 값은 문자형이고, 홀따옴표가 없는 값은 숫자형 데이터일 경우에 이와같이 사용할 수 있습니다. 차후 테이블 구조를 작성할때 작성하겠지만, 테이블의 컬럼은 숫자형, 문자형 등 데이터 타입을 별도로 설정하여 테이블을 만드는 작업이 선행됩니다.
이때 오라클은 홀따옴표가 있는 값은 문자로, 홀따옴표가 없는 값은 숫자로 인식하게 되는데요. 만약 숫자형 컬럼 부분에 들어가는 데이터에 홀 따옴표로 '100'을 넣으면 어떻게 될까요?
이때 오라클은 '100'이라는 문자형 값을 숫자형 컬럼에 넣을 때 자동으로 문자형 100을 숫자형 100으로 인식하여 데이터를 입력하게 됩니다. 이렇게 데이터 타입이 다름에도 값을 보고 오라클이 입력하고자 하는 컬럼의 데이터 타입으로 자동으로 변경하는 행위를 묵시적 형 변환이라고 합니다. 따라서 100이라는 값도 사실 '100'이라고 작성해도 데이터가 추가될때는 큰 문제는 없습니다. 단, 이렇게 형변환이 불가능한 데이터일 경우에는 에러가 발생하게 되는데요.
가령 'TOM'이라는 문자형 값을 숫자형 컬럼에 넣으려고 하면, 아무리 형 변환을 해도 T, O, M은 숫자가 아니기 때문에 이럴 경우에는 에러가 발생하게 되니 SQL문을 작성할 때는 주의해주세요.
(5-3) 일부러 오타를 내세요.
이게 무슨 소리인가 할 텐데요ㅎㅎ;;
보통 정상적으로 동작하는 시스템에서는 INSERT문을 직접 작성하는 일은 거의 없습니다. 보통은 시스템 내에서 알아서 INSERT문을 만들고 데이터를 추가하는 경우가 대부분입니다. 즉, 여러분이 INSERT문을 작성한다는 것은 특정 이슈가 발생해서 부득이 데이터를 임의로 넣을 경우, 또는 데이터 이관 등 대용량의 데이터를 다른 쪽 테이블에 INSERT 할 때 해당 SQL문을 직접 작성하게 되는데요.
어떤 경우가 되든 INSERT문을 잘못 작성한 상태로 데이터가 입력되면 큰 문제가 따라올 가능성이 높습니다.
그렇기 때문에 INSERT문을 작성할 때 예상치 못한 실행을 막기 위해 일부러 실행이 되지 않도록 오타를 내는 것도 좋은 방법 중 하나라 생각합니다. 저의 경우에는 INSERT의 I를 제거한 NSERT라고 작성해서 제가 넣어야 할 데이터 작업을 진행한 뒤 이상이 없다고 확신이 들 때 온전한 INSERT를 작성해서 실행하곤 합니다.
이건 꼭 이렇게 하세요!라고 작성한 것이 아니고, 조금이라도 조심하자는 취지에서 작성한 것이니 참고만 해주세요~
'DB > Oracle' 카테고리의 다른 글
[ORACLE] [오라클 문법] 06. CREATE TABLE(테이블 생성) 사용방법 & 예제 (0) | 2022.04.07 |
---|---|
[ORACLE] [오라클 문법] 05. DELETE문(삭제) 사용방법 & 예제 (0) | 2022.03.29 |
[ORACLE] [오라클 문법] 04. UPDATEA문(수정) 사용방법 & 예제 (0) | 2022.03.27 |
[ORACLE] [오라클 문법] 02. SELECT문(조회) 사용방법 & 예제 (0) | 2022.03.25 |
[ORACLE] [오라클 문법] 01. DESC문 사용방법 & 예제 (0) | 2022.03.24 |