728x90
CREATE TABLE REMAIN
(
REMAIN_YEAR CHAR(4) NOT NULL, -- 해당 년도
REMAIN_PROD VARCHAR2(10) NOT NULL, -- 상품 코드
REMAIN_J_00 NUMBER(5), -- 전년 재고
REMAIN_I NUMBER(5), -- 입고
REMAIN_O NUMBER(5), -- 출고
REMAIN_J_99 NUMBER(5), -- 현재고
REMAIN_DATE DATE, -- 처리일자
CONSTRAINT PK_REMAIN PRIMARY KEY(REMAIN_YEAR, REMAIN_PROD),
CONSTRAINT FR_REMAIN_PROD FOREIGN KEY(REMAIN_PROD) REFERENCES PROD(PROD_ID)
);
--컬럼과 데이터갯수가 같을 때
--컬럼의 목록을 생략할 수 있음
INSERT INTO REMAIN
VALUES('2003', 'P101000001',20,10,12,18,'2004-01-01');
INSERT INTO REMAIN (REMAIN_YEAR,REMAIN_PROD,REMAIN_J_00,
REMAIN_I, REMAIN_O,REMAIN_J_99,
REMAIN_DATE)
VALUES('2003', 'P101000002',11,7,6,12,'2004-01-02');
SELECT * FROM REMAIN;
--NULL을 입력하는 방법
--1)컬럼목록 및 데이터 목록에서 뺌 // N.N여부 확인
INSERT INTO REMAIN (REMAIN_YEAR, REMAIN_PROD, REMAIN_I)
VALUES('2003','P102000007',10);
SELECT * FROM REMAIN;
INSERT INTO REMAIN (REMAIN_YEAR, REMAIN_PROD, REMAIN_j_00,
REMAIN_I,REMAIN_J_99,REMAIN_DATE)
VALUES('2003','P102000001',31,21,41,'2003-12-31');
SELECT * FROM REMAIN;
--2) 컬럼목록에 포함 및 데이터목록에 NULL을 입력
INSERT INTO REMAIN (REMAIN_YEAR, REMAIN_PROD, REMAIN_j_00,
REMAIN_I,REMAIN_O,REMAIN_J_99,REMAIN_DATE)
VALUES('2003','P102000002',31,21,NULL,41,'2003-12-31');
SELECT * FROM REMAIN;
--3) 컬럼목록에 포함 및 데이터목록에 ''(화이트스페이스)을 입력
--'' : ORACLE에서 NULL로 처리, SQLSERVER/MYSQL은 공백문자 데이터로 처리
INSERT INTO REMAIN (REMAIN_YEAR, REMAIN_PROD, REMAIN_j_00,
REMAIN_I,REMAIN_O,REMAIN_J_99,REMAIN_DATE)
VALUES('2003','P102000003',31,21,'',41,SYSDATE);
SELECT * FROM REMAIN;
--insert 문제1)
--remain테이블에 다음 데이터를 입력하기
--해당년도 : 2003
--상품코드 : P302000023
--전년재고 : 35
--출고 : 20
--현재고 : 15
--처리일자 : sysdate
/
INSERT INTO REMAIN(REMAIN_YEAR, REMAIN_PROD, REMAIN_J_00,
REMAIN_O,REMAIN_J_99,REMAIN_DATE)
VALUES('2003','P302000023',35,20,15,SYSDATE);
/
--insert 문제2)
--remain테이블에 다음 데이터를 입력하기
--오류발생 시 상품코드의 첫글자를 수정하여 디버깅
--해당년도 : 2003
--상품코드 : Z302000022->p302000022
--전년재고 : 27
--처리일자 : 2004년 1월 1일
INSERT INTO REMAIN(REMAIN_YEAR, REMAIN_PROD,
REMAIN_J_00,REMAIN_DATE)
VALUES('2003','P302000022',27,'2004-01-01');
--insert 문제3)
--remain테이블에 다음 데이터를 입력하기
--오류발생 시 디버깅(2003년도)->YEAR은 N.N이기 때문에 값을 넣어줘야함.
--상품코드 : P302000016
--전년재고 : 30
--입고 : 10
--출고 : 15
--현재고 :25
--처리일자 : 2004년 1월 2일
INSERT INTO REMAIN(REMAIN_YEAR, REMAIN_PROD, REMAIN_J_00,
REMAIN_I, REMAIN_O, REMAIN_J_99,REMAIN_DATE)
VALUES('2003','P302000016', 30,10,15,25,'2004-01-02');
COMMIT;
--INSERT 복습(2022-06-09)
CREATE TABLE IU
( IU_ACTINFO VARCHAR2(10) NOT NULL,
IU_ACTYEAR VARCHAR2(20) NOT NULL,
IU_MEMBER VARCHAR2(60),
IU_SITE VARCHAR2(40),
CONSTRAINT PK_IU PRIMARY KEY(IU_ACTINFO)
);
/*
1. IU테이블에 데이터를 입력하기
IU_ACTINFO : IU
IU_ACTYEAR : 2022
IU_MEMBER : 아이유
IU_SITE : http://www.smtown.com
*/
INSERT INTO IU(IU_ACTINFO, IU_ACTYEAR, IU_MEMBER, IU_SITE)
VALUES('IU', '2022','아이유','http://www.smtown.com');
SELECT*FROM IU;
INSERT INTO IU(IU_ACTINFO, IU_ACTYEAR, IU_MEMBER)
VALUES('SUGA', '2022','슈가');
COMMIT;
--IU테이블을 사용하여 IU2테이블을 복제하기(테이블백업)
--제약조건은 복제안됨
CREATE TABLE IU2
AS
SELECT * FROM IU;
--IU테이블 데이터삭제
DELETE FROM IU2;
--IU테이블로 데이터를 INSERT하기
INSERT INTO IU2(IU_ACTINFO, IU_ACTYEAR,IU_MEMBER, IU_SITE)
SELECT IU_ACTINFO
, IU_ACTYEAR
, IU_MEMBER
, IU_SITE
FROM IU;
--문제풀기
--TEST 계정. INSERT연습
/*
새로운 과목이 개설되었다. T_COURSE 테이블에
추가하시오. 과목코드는 'L1061'이고,
과목명이 'ERP실무', 3학점이며,
담당교수가 'P12'이고, 추가 수강료는
50000원이다.
*/
INSERT INTO T_COURSE(COURSE_ID, TITLE, C_NUMBER, PROFESSOR_ID, COURSE_FEES)
VALUES('L1061', 'ERP실무', 3, 'P12', 50000);
COMMIT;
SELECT * FROM T_COURSE;
/*
--예제 9.03
학번이 'B0901'인 'L1061'과목의 85점에 대한 성적 취득
날짜는 2010년 06월 28일이다. 이 정보를 SG_SCORES 테이블에
입력하시오.
*/
--C1601 L1011 93 16/12/27
--SCORE_ASSIGNED 날짜형 컬럼에 날짜형문자 데이터로 입력함.
--데이터타입이 동일하지 않아도(날짜형문자->DATE) 예외사항이
--적용되어 날짜형으로 자동형변환이 되어 저장됨
INSERT INTO SG_SCORES(STUDENT_ID,COURSE_ID,SCORE,GRADE,SCORE_ASSIGNED)
VALUES('B0901', 'L1061', 85, NULL,'2010-06-28');
--USER_CONSTRAINTS : 시스템 뷰(VIEW)테이블(가상테이블)
SELECT * FROM USER_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'SG_SCORES_FK2';
COMMIT;
/*
예제 9.04
과목코드가 'L3041',과목명이 '임베디드시스템', 3학점이며,
담당교수번호가 'P31', 추가 수강료는 30000원일 때,
이 정보를 COURSE 테이블에 입력하시오.
*/
INSERT INTO COURSE(COURSE_ID,TITLE,C_NUMBER,PROFESSOR_ID,COURSE_FEES)
VALUES('L3041','임베디드시스템',3,'P31',30000);
/*
예제 9.05
과목코드가 'L3041', 과목명이 '임베디드시스템', 3학점이며,
담당교수번호가 'P31', 추가 수강료는 30000원일 때,
이 정보를 COURSE 테이블에 입력하시오.
*/
--SQL 오류: ORA-00947: not enough values
--값의 수가 충분하지 않습니다.
--COURSE 테이블의 컬럼 수가 5개이고, 입력 데이터가 4개면
--발생하는 오류.
INSERT INTO COURSE(COURSE_ID,TITLE,C_NUMBER,PROFESSOR_ID,COURSE_FEES)
VALUES('L3041','임베디드시스템',3,'P31');
--그리하여 개수를 맞춰주자..
INSERT INTO COURSE(COURSE_ID,TITLE,C_NUMBER,PROFESSOR_ID,COURSE_FEES)
VALUES('L3041','임베디드시스템',3,'P31',30000);
--ORA-00001: unique constraint (TEST.COURSE_PK) violated
--UNIQUE(중복불가, NULL허용) : 유일한 <-> PRIMARY KEY(중복불가, NULL불허)
SELECT * FROM USER_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'COURSE_PK';
--L3041 임베디드시스템 3 P31 30000
/*
예제 9.06
과목코드는 'L1031'이고, 과목명이 'SQL', 3학점이며,
담당교수가 'P12'이고, 추가 수강료는 30000원이다.
이 정보를 COURSE 테이블에 입력하시오.
*/
INSERT INTO COURSE(COURSE_ID,TITLE,C_NUMBER,PROFESSOR_ID,COURSE_FEES)
VALUES('L1031','SQL',3,'P12',30000);
--ORA-00001: unique constraint (TEST.COURSE_PK) violated
-- 무결성(개체 무결성:중복안됨, N.N) 제약조건에 위배됩니다.
/*
예제 9.07
컴퓨터공학과에 신임교수가 채용되었다. 교수번호는 'P14',
교수명은 '조성우', 직위는 '전임강사', 전화번호는
'765-4114'일 때, 이 정보를 PROFESSOR 테이블에 입력하시오.
*/
--P31 장혜연 부교수 컴공
--765-4512 yaham@cyber.ac.kr 학과장 P00
INSERT INTO PROFESSOR(PROFESSOR_ID,NAME,POSITION,DEPT_ID,
TELEPHONE,EMAIL,DUTY,MGR)
VALUES('P14','조성우','전임강사','컴퓨터공학과',
'765-4114',NULL,NULL,NULL);
--value too large for column "TEST"."PROFESSOR"."DEPT_ID" (actual: 18, maximum: 10)
--column "TEST"."PROFESSOR"."DEPT_ID" : TEST계정의 PRORESSOR테이블의 DEPT_ID컬럼
--value too large : 값이 매우 크다(입력데이터: 18BYTES, 최대허용: 10BYTES)
INSERT INTO PROFESSOR(PROFESSOR_ID,NAME,POSITION,DEPT_ID,
TELEPHONE,EMAIL,DUTY,MGR)
VALUES('P14','조성우','전임강사','컴공',
'765-4114',NULL,NULL,NULL);
/*
예제 9.08
'컴공'학과 2학년에 편입한 '박은혜' 학생을 STUDENT 테이블에
입력하시오. 학번은 'C0931'이고, 주민등록번호는
'911119-2******', EMAIL주소는 'C0931@CYBER.AC.KR'이다.
*/
INSERT INTO STUDENT(DEPT_ID,YEAR,STUDENT_ID,NAME,ID_NUMBER
,EMAIL)
VALUES('컴공','2','C0931','박은혜','911119-2******'
,'C0931@CYBER.AC.KR');
--USER_CONSTRAINTS : 시스템 뷰테이블
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, SEARCH_CONDITION
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'STUDENT';
/*
예제 9.09
'C0931'의 '박은혜' 학생의 ID_NUMBER 컬럼에
고유키(UNIQUE) 제약조건이 중복된 데이터를 찾아
수정하여 입력해보자
*/
--컴공 2 C0931 박은혜 911119-2******
--C0931@CYBER.AC.KR
--CONSTRAINT "STUDENT_UK" UNIQUE ("ID_NUMBER")
/*
예제 9.10
컴퓨터공학과에 외국인을 초빙강사로 채용하였다.
교수번호가 'P91', 교수명은 'Bill Gates', 직위는
'초빙강사'이며, 전화번호는 '765-4119'일 때,
이 초빙강사의 정보를 입력하시오.
*/
--P14 조성우 전임강사 컴공 765-4114
INSERT INTO PROFESSOR(PROFESSOR_ID,NAME,POSITION,DEPT_ID
,TELEPHONE)
VALUES('P91','Bill Gates','초빙강사','컴공'
,'765-4119');
--PROFESSOR 테이블의 POSITION(직위) 컬럼에 유효한 데이터
--('총장','교수','부교수','조교수','초빙교수','전임강사')
--가 입력되지 않으면, 체크 제약조건이 위배되어 오류 발생.
/*
예제 9.12
COURCE 테이블로부터 교수번호가 'P12'인 교수의
개설과목의 정보를 T_COURSE 테이블에 저장하시오.
*/
INSERT INTO T_COURSE(COURSE_ID,TITLE,C_NUMBER,PROFESSOR_ID,COURSE_FEES)
SELECT COURSE_ID,TITLE,C_NUMBER,PROFESSOR_ID,COURSE_FEES
FROM COURSE
WHERE PROFESSOR_ID = 'P12';
COMMIT;
728x90
'ddit > Oracle' 카테고리의 다른 글
PL/SQL (0) | 2022.06.13 |
---|---|
CRUD란?,CONSTRAINTS,UPDATE, SEQUENCE (0) | 2022.06.10 |
집계함수와 분석함수, 페이징처리 (0) | 2022.06.08 |
Exists 문제풀이, 집계함수/분석함수 RANK(),DENSE_RANK()차이점 (0) | 2022.06.07 |
서브쿼리, 집합연산자 (0) | 2022.06.04 |