[OracleSQL] Basic SQL

Basic SQL


1. SQL의 종류

  1. DDL(Date Definition Language) : 데이터베이스 객체(테이블, 뷰, 인덱스..)의 구조를 정의 한다.
SQL문 내용
Create 데이터베이스 객체를 생성한다.
DROP 데이터베이스 객체를 삭제한다.
ALTER 기존에 존재하는 데이터베이스 객체를 다시 정의하는 역할을 한다.
  1. DML(Data Manipulation Language) : 데이터의 삽입, 삭제, 갱신 등의 처리한다.
SQL문 내용
INSERT 데이버베이스 객체에 데이터를 입력한다.
DELETE 데이터베이스 객체의 데이터를 삭제한다.
UPDATE 데이터베이스 객체안의 데이터 수정한다.
  1. DCL(Data Control Language) : 데이터베이스 사용자의 권한을 제어한다.
SQL문 내용
GRANT 데이터베이스 객체에 권한을 부여한다.
REVOKE 이미 부여된 데이터베이스 객체 권한을 취소한다.

2. USER의 생성과 권한의 설정

2.1. USER의 생성

USER의 생성

※ 참고 1

참고 2, 테이블스페이스란?

USER 생성 예제

-- SQL PLUS를 싱행시키고 SCOTT/TIGER로 접속한다.
CREATE USER TEST IDENTIFIED BY TEST;
1행에 오류: ORA-01031: 권한이 불충분합니다


-- SCOTT USER는 사용자 생성 권한이 없어서 사용자를 생성할 수 없다.
-- DBA Role이 있는 유저로 접속
-- sqlplus / as sysdba 로 접속하셔도 됩니다.

SQL>CONN sys/manager AS SYSDBA

CREATE USER TEST IDENTIFIED BY TEST;

-- 새로 생성한 USER로 접속
SQL> CONN TEST/TEST

ERROR:
ORA-01045: 사용자 TEST는 CREATE SESSION 권한을 가지고있지 않음;

-- 새로 생성한 TEST USER는 권한이 없어서 접근할 수가 없다.
-- 모든 USER는 권한이 있고 권한에 해당하는 역할만 할 수 있다.
-- TEST라는 USER를 사용하기 위해서도 권한을 부여해 주어야 한다.

SQL>CONN sys/manager AS SYSDBA
연결되었습니다.

GRANT connect, resource TO TEST ;
권한이 부여되었습니다.

SQL> CONN TEST/TEST
연결되었습니다.

2.2. USER의 변경 및 삭제

ALTER USER문으로 변경 가능한 옵션

USER 수정 문법

USER 수정 문법

USER 수정 예제

-- SYS 권한으로 접속한다.
C:\> SQLPLUS /NOLOG
CONN / AS SYSDBA

-- scott USER의 비밀번호를 수정한다.
ALTER USER scott IDENTIFIED by lion;
사용자가 변경되었습니다.

-- scott USER의 비밀번호가 변경된 것을 확인할 수 있다.
CONN scott/lion
접속되었습니다.

CONN / AS SYSDBA
접속되었습니다.

-- scott USER의 비밀번호를 처음처럼 수정한다.
alter USER scott IDENTIFIED by tiger;
사용자가 변경되었습니다.


USER 삭제 예제

USER 삭제 예제

CASECADE를 사용하게 되면 사용자 이름과 관련된 모든 데이터베이스 스키마가 데이터 사전으로부터 삭제되며 모든 스키마 객체들 또한 물리적으로 삭제 된다.

USER 정보의 확인

-- 데이터베이스에 등록된 사용자를 조회하기 위해서는 DBA_USERS라는
    데이터사전을 조회하면 된다.
-- SQL*Plus를 실행시켜  SYS계정으로 접속을 한다.
SQL> CONN / AS SYSDBA

SQL> SELECT username, default_tablespace, temporary_tablespace
     FROM DBA_USERS;

USERNAME         DEFAULT_TABLESPACE      TEMPORARY_TABLES
---------------- -------------------     ----------------
SYS               SYSTEM                  TEMP
SYSTEM            TOOLS                   TEMP
OUTLN             SYSTEM                  SYSTEM
DBSNMP            SYSTEM                  SYSTEM
ORDSYS            SYSTEM                  SYSTEM
ORDPLUGINS        SYSTEM                  SYSTEM
MDSYS             SYSTEM                  SYSTEM
CTXSYS            DRSYS                   DRSYS
SCOTT             SYSTEM                  SYSTEM
TEST              TEST                    SYSTEM
STORM             STORM                   SYSTEM
KJS               SYSTEM                  SYSTEM

 위와 같이 유저와 테이블 스페이스에 대한 정보가 화면에 나온다.    

2.3. 권한과 롤

2.3.1. 시스템 권한(System Privileges)

오라클에서 권한(Privilege)은 특정 타입의 SQL문을 실행하거나 데이터베이스나 객체에 접근할 수 있는 권리이다.

시스템권한(System Privileges)이란?

대표적인 시스템권한

시스템권한 부여 문법

시스템권한 부여 문법

