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