커리큘럼(12-30/변경)
01. Java
02. git
03. Database (v)
04. Jsp [Server]
05. 미니프로젝트 (3W)
06. HTML,CSS
07. JS
08. SpringFramework , SrpingBoot
09. React JS [Front-end]
10. 중간프로젝트 (1M)
11. Linux 명령어
12. AWS 클라우드
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)
SQL
뷰(View)
하나 이상의 테이블에서 원하는 모든 데이터를 선택하여, 그들을 사용자 정의하여 나타낸 것
- 테이블 또는 다른 뷰를 기초로 하는 논리적 테이블
- 접근제어를 통한 자동 보안이 제공되므로 데이터벵스 엑세스를 제한하기 위해 사용
- 복잡한 질의를 쉽게 만들어주기 때문에 사용자의 데이터 관리를 간단하게 해줌
- 논리적 데이터 독립성을 제공하기 때문에 데이터의 독립성 허용
- 동일한 데이터의 다른 뷰를 나타낼 수 있기 때문에 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원
- CREATE VIEW 문장 내에서 서브쿼리 작성
- 서브쿼리는 복합 SELECT 구문을 포함할 수 있음
CREATE [OR REPLACE]
[FORCE|NOFORCE]
VIEW view_name [(alias[,alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint_name]]
[WITH READ ONLY]
- 단순 뷰 : 한 개의 원본테이블을 사용해 생성
CREATE OR REPLACE VIEW VIEW_EMP
AS (
SELECT EMPLOYEE_ID AS EMP_ID,
FIRST_NAME|| ' '|| LAST_NAME AS NAME,
JOB_ID,
SALARY
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 60
);
- 복합 뷰 : 두 개 이상의 테이블에 의해 생성(조인)
CREATE OR REPLACE VIEW VIEW_EMP_JOB
AS (
SELECT E.EMPLOYEE_ID,
FIRST_NAME || ' ' || LAST_NAME AS NAME,
D.DEPARTMENT_NAME,
L.STREET_ADDRESS,
J.JOB_TITLE
FROM EMPLOYEES E
LEFT JOIN DEPARTMENTS D
ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
LEFT JOIN LOCATIONS L
ON D.LOCATION_ID = L.LOCATION_ID
LEFT JOIN JOBS J
ON E.JOB_ID = J.JOB_ID
);
CREATE OR REPLACE VIEW view_name ...
- CREATE OR REPLACE VIEW 절을 사용해 뷰 수정
- CREATE VIEW 절에서 열 별칭들은 서브쿼리에서의 열과 동일한 순서로 나열
DROP VIEW view_name
- 뷰는 데이터베이스에서 기본 테이블을 기반으로 하기 때문에 데이터 손실 없이 뷰 삭제
- 단순 뷰에서 DML연산을 수행할 수 있음
- 뷰가 다음을 포함한다면 행을 제거할 수 없음
- 그룹 함수
- GROUP BY 절
- DISTINCT 키워드
- 뷰가 다음을 포함한다면 데이터를 수정할 수 없음
- 위의 행 제거 할 수 없는 조건
- 표현식으로 정의된 열
- ROWNUM 의사열
- 뷰가 다음을 포함한다면 데이터를 추가할 수 없음
- 위의 행 제거와 수정 할 수 없는 조건
- 뷰에 의해 선택되지 않은 NOT NULL 열이 기본 테이블에 있을 때
- WITH CHECK OPTION : 조건 컬럼 값을 변경하지 못하게 하는 옵션
- WITH READ ONLY : SELECT만 허용되는 옵션
CREATE OR REPLACE VIEW VIEW_EMP
AS (
SELECT EMPLOYEE_ID,
FIRST_NAME,
EMAIL,
JOB_ID,
DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN(60,70,80)
)WITH CHECK OPTION; --
SELECT * FROM VIEW_EMP;
UPDATE VIEW_EMP SET DEPARTMENT_ID=100 WHERE EMPLOYEE_ID = 105; -- DEPARTMENT_ID 60,70,80 이어야 함
-- 읽기 전용 뷰
CREATE OR REPLACE VIEW VIEW_EMP
AS (
SELECT EMPLOYEE_ID,
FIRST_NAME,
EMAIL,
JOB_ID,
DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN(60,70,80)
)WITH READ ONLY; -- DML 구문 금지 (SELECT만 가능)
Sequence
CREATE SEQUENCE sequence_name
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE N | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}] -- 주로 NOCACHE사용
- 순차적으로 증가하는 값
- 자동적으로 유일 번호 생성
- 공유 가능한 객체
- 주로 기본 키 값을 생성하기 위해 사용
- 어플리케이션 코드 대체
- 메모리에 캐쉬되면 시퀀스 값을 액세스 하는 효율성 향상시킴
CREATE SEQUENCE DEPTS_SEQ; -- 기본값으로 지정이 되면서 시퀀스 생성
DROP SEQUENCE DEPTS_SEQ; -- 삭제
ALTER SEQUENCE DEPTS_SEQ MAXVALUE 1000;
ALTER SEQUENCE DEPTS_SEQ INCREMENT BY 10;
- INCREMENT BY : 증가값 설정
- START WITH : 시작값 설정
- MAXVALUE / MINVALUE : 최대, 최소값 설정
- CACHE : 시퀀스를 빨리 제공하기 위해 미리 메모리에 CACHE 갯수 만큼의 시퀀스를 만들어 준비
- CYCLE : 최대값에 도달 했을때 다시 최소값부터 다시 시작
- NEXTVAL : 다음 사용 가능한 시퀀스 값 리턴
- CURRVAL : 현재 시퀀스 값 리턴(NEXTVAL가 먼저 최소 한번은 실행이 되야함)
.
Index
- 테이블이나 클러스터에서 쓰이는 선택적인 객체
- 오라클 데이터베이스 테이블내의 원하는 레코드를 빠르게 찾아갈 수 있도록 만들어진 데이터 구조
- PK,UK를 만들 때 자동으로 생성되는 인덱스
- 일반컬럼에 지정해서 조회를 빠르게 할 수 있는 인덱스
CREATE [UNIQUE | BITMAP] INDEX index_name
ON table_name (column1[,column2] ...);
- 열이 WHERE절 또는 조인조건에서 자주 사용될 경우
- 열이 광범위한 값을 포함할 경우
- 열이 많은 수의 NULL값을 포함할 경우
- 테이블이 작을 경우
- 열이 질의의 조건으로 자주 사용되지 않을 경우
- 테이블이 자주 갱신될 경우
CREATE INDEX EMPS_IDX ON EMPS(FIRST_NAME);
- 삭제하더라도 테이블에 영향을 미치지 않음
DROP INDEX EMPS_IDX;
CREATE INDEX EMPS_IDX ON EMPS(FIRST_NAME,LAST_NAME);
SELECT * FROM EMPS WHERE FIRST_NAME ='Nancy'; -- 인덱스 힌트를 받음
SELECT * FROM EMPS WHERE FIRST_NAME = 'Nancy' AND LAST_NAME = 'Greenberg'; -- 인덱스 힌트를 받음
SELECT * FROM EMPS WHERE LAST_NAME = 'Greenberg'; -- 인덱스 힌트를 못받음
- PRIMARY KEY와 UNIQUE 제약 조건 시 자동 생성
- PK와 UK기반으로 조회시 인덱스 효과를 받음
- 중복된 값이 입력될 수 없음
CREATE UNIQUE INDEX 인덱스명 ON 테이블명(부착할 컬럼);
권한(Privilege)
시스템 권한 |
승인 작업 |
CREATE SESSION |
데이터베이스로 접속 |
CREATE TABLE |
사용자의 스키마에서 테이블 생성 |
CREATE SEQUENCE |
사용자의 스키마에서 시퀀스 생성 |
CREATE VIEW |
사용자의 스키마에서 뷰 생성 |
CREATE PROCEDURE |
사용자의 스키마에서 내장된 프로시저, 함수, 패키지 생성 |