시스템권한 부여 예제

-- SYS 권한으로 접속한다.   
SQL>CONN sys/manager AS SYSDBA

-- scott 사용자에게 사용자를 생성, 수정, 삭제 할 수 있는 권한을 부여하고,
-- scott 사용자도 다른 사용자에게 그 권한을 부여 할 수 있도록 권한 부여.
SQL>GRANT CREATE USER, ALTER USER, DROP USER TO scott WITH ADMIN OPTION;
 권한이 부여되었습니다.


시스템권한의 회수

시스템권한의 회수

시스템권한 회수 예제

-- scott 사용자에게 부여한 생성, 수정, 삭제 권한을 회수 한다.
REVOKE CREATE USER, ALTER USER, DROP USER
FROM scott;
권한이 회수되었습니다.

WITH ADMIN OPTION을 사용하여 시스템권한 취소

WITH ADMIN OPTION을 사용하여 시스템권한을 부여했어도 시스템권한을 취소할 때는 연쇄적으로 취소 되지 않는다.

시나리오

  1. DBA가 STORM에게WITH ADMIN OPTION을 사용하여 CREATE TABLE 시스템권한을 부여 한다.
  2. STORM이 테이블을 생성 한다.
  3. STORM이 CREATE TABLE 시스템권한을 SCOTT에게 부여 한다.
  4. SCOTT가 테이블을 생성 한다.
  5. DBA가 STORM에게 부여한 CREATE TABLE 시스템권한을 취소 한다.

시나리오

결과

결과

2.3.2. 객체 권한(Object Privileges)

객체권한은 USER가 소유하고 있는 특정 객체를 다른 사용자들이 엑세스 하거나 조작 할 수 있게 하기 위해 생성한다.

객체권한(Object Privileges) 이란

객체에 따른 권한 목록 예

객체권한 테이블 시퀀스 프로시저
ALTER    
DELETE    
EXECUTE      
INDEX      
INSERT    
SELECT  

객체권한 부여 문법

위의 표에서 맨 왼쪽에 있는 ALTER, DELETE, EXECUTE.. 등은 object-privileges란에 오면 되고, 맨 윗줄에 있는 테이블, 뷰, 시퀸스, 프로시저 등은 ON 다음에 있는 Object에 입력하면 된다.

객체권한 부여 문법

객체권한 부여 예제

-- scott USER에게 emp테이블을 SELECT, INSERT할 수 있는 권한을 부여했다.
-- scott USER도 다른 USER에게 그 권한을 부여 할 수 있다.
GRANT SELECT, INSERT
ON emp
TO scott
WITH GRANT OPTION;
 권한이 부여되었습니다.

객체권한의 회수

객체권한의 회수

객체권한 회수 예제

-- scott USER에게 부여한 emp 테이블에 대한 SELECT, INSERT 권한 회수 예제
-- 만약 scott USER가 다른 사용자에게 SELECT, INSERT권한을 부여했으면 그 권한들도 같이 회수가 된다.
REVOKE SELECT, INSERT
ON emp
FROM scott;
 권한이 회수되었습니다.

WITH GRANT OPTION을 사용하여 객체권한 회수

WITH GRANT OPTION을 사용하여 부여한 객체 권한을 취소하면 취소 작업이 연쇄적으로 수행 된다.

시나리오 1. SCOTT가 STORM에게 WITH GRANT OPTION을 사용하여 emp 테이블의 SELECT 권한을 부여 한다. 2. STORM이 emp 테이블의 SELECT 권한을 TEST에게 부여 한다. 3. SCOTT가 STORM에게 부여한 emp 테이블의 SELECT 권한을 취소 한다.

시나리오

결과 - SCOTT가 STORM에게 부여한 emp 테이블에 대한 SELECT 권한을 취소하면, TEST USER가 emp 테이블을 SELECT할 수 있는 권한도 자동으로 취소가 된다.

결과

객체권한관련 데이터 사전

데이터 사전 설 명
USER_TAB_PRIVS 객체권한의 소유자, 객체권한 부여자, 객체권한 피부여자를 볼수 있음
USER_TAB_PRIVS_MADE 사용자가 부여한 모든 객체권한
USER_TAB_PRIVS_RECD 사용자가 부여받은 모든 객체권한
USER_COL_PRIVS 객체권한의 소유자, 객체권한 부여자, 객체권한 피부여자의 컬럼의 객체권한
USER_COL_PRIVS_MADE 사용자가 부여한 객체 컬럼에 대한 모든 객체권한
USER_COL_PRIVS_RECD 사용자가 부여받은 객체 컬럼에 대한 모든 객체권한


2.3.3. 롤(Role)

롤(ROLE) 이란 사용자에게 허가 할 수 있는 권한들의 집합 이라고 할 수 있다.

롤(ROLE) 이란

아래의 그림처럼 DBA가 유저들에게 권한을 부여할 때 일일이 권한 하나하나씩을 지정을 한다면 몹시 불편할 것이다. DBA가 USER의 역할에 맞도록 ROLE을 생성하여서 ROLE만 유저에게 지정을 한다면 보다 효율적으로 유저들의 권한을 관리 할 수 있다.

