본문 바로가기

Database

DB 구현 & SQL활용

✓ 데이터 :  정량적, 정성적 실제 값
✓ 정보 : 데이터를 기반으로 의미를 부여한 것
✓ 데이터베이스 : 여러 시스템에서 공유할 수 있도록 논리적으로 연관된 데이터를 모으고, 중복 데이터를 최소화하여 구조적으로 통합/저장해놓은 것

 

✓ DBMS
 데이터베이스에서 데이터 추출, 조작, 정의, 제어 등을 위한 데이터베이스 전용 관리 시스템

✓  SQL
 관계형 데이터베이스에서 원하는 데이터를 조회,조작하기 위해 조건을 사용하는 언어

✓  DQL(SELECT)
 데이터 질의어로 SELECT구문을 통해 조회된 결과를 ResultSet이라고 한다. 
 SELECT 조회할컬럼명 FROM 테이블명;
 
✓  DML(INSERT, UPDATE, DELETE)
 테이블에 데이터를 삽입, 수정, 삭제하기 위해서 사용하는 데이터 조작어 

✓  DDL(CREATE, ALTER, DROP)
 테이블, 뷰와 같은 객체를 생성, 수정, 삭제하는 등 전체 구조를 정의하는 정의어

✓  DCL(GRANT, REVOKE)
- 데이터를 다루기 위한 권한을 다루는 언어(데이터 권한 제어 언어)
- 계정에 DB, DB객체에 대한 접근을 부여(GRANT)하고, 회수(REVOKE)하는 언어

✓  TCL(COMMIT, ROLLBACK, SAVEPOINT)
- 트랜잭션을 제어하는 언어
- COMMIT(트랜잭션 종료 후 저장), ROLLBACK(트랜잭션 취소), SAVEPOINT(임시저장)

 

✓  트랜잭션
- 데이터베이스의 논리적 연산 단위(데이터를 담는 임시 저장소)

- 데이터 변경사항을 하나의 트랜잭션으로 처리 

 

✓  데이터 딕셔너리
자원을 효율적으로 관리하기 위한 다양한 정보를 저장하는 시스템 테이블
 



✓  관리자 계정 

- 데이터베이스의 생성과 관리를 담당하고,  모든 권한과 책임을 갖는 계정
   ex) sys(최고관리자), system(sys에서 권한 몇개 제외된 관리자)

✓  사용자 계정

 - 데이터베이스에 대하여 질의, 갱신, 보고서 작성 등의 작업을 수행할 수 있는 계정으로

 업무에 필요한 최소한의 권한만을 가지는 것을 원칙으로 한다.

  ex) kh_ksh계정(개인의 계정), updown, workbook 등

 


*** 시스템 권한, 객체 권한, ROLE(CONNECT, RESORUCE)
✓   시스템 권한 : DB접속, 객체 생성 권한

  CRETAE SESSION   : 데이터베이스 접속 권한
  CREATE TABLE     : 테이블 생성 권한
  CREATE VIEW      : 뷰 생성 권한
  CREATE SEQUENCE  : 시퀀스 생성 권한
  CREATE PROCEDURE : 함수(프로시져) 생성 권한
  CREATE USER      : 사용자(계정) 생성 권한
  DROP USER        : 사용자(계정) 삭제 권한
  DROP ANY TABLE   : 임의 테이블 삭제 권한

 

✓   객체 권한 : 특정 객체를 조작할 수 있는 권한

  SELECT              TABLE, VIEW, SEQUENCE
  INSERT              TABLE, VIEW
  UPDATE              TABLE, VIEW
  DELETE              TABLE, VIEW
  ALTER               TABLE, SEQUENCE
  REFERENCES          TABLE
  INDEX               TABLE
  EXECUTE             PROCEDURE

 

✓   ROLE(역할) :  권한의 묶음

- 묶어둔 권한을 특정 계정에 부여 시 부여받은 해당 계정은 부여받은 권한을 이용해 특정 ROLE을 갖게 된다.

