2026. 1. 22. 16:20ㆍ대우개발원 수업 내용/Database (sql)
[테이블 스페이스]
• 오라클은 데이터를 관리하는 데이터베이스. 데이터를 어딘가에 저장해놓고 사용하는 시스템이라고 볼 수 있다.
• 데이터 저장 단위는 물리적, 논리적단위로 나눌 수 있다. 물리적 단위는 파일을 의미
• 논리적 단위는 데이터블록 -> 익스텐트 -> 세그먼트 -> 테이블스페이스이렇게 나뉜다.
[테이블 스페이스 생성]
create tablespace [테이블 스페이스명] datafile '파일경로' -- 파일경로 size 10M --초기 데이터 파일 크기 설정
autoextend off – 꽉 찼을 경우 자동 파일 크기 증가 옵션 설정
drop tablespace [테이블 스페이스명] including contents and datafiles;
테이블 스페이스 만드는 과정
CREATE TABLESPACE myts DATAFILE 'E:\oracle\oradata\MYORACLE\myts.dbf' size 100M AUTOEXTEND ON NEXT 5M;
이게 데이터 베이스 이름 (여기에 테이블 스페이스를 만든다) ↓

주소창에 경로를 복사한다 ↓

CREATE TABLESPACE myts DATAFILE

myts.dbf라는 이름의 테이블 스페이스를 만들고
size 100M - 100mb크기의 사이즈로 만듬
AUTOEXTEND ON NEXT 5M; - 현재 할당된 공간이 다 차면 저장공간이 자동으로 5MB씩 증가


사용자 생성
유저의 이름은 ora_user을 그냥 쓰면 공통 사용자 또는 롤 이름이 부적합하다고 뜸
oracle 12버전 이상은 앞에 c##을 넣어줘야하지만
아래를 사용해서 사용자 세션을 만들어서 안써도 되도록 만듬
ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE;

CREATE USER ora_user IDENTIFIED BY 1234
DEFAULT TABLESPACE MYTS
TEMPORARY TABLESPACE TEMP;
이렇게 성공적으로 사용자 생성

GRANT DBA TO ora_user;
권한 부여
connect ora_user/1234
연결

select user from dual;
듀얼 테이블에서 유저에 대한 정보 조회

SQL developer 실행
오리클 접속 테스트
관리자 계정의 접속 여부를 테스트

↓ name을 system으로 할것

테스트를 성공하면 저장 후 접속
system 테이블 밑으로 많이 생긴것을 확인

접속 추가


아이콘에 콘센트 연결 모양은 접속이 되었다는 것
select user from dual;
해당 줄에 crtl + enter눌러서 실행

f5

전체 쿼리문 다 실행



지금까지 실행된 쿼리문 보기

E드라이브에 backup 폴더 생성



expall.dmp 파일 임포트(ora_user/1234)
imp ora_user/1234 file=expall.dmp log=empall.log ignore=y grants=y rows=y indexes=y full=y
실행

expcust.dmp 파일 임포트(ora_user/1234)
imp ora_user/1234 file=expcust.dmp log=empall.log ignore=y grants=y rows=y indexes=y full=y

새로고침

SELECT table_name FROM user_tables;

