문제
다음 중 오류 없이 실행될 수 있는 올바른 INSERT 문은 무엇인가?
보기
[SQL]
CREATE TABLE ORD_TAB (
ORDER_ID NUMBER PRIMARY KEY,
CUSTOMER_ID NUMBER NOT NULL,
ORDER_DATE DATE,
TOTAL_AMOUNT NUMBER(10,2)
);
-
선택지 1
INSERT INTO ORD_TAB VALUES(1001, 2001, '2023-05-01', 0);
-
선택지2
INSERT INTO ORD_TAB(ORDER_ID, CUSTOMER_ID, TOTAL_AMOUNT) VALUES(1002, 2002, -100);
-
선택지3
INSERT INTO ORD_TAB(ORDER_ID, CUSTOMER_ID) VALUES(1003, 2003);
-
선택지 4
INSERT INTO ORD_TAB VALUES(1004, NULL, SYSDATE, 500);
정답
3
해설
정답은 3번입니다.
이 문제는 INSERT 문에서 컬럼 제약조건과 데이터 타입, 컬럼 매핑을 정확히 이해하는 것이 핵심입니다. 테이블 정의를 보면 ORDER_ID는 PRIMARY KEY이므로 NULL과 중복이 허용되지 않으며, CUSTOMER_ID는 NOT NULL 제약조건이 있어 반드시 값이 필요합니다. ORDER_DATE와 TOTAL_AMOUNT는 NULL 입력이 가능합니다.
INSERT 문은 컬럼을 명시하지 않으면 모든 컬럼을 순서대로 입력해야 하며, 컬럼을 명시하면 해당 컬럼만 입력할 수 있고 나머지는 NULL로 처리됩니다.
1. INSERT INTO ORD_TAB VALUES(1001, 2001, '2023-05-01', 0);
: ORDER_DATE는 DATE 타입이므로 문자열을 그대로 넣으면 오류가 발생할 수 있습니다. 일반적으로 TO_DATE 함수가 필요하므로 부적절한 SQL입니다.
2. INSERT INTO ORD_TAB(ORDER_ID, CUSTOMER_ID, TOTAL_AMOUNT) VALUES(1002, 2002, -100);
: 문법적으로는 가능하지만 TOTAL_AMOUNT에 음수를 허용하지 않는 제약조건이 있다고 가정하면 오류가 발생할 수 있습니다. 따라서 가장 적절한 정답이 아닙니다.
3. INSERT INTO ORD_TAB(ORDER_ID, CUSTOMER_ID) VALUES(1003, 2003);
: NOT NULL 컬럼인 CUSTOMER_ID가 포함되어 있으며, 나머지 컬럼은 NULL 허용이므로 정상적으로 실행됩니다. 가장 적절한 SQL입니다.
4. INSERT INTO ORD_TAB VALUES(1004, NULL, SYSDATE, 500);
: CUSTOMER_ID는 NOT NULL 제약조건이 있으므로 NULL이 들어가면 오류가 발생합니다.
이 문제의 핵심은 NOT NULL 제약조건과 컬럼 지정 INSERT의 동작 방식입니다. 정답인 3번은 필수 컬럼만 정확히 입력하고 나머지는 NULL 처리되는 올바른 방식이며, 나머지 선지들은 데이터 타입 또는 제약조건 위반으로 오류가 발생합니다.
따라서, 정답은 '3. INSERT INTO ORD_TAB(ORDER_ID, CUSTOMER_ID) VALUES(1003, 2003);' 입니다.