- CONNECT : DB 접속과 관련된 권한 ROLE
- RESOURCE : DB 사용을 위한 기본 객체 생성 권한 ROLE



- SELECT, INSERT, UPDATE, DELETE 작성법(DML)
> SELECT문
5: SELECT절 컬럼명1, 컬럼명2, ...
1: FROM절 + JOIN 테이블명
2: WHERE절 조건식
3: GROUP BY절 그룹함수가 필요한 컬럼(그룹별)
4: HAVING절 GROUP BY절에 대한 조건
6: ORDER BY절  - SELECT의 조회 결과 ResultSet 정렬 (오름차순ASC 생략가능, 내림차순DESC)

> INSERT문
1) 모든 컬럼 삽입
INSERT INTO 테이블명 VALUES(컬럼값, 컬럼값, ...);

2) 특정 컬럼 삽입(지정되지 않은 컬럼은 NULL 또는 DEFAULT 값 삽입)
INSERT INTO 테이블명(컬럼명, 컬럼명, ...) VALUES (컬럼값, 컬럼값, ...);

3) 서브쿼리를 이용한 삽입
INSERT INTO 테이블명 (서브쿼리);

> UPDATE문
UPDATE 테이블명 SET 컬럼명 = 수정할 컬럼값 또는 (서브쿼리), ...
WHERE 조건문;

> DELETE문
DELETE FROM 테이블명 WHERE 조건문;



- CREATE TABLE 작성법
> 데이터 타입 

NUMBER, CHAR(1~2000), VARCHAR2(1~4000), DATE

> 기본값  

기본값이 없을 때는 DEFAULT로 설정된 값이 삽입되고, DEFAULT 없으면 NULL값이 삽입된다.

> 제약조건 작성법
-> 컬럼 레벨만 작성 가능 : NOT NULL
-> 컬럼, 테이블 레벨 모두 작성 가능 : PK, FK, UNIQUE, CHECK
(FK 제약조건은 레벨에 따라 작성법에 차이가 있음)


- 제약조건
 CREATE에 사용되어 사용자가 원하는 조건의 데이터만 유지하기 위해서 특정 컬럼에 설정하는 제약 조건
> NOT NULL
-  NULL값은 허용하지 않으며 반드시 값이 기록되어야하는 경우의 제약조건
-  컬럼레벨에서만 사용가능

> UNIQUE
- 유일한 값만 허용하는 것으로 중복 데이터는 제한하는 제약조건(단, NULL값은 허용)
- 컬럼레벨, 테이블레벨에서 제한

> PRIMARY KEY
- 반드시 필요한 컬럼을 나타내는 기본키식별자 역할

- UNIQUE + NOT NULL

- 한테이블당 한 개만 설정가능(단, 복합키 설정 가능)

> FOREIGN KEY  
- 참조된 다른 테이블의 컬럼이 제공하는 값과 NULL만 사용 가능

- 참조될 수 있는 컬럼은 PRIMARY KEY or UNIQUE로 지정된 컬럼

 

-- 컬럼레벨일 경우
-- 컬럼명 자료형(크기) [CONSTRAINT 제약조건명] REFERENCES 참조테이블명 [(참조할컬럼)] [삭제룰]

-- 테이블레벨일 경우
-- [CONSTRAINT 이름] FOREIGN KEY (적용할컬럼명) REFERENCES 참조할테이블명 [(참조할컬럼)] [삭제룰]

 

> FOREIGN KEY 삭제 옵션

 1) 기본 지정 : ON DELETE RESTRICTED(삭제 제한)

- FOREIGN KEY로 지정된 컬럼에서 사용되고 있는 값일 경우 제공하는 컬럼의 값은 삭제하지 못함

 

 2) ON DELETE SET NULL 
-  부모키 삭제시 자식키를 NULL로 변경하는 옵션

 

 3) ON DELETE CASCADE : 부모키 삭제시 자식키도 함께 삭제(종속)