[SQL과 PL/SQL 소개]
- 구조화된 질의 언어(Structured Query Language)의 약자
- DB 상에서 데이터를 읽고, 쓰고 삭제하는 등 데이터 관리를 위한 프로그램 언어
- 다른 프로그램 언어와 달리 집합적 언어의 특징을 가짐
- DDL과 DML로 구분됨
- 개발자 입장에서 사용하는 언어는 대부분 DML임
[DDL ( Data Definition Language)]
- 데이터베이스 객체를 생성, 삭제, 변경하는 언어
- CREATE : 테이블이나 인덱스, 뷰 등 데이터베이스 객체를 생성
- DROP : 생성된 데이터베이스 객체를 영구히 삭제
- ALTER : 기 생성된 데이터베이스 객체를 수정
- TRUNCATE : 테이블이나 클러스터의 데이터를 통째로 삭제
[DML ( Data Manipulation Language)]
- 데이터베이스 객체를 조작하는 언어
- SELECT : 테이블이나 뷰에 있는 데이터를 조회
- INSERT : 데이터를 신규로 생성
- UPDATE : 기 생성된 데이터를 수정
- DELETE : 데이터 삭제
- COMMIT : 변경된 데이터를 최종 적용
- ROLLBACK : 변경된 데이터를 적용하지 않고 이전 상태로 되돌림
[데이터베이스 객체]
- TABLE : 데이터 담고 있는 객체.
- VIEW : 하나 이상의 테이블 연결해서 마치 테이블인 것처럼 사용하는 객체.
- INDEX : 테이블에 있는 데이터를 바르게 찾기 위한 객체.
- SYNONYM(동의어) : 데이터베이스 객체에 대한 별칭을 부여한 객체.
- SEQUENCE : 일련번호 채번을 할 때 사용되는 객체.
- FUNCTION : 특정 연산을 하고 값을 반환하는 객체.
- PROCEDURE : 함수와 비슷하지만 값을 반환하지 않는 객체.
- PACKAGE : 용도에 맞게 함수나 프로시저 하나로 묶어 놓은 객체.
[테이블]
- 데이터를 담고 있는 객체
- 로우(행)과 컬럼(열)으로 구성된 2차원 형태의 객체
- SQL 실행 대상인 객체
- -- 를 쓰면 주석
생성구문 (대괄호 부분은 생략이 가능하다)
CREATE TABLE [스키마.]테이블명 (
컬럼1 컬럼1_데이터타입 [NULL, NOT NULL],
컬럼2 컬럼2_데이터타입 [NULL, NOT NULL],
…
…
) [ TABLESPACE 테이블스페이스명];
테이블 만들어보기 실습
SELECT table_name FROM user_tables;
-- 테이블
CREATE TABLE ex2_1(
COLUMN1 CHAR(10),
COLUMN2 VARCHAR(10),
COLUMN3 NVARCHAR2(10),
COLUMN4 NUMBER
);



커밋된 상태에서는 롤백이 되지 않음
1. 테이블(Table)
- 데이터베이스에서 데이터를 저장하는 기본 구조
- 엑셀의 시트와 동일한 개념
2. 행(Row)
- 테이블에서 하나의 레코드(Record)
- 한 개체(사람 1명, 상품 1개 등)에 대한 한 줄의 데이터
동의어
- Row
- Record
- Tuple (이론/관계형 모델)
예
ID | NAME | AGE
1 | 홍길동 | 20 ← 행(Row)
3. 열(Column)
- 데이터의 속성(항목) 을 나타냄
- 각 행이 공통으로 가지는 데이터의 종류
동의어
- Column
- Attribute
- Field (실무에서 자주 사용)
예
ID | NAME | AGE
→ ID, NAME, AGE 각각이 열(Column)
4. 필드(Field)
- 열(Column)과 동일한 의미로 사용
- “이 테이블에 어떤 필드가 있나?” = 어떤 컬럼이 있나
- 행과 열이 만나는 하나의 값(셀)
예
NAME 필드의 값 = '홍길동'
5. 한 번에 비교 정리 (시험 대비용)
용어의미다른 표현
| 테이블 | 데이터 저장 구조 | Table |
| 행 | 한 개의 데이터 묶음 | Row / Record / Tuple |
| 열 | 데이터 항목(속성) | Column / Attribute / Field |
| 필드 | 열 또는 하나의 값 | Column 또는 Cell |
6. 엑셀로 비유하면
DB 용어엑셀
| 테이블 | 시트 |
| 행(Row) | 가로 줄 |
| 열(Column) | 세로 줄 |
| 필드(Field) | 셀 또는 열 |
[테이블 생성 규칙]
ㆍ 테이블명, 컬럼명의 최대 크기는 30 Byte
ㆍ 테이블명, 컬럼명으로 예약어 사용 불가
ㆍ 테이블명, 컬럼명으로 문자, 숫자, '_','$','#'문자 사용가능, 첫 글자는 문자만.
ㆍ 한 테이블에 만들 수 있는 컬럼은 최대 255개
[데이터 타입]
문자 데이터 타입
- CHAR (크기[ BYTE | CHAR ] ) : 고정길이 문자, 최대 2000byte, 디폴트 값은 1, byte
- VARCHAR2 (크기[ BYTE | CHAR ] ) : 가변길이 문자, 최대 4000byte, 디폴트 값은 1, byte
- NCHAR (크기) : 고정길이 유니코드 문자(다국어 입력가능), 최대 2000byte, 디폴트 값은 1
- NVARCHAR2 (크기 ) : 가변길이 유니코드 문자(다국어 입력가능), 최대 4000byte, 디폴트 값은 1
- LONG : 최대 2기가바이트 크기의 가변길이 문자형, 잘 사용하지 않음
- ---------------------------------------------------------------------------------------------------
- CHAR 형보다는 VARCHAR2 형을 사용하는 것이 좋다
- 문자형 데이터타입의 길이는 영문자 1 BYTE, 한글 3 BYTE
- 영문자, 한글 외의 다국어문자가 입력될 경우에는 NVARCHAR2 사용
실습
컬럼1에는 abc 컬럼2에는 def넣으라는 구문
INSERT INTO ex2_1 (column1, column2) VALUES ('abc','def');