ROLE을 사용하지 않고 권한부여 ROLE을 사용하여 권한부여
ROLE을 사용하지 않고 권한부여 ROLE을 사용하여 권한부여

ROLE 생성 문법

ROLE 생성 문법

ROLE 부여 예제

ROLE의 부여 순서 1. ROLE의 생성 : CREATE ROLE manager 2. ROLE의 권한 부여 : GRANT create session, create table TO manager 3. ROLE을 사용자 또는 ROLE에게 부여 : GRANT manager TO scott, test

-- ROLE을 생성 합니다.
CREATE ROLE manager;
-- ROLE에 권한을 부여 합니다.
GRANT create session, create table TO manager;

-- 권한이 부여된ROLE을 USER나 ROLE에 부여 합니다.
GRANT manager TO scott, test;

ROLE 관련 데이터 사전

데이터 사전 설 명
ROLE_SYS_PRIVS ROLE에 부여된 시스템 권한
ROLE_TAB_PRIVS ROLE에 부여된 테이블 권한
USER_ROLE_PRIVS 현재 사용자가 ACCESS할 수 있는 ROLE
USER_TAB_PRIVS_MADE 현재 사용자의 객체에 부여한 객체 권한
USER_TAB_PRIVS_RECD 현재 사용자의 객체에 부여된 객체 권한
USER_COL_PRIVS_MADE 현재 사용자 객체의 특정 컬럼에 부여한 객체 권한
USER_COL_PRIVS_RECD 현재 사용자 객체의 특정 컬럼에 부여된 객체 권한


2.3.4. 오라클 데이터베이스를 설치하면 기본적으로 생성되는 Role

오라클 데이터베이스를 생성하면 기본적으로 몇 가지의 ROLE이 생성 된다. DBA_ROLES 데이터 사전을 통하여 미리 정의된 ROLE을 조회 할 수 있다.

SELECT * FROM DBA_ROLES;

ROLE                      PASSWORD
----------------------    -----------
CONNECT                   NO
RESOURCE                  NO
DBA                       NO
SELECT_CATALOG_ROLE       NO
EXECUTE_CATALOG_ROLE      NO
DELETE_CATALOG_ROLE       NO
EXP_FULL_DATABASE         NO
IMP_FULL_DATABASE         NO
....

이 외에도 많이 ROLE이 존재하는데, 가장 많이 사용하는 세 가지만 설명 하겠다.

CONNECT ROLE

SQL>SELECT grantee, privilege
    FROM DBA_SYS_PRIVS
    WHERE grantee = 'CONNECT';

GRANTEE     PRIVILEGE
----------- ---------------------
CONNECT     ALTER SESSION
CONNECT     CREATE CLUSTER
CONNECT     CREATE DATABASE LINK
CONNECT     CREATE SEQUENCE
CONNECT     CREATE SESSION
...

RESORCE ROLE

DBA ROLE

3. 테이블의 생성과 수정 그리고 삭제

3.1. 테이블의 생성

3.2. 테이블의 제약조건

3.3. 오라클 데이터 타입

3.4. LOB, LONG, LONG RAW 데이터 타입 간의 비교

3.5. 테이블의 관리

4. 데이터 조작어(DML)

4.1. 데이터의 삽입, 수정, 삭제

4.1.1. MERGE 문의 이해 및 활용

4.2. SELECT문 및 연산자

4.3. 예명(Alias)

4.4. 조인(Join)

4.4.1. Equi Join, Non_Equi Join, Self Join
4.4.2. Outer Join (LEFT, RIGHT, FULL OUTER JOIN)
4.4.3. CROSS JOIN, INNER JOIN, NATURAL JOIN, USING, ON

4.5. 트랜잭션(commit과 rollback)

4.6. Commit과 Rollback 예제

5. 내장 함수(Sing-Row Functions)

5.1. Numeric Functions (숫자형 함수)

5.2. Character Functions (문자형 함수)

5.3. Datetime Functions (날짜 함수)

5.4. Conversion Functions (변환 함수)

5.5. 기타 함수들

5.6. DECODE와 CASE

5.7. NVL, NVL2, NULLIF, COALESCE

6. 집계함수(Aggregate function)의 이해

6.1. 집계함수(Aggregate function)란?

6.2. GROUP BY와 HAVING절

7. 서브쿼리(Subquery)

7.1. Subquery란?

7.2. Single-Row Subquery

7.3. Multiple-Row Subquery

7.4. Multiple-Column Subquery

7.5. Inline View (From절 Subquery)

7.6. Scalar Subquery

7.7. UNION [ALL], INTERSECT, MINUS 연산자

8. 데이터 사전 (Data Dictionary)

8.1. 데이터 사전(Data Dictionary)이란?

8.2. 데이터 사전(Data Dictionary) 정보조회

9. 오라클 객체

9.1. 인덱스(Index)

9.2. VIEW 테이블

9.3. 시퀀스(Sequence)의 이해 및 활용

9.4. SYNONYM(동의어)