- 부모키 삭제시 값을 사용하는 자식 테이블의 컬럼에 해당하는 행이 삭제됨
 
> CHECK
- 컬럼값에 지정된 조건 설정이 가능한 제약조건
- CHECK (컬럼명 비교연산자 비교값)


>  테이블에서 수정가능한 요소- ALTER 사용  
1) 제약조건(추가/삭제)
2) 컬럼(추가/수정/삭제)
3) 이름 변경(테이블명, 제약조건명, 컬럼명)  


- VIEW, SEQUENCE 생성을 위한 기본 작성법 (옵션 X)

✓  VIEW 

- SELECT의 집합결과인 ResultSet을 저장하는 논리적 가상 테이블

- 가상 테이블이기 때문에 ALTER 사용불가

- CREATE [OR REPLACE] VIEW 뷰이름 AS (SUBQUERY);

 

✓ SEQUENCE

- 순차적 번호 자동 발생 기능을 하는 객체

- 주로 PK 컬럼에 삽입되는 값을 만드는 용도
- CREATE SEQUENCE 시퀀스명;



-  JOIN
   관계형 데이터베이스에서 SQL을 이용해 테이블 간 '관계'를 맺는 방법

✓ INNER JOIN : 연결되는 컬럼의 값이 일치하는 행들만 조인

✓ OUTER(LEFT, RIGHT) JOIN : 두 테이블의 지정하는 컬럼값이 일치하지 않는 행도 조인에 포함


- 서브쿼리(단일행, 다중행, 다중열)
하나의 SQL문 안에 포함된 또다른 SQL문(SELECT문)

- 단일행 : 비교 연산자 사용
- 다중행 : 일반 비교연산자가 아닌 IN, ALL 등

- 다중열 

 

- 스칼라 서브쿼리 : SELECT절에 사용되는 서브쿼리

- 인라인뷰 : FROM 절에 사용되는 서브쿼리

 


-- [문제해결 시나리오]

1) NUMBER 타입 컬럼의 문제점 
CREATE TABLE MEMBER2 (
     MEMBER_ID VARCHAR2(20),
     MEMBER_PWD VARCHAR2(20),
     MEMBER_NAME VARCHAR2(30),
     MEMBER_TEL NUMBER
);

-- MEMBER2 테이블 내 데이터 삽입
INSERT INTO MEMBER2 VALUES('MEM01', 'PASS01', '고길동', 7712345612);
INSERT INTO MEMBER2 VALUES('MEM02', 'PASS02', '고길순', 01012345678);
--> NUMBER타입 컬럼에 데이터를 삽입할 때 맨 앞에 0이 있으면 이를 자동 제거하여 나타남
 ---> 전화번호, 주민등록번호처럼 숫자로만 되어있는 데이터이더라도
 ----  0으로 시작할 가능성이 있다면 CHAR, VARCHAR2와 같은 문자형을 사용  

 

 

2) 서브쿼리를 이용한 데이터값 삽입 ---->  INSERT INTO 테이블명 (서브쿼리)

INSERT INTO EMP_01 ( SELECT EMP_ID, EMP_NAME, DEPT_TITLE

                                        FROM EMPLOYEE2

                                        LEFT JOIN DEPARTMENT2 ON (DEPT_CODE = DEPT_ID));

 

단, 서브쿼리(SELECT)결과를 테이블에 INSERT하려고하면

SELECT 조회결과의 데이터 타입, 컬럼 개수가 INSERT하려는 테이블의 컬럼과 일치해야한다.

(데이터타입 자동형변환 적용)

 

'Database' 카테고리의 다른 글

DB 모델링  (0) 2022.11.16
[SQL] SEQUENCE  (0) 2022.09.17
[SQL] VIEW  (1) 2022.09.17
[SQL] DML - SELECT구문  (0) 2022.09.04
[SQL] SQL(Structured Query Language)  (0) 2022.09.03