SELECT column1, LENGTH(column1) as len1,
column2, LENGTH (column2) as len2
FROM ex2_1;

CREATE TABLE ex2_2(
COLUMN1 VARCHAR2(3),
COLUMN2 VARCHAR2(3 byte),
COLUMN3 VARCHAR2(3 char)
);
INSERT INTO ex2_2 VALUES('abc','abc','abc');
SELECT column1, LENGTH(column1) as len1,
column2, LENGTH(column2) as len2,
column3, LENGTH(column3) as len3
FROM ex2_2;

'홍길동','홍길동','홍길동'을 넣었을때 한글은 한글자당 3byte이기 때문에 안된다

따라서
INSERT INTO ex2_2 (column3) VALUES('홍길동');
SELECT column3, LENGTH(column3) AS len3, LENGTHB(column3) AS byte_len
From ex2_2;
이 구문으로 실행하면 가능

- [데이터 타입]
숫자 데이터 타입 - 데이터 타입 설명
- NUMBER [(p, [,s])] : 가변숫자, p(1~38, 디폴트 값은 38)와 s(-84~127, 디폴트 값은 0)는 10진수 기준, 최대 22byte
- FLOAT[(p)] : NUMBER의 하위타입, p는 1~128, 디폴트 값은 128, 2진수 기준, 최대 22byte
- BINARY_FLOAT : 32비트 부동소수점 수, 최대 4byte
- BINARY_DOUBLE : 64비트 부동소수점 수, 최대 8byte
- -----------------------------------------------------------------------
- P는 소수점 기준 유효숫자 자릿수, S는 소수점 기준 자릿수
- S가 양수이면 소수점 이하, 음수이면 소수점 이상 유효숫자 자릿수 의미
- 대부분의 숫자는 NUMBER 형을 사용할 것, 디폴트 자릿수는 38 (크기는 28 byte)
실습
ex_user 생성 및 추가
문제

[FLOAT 데이터 타입]
--2_4
CREATE TABLE ex2_4 (
COL_FLOT1 FLOAT(32),
COL_FLOT2 FLOAT
);
INSERT INTO ex2_4 (col_flot1, col_flot2) VALUES (1234567891234, 1234567891234);
SELECT * FROM ex2_4;
정확도가 떨어지고 오류가 날 수도 있기 때문에 DB에서는 NUMBER를 쓰고 FLOAT데이터는 잘 쓰지 않는다.

