테이블
외래키 설정할 때 부모테이블은 이미 만들어져 있어야 함.
외래키가 없다 = 부모테이블이 없다.
기본키만 있고 외래키가 없는 엔터티 : 핵심 엔터티(부모가 없이 태어나는 엔터티, key entity)
다른 엔터티에 의해 생성되는 엔터티 : 종속 엔터티
Import : 엑셀에서 오라클로 데이터를 가져올 때 쓰는 명령어
2021-0909-01)
사용예)사업장 테이블을 생성하시오
테이블명:CONST_SITE(사업장)
--------------------------------------------------------------
컬럼명 데이터타입 크기 NULLABLE PK/FK
--------------------------------------------------------------
CONST_ID CHAR 8 N.N PK ==> 기본키라서 N.N은 생략가능
CONST_NAME VARCHAR2 50 N.N
CONST_ADDR VARCHAR2 100
CONST_TEL_NUM VARCHAR2 20
REMARKS VARCHAR2 200
--------------------------------------------------------------
답)
CREATE TABLE CONST_SITE(
CONST_ID CHAR(8) NOT NULL,(생략가능 - 기본키니까)
CONST_NAME VARCHAR2(50) NOT NULL,
CONST_ADDR VARCHAR2(100),
CONST_TEL_NUM VARCHAR2(20),
REMARKS VARCHAR2(200),
CONSTRAINT pk_const_site PRIMARY KEY(CONST_ID)
)
사용예)사업장 테이블을 생성하시오
테이블명:TBL_WORKS(근무)
----------------------------------------------------------
컬럼명 데이터타입 크기 NULLABLE PK/FK
----------------------------------------------------------
EMP_ID CHAR 5 PK&FK
CONST_ID CHAR 8 PK&FK
SDATE DATE Default SYSDATE
--투입일자, DATE타입은 길이를 갖지 않음. / SYSDATE : 시스템에서 제공해주는 날짜
EDATE DATE
-----------------------------------------------------------
답)
CREATE TABLE TBL_WORKS(
EMP_ID CHAR(5),
CONST_ID CHAR(8),
SDATE DATE SYSDATE,
EDATE DATE,
CONSTRAINT pk_tbl_works PRIMARY KEY(EMP_ID, CONST_ID), ---기본키는 두 개 동시 기술 가능
CONSTRAINT fk_tbl_emp FOREIGN KEY(EMP_ID) ---emp 테이블을 참조한 work 테이블의 외래키
REFERENCES EMPLOYEE(EMP_ID),
CONSTRAINT fk_tbl_site FOREIGN KEY(CONST_ID) -- 자기테이블에서 사용되는 컬럼명 기재
REFERENCES CONST_SITE(CONST_ID) ---- 부모테이블에서 사용되는 컬럼명 기재
)
(사용형식)
INSERT INTO 테이블명['(컬럼명1, 컬럼명2,...)']
VALUES(값1, 값2,...)
. '(컬럼명1, 컬럼명2,...)' : 컬럼명을 생략하면 테이블 생성 시 기술한 순서와 모든 컬럼에 배정될 값(데이터)을 VALUES절에 기술해야 한다.
=> 값을 입력할 때 값이 없으면 null을 입력하면 됨.
** 오라클에서 null값은 = ''(따옴표 두 개, 화이트 스페이스)로 대체 가능하다.
. '(컬럼명1, 컬럼명2,...)' : 필요한 컬럼에만 값을 배정하기 위해 사용되며 컬럼 제약사항이 NOT NULL인 컬럼은 생략할 수 없음(NOT NULL로 설정한 컬럼은 컬럼명을 꼭 써야함.)
** 오라클에서 공백은 자료를 구분하는 기호가 됨, 문자열은 ' ' (따옴표)로 묶어줘야 한다.
사용예)사원테이블(EMPLOYEE)에 다음 자료를 입력하시오
[자료]
--------------------------------------------------
사원번호 사원명 주소 부서명
--------------------------------------------------
18021 홍길동 대전시 중구 중앙로 76 설계부
20002 홍길순 토목
17113 강감찬 총무부
19007 이성계
--------------------------------------------------
답)
INSERT INTO EMPLOYEE
VALUES('18021','홍길동','대전시 중구 중앙로 76','설계부');
INSERT INTO EMPLOYEE
VALUES('20002','홍길순','','토목')
확인하려면 :
SELECT * FROM EMPLOYEE
----------------------------------------------------------------
사업장번호 사업장명 주소 전화번호 비고
----------------------------------------------------------------
A1010120 도로신설공사 충남 예산군 예산읍 123-5678 공사중
C2103002 새여울초등학교 대전시 대덕구 876-0987 공사완료
----------------------------------------------------------------
답)
INSERT INTO CONST_SITE
VALUES('A1010120','도로신설공사','충남 예산군 예산읍','123-5678','공사중')
INSERT INTO CONST_SITE
VALUES('C2103002','새여울초등학교','대전시 대덕구','876-0987','공사완료')
사용예)다음 자료를 근무테이블에 저장하시오
1) 홍길동사원이 '도로신설공사' 공사장에 '2021-08-25'일자로 배속됨
답)
INSERT INTO TBL_WORKS(EMP_ID,CONST_ID)
VALUES('18021','A1010120')
2) 강감찬직원이 '새여울초등학교' 공사장에 2020년 2월1일 배속되어 2020년 12월
30일까지 근무했음
답)
INSERT INTO TBL_WORKS
VALUES('17113','C2103002',TO_DATE('20200201'),TO_DATE('20201230'))
=> TO_DATE는 문자열을 날짜로 바꿔주는 함수
SYSDATE : 사용자가 날짜를 입력하지 않았을 때 오늘 날짜로 저장됨, null값을 입력하면 null이 됨.
기본키가 두 개일 때는 그 기본키의 값의 묶음이 중복되지 않으면 됨.
데이터 타입
문자열 데이터 타입
. 오라클은 문자타입은 존재하지 않음(자바에서의 Char 타입이 오라클는 없음)
. 모든 문자열은 ' '안에 기술되어야 함(" "는 잘 사용되지 않음)
. ' '에 기술되는 문자열은 대소문자 구별됨
. 문자열 데이터 타입은 CHAR, VARCHAR, VARCHAR2, NCARCHAR, LONG, CLOB, NCLOB 등이 있음
1) CHAR (고정길이 - 사용자가 칸을 잡으면 그 칸은 다른 곳에 사용 못함.)
고정길이 데이터를 저장
최대 2000byte 저장 가능
기억공간이 남으면 오른쪽에 남는 공간에 공백이 채워짐
기본키 설정이나 확정된 길이를 나타내는 컬럼(주민번호 등) - 그 외에는 잘 안 씀.
(사용형식)
컬럼명 CHAR(크기[BYTE|CHAR])
. '크기[BYTE|CHAR]' : 크기가 byte인지 글자의 개수(CHAR)인지 설정, 기본은 BYTE
. 한글 한 글자는 3 byte(최대 666글자 저장)
사용예)
CREATE TABLE TEMP01(
COL1 CHAR(50),
COL2 CHAR(50 BYTE),
COL3 CHAR(50 CHAR));
INSERT INTO TEMP01
VALUES('IL POSTINO','IL POSTINO','일 포스티노');
SELECT * FROM TEMP01;
SELECT LENGTHB(COL1), --- 값 : 50
LENGTHB(COL2), --- 값 : 50
LENGTHB(COL3), --- 값 : 60
LENGTH - 글자 수
LENGTHB - 기억장소의 바이트단위의 길이를 나타낼 때 사용
오늘의 리뷰 : 오늘은 Oracle에서의 명령문들을 배웠다.
Insert into 와 values,
테이블을 직접 만들고 기본키, 외래키를 설정했다.
생각보다 재미있다.
액세스 만들 때도 재미있었는데 명령문에 따라 내가 하고싶은 대로 되니까 재미있는 것 같다.
이론을 많이 배웠을 때는 지루했는데 직접 명령문을 치고 따라하고 만들어보니 좋았다.