Fullstack-Study-241204-250625

커리큘럼(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 [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만 가능)
  • FROM 절에 서브쿼리가 온것

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)

  • GRANT ~ TO 구문 사용
  • REVOKE ~ FROM 구문 사용
시스템 권한 승인 작업
CREATE SESSION 데이터베이스로 접속
CREATE TABLE 사용자의 스키마에서 테이블 생성
CREATE SEQUENCE 사용자의 스키마에서 시퀀스 생성
CREATE VIEW 사용자의 스키마에서 뷰 생성
CREATE PROCEDURE 사용자의 스키마에서 내장된 프로시저, 함수, 패키지 생성