[날짜 데이터 타입]
-- 날짜 데이터 타입
CREATE TABLE ex2_5 (
COL_DATE DATE,
COL_TIMESTAMP TIMESTAMP
);
INSERT INTO ex2_5 VALUES (SYSDATE, SYSTIMESTAMP);

조회
SELECT * FROM ex2_5;

문제

--2.
-- DROP TABLE EMP; --이미 테이블이 만들어진게 없는지 확인
CREATE TABLE EMP (
ENO NUMBER(4),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MANAGER NUMBER(4),
HIREDATE DATE,
SALARY NUMBER(7, 2),
COMMISSION NUMBER(7, 2),
DNO NUMBER(2) );

[NULL]
NULL은 데이터가 없음을 의미, 컬럼 속성에 명시, 디폴트는 NULL 허용
제약조건
- 컬럼에 대한 속성 형태로 정의하지만 오라클 객체 중 하나로 데이터 무결성 보장
- NOT NULL : NOT NULL로 명시된 컬럼은 반드시 값을 입력
- UNIQUE : 한 테이블 내에서 반드시 유일한 값이 입력되어야 한다
- 기본키(Primary Key) : NOT NULL + UNIQUE, 보통 키라 하면 기본키를 의미
- 테이블당 1개의 기본키만 가질 수 있으며, 여러 개의 컬럼으로 기본키 구성이 가능
<구문>
컬럼명 데이터타입 PRIMARY KEY 혹은
CONSTRAINTS 제약조건명 PRIMARY KEY (컬럼명, …)
NOT NULL 실습
-- NOT NULL
CREATE TABLE ex2_6 (
COL_NULL VARCHAR2(10), --아무 표기가 없기 때문에 NULL이 가능
COL_NOT_NULL VARCHAR2(10) NOT NULL
);



위의 코드에 INSERT문 추가
INSERT INTO ex2_6 VALUES ('AA', ''); -- 오류
INSERT INTO ex2_6 VALUES ('AA', 'BB'); --가능
INSERT INTO ex2_6 VALUES ('', 'BB'); -- 가능



SELECT * FROM ex2_6;

SELECT constraint_name, constraint_type, table_name, search_condition
FROM user_constraints
WHERE table_name = 'EX2_6';

UNIQUE 실습
-- UNIQUE
CREATE TABLE ex2_7 (
COL_UNIQUE_NULL VARCHAR2(10) UNIQUE,
COL_UNIQUE_NNULL VARCHAR2(10) UNIQUE NOT NULL,
COL_UNIQUE VARCHAR2(10),
CONSTRAINT unique_nm1 UNIQUE(COL_UNIQUE)
);



SELECT constraint_name, constraint_type, table_name, search_condition
FROM user_constraints
WHERE table_name = 'EX2_7';

INSERT INTO ex2_7 VALUES('AA','AA','AA');
INSERT INTO ex2_7 VALUES('AA','AA','AA'); -- 한번 더 실행하면 UNIQUE이기 때문에 안된다.
INSERT INTO ex2_7 VALUES('','BB','BB');
INSERT INTO ex2_7 VALUES('CC','','CC'); -- 두번째 컬럼에 NOT NULL인데 NULL값을 넣으려고 하면 오류
INSERT INTO ex2_7 VALUES('CC','CC','CC'); -- 데이터를 넣어주면 실행이 된다


'대우개발원 수업 내용 > Database (sql)' 카테고리의 다른 글
| Database 6일차 (0) | 2026.01.28 |
|---|---|
| Database 5일차 (26) | 2026.01.27 |
| Database 4일차 (0) | 2026.01.26 |
| Database 3일차 (0) | 2026.01.23 |
| Database 1일차 (0) | 2026.01.22 |



