1. DCL

  • Data Control Language의 약자로, 데이터 제어 언어라고 한다. 
  • 조작 대상으로는 사용자 권한과 트랜잭션이 있다.
  • 트랜잭션의 제어를 위한 명령어로 TCL이라는 용어가 있다.
  • TCL은 DCL에 속해 있다고 보기도 하지만 TCL과 DCL은 서로 다른 개념으로 구분한다.  
사용자 권한 접근 통제  - DBMS에 접근할 사용자를 등록한다. 
 - 특정 사용자에게 DB의 사용 권한을 부여하는 작업이다.
트랜잭션 안전, 무결
거래 보장
 - 동시 다발적으로 발생하는 다수 작업을 독립적이고 안전하게 처리하기 위한 DB의 작업 단위이다.

 

[DCL & TCL]

DCL GRANT
REVOKE
 - DB 사용자 권한 부여
 - DB 사용자 권한 회수
TCL COMMIT
ROLLBACK
CHECKPOINT
 - 트랜잭션 확정
 - 트랜잭션 취소
 - 복귀지점 설정

 

[DCL 작성]

(1) 권한 부여

#시스템 권한
GRANT 권한1, 권한2 TO 사용자계정

#객체 권한
GRANT 권한1, 권한2 ON 객체명 TO 사용자계정

 

(2) 권한 회수

#시스템 권한
REVOKE 권한1, 권한2 FROM 사용자계정

#객체 권한
REVOKE 권한1, 권한2 ON 객체명 FROM 사용자계정

 

2. TCL

[개념]

  • 트랜잭션이란, 일을 처리하는 단위이자 분해되지 않는 최소 단위이다.
  • 논리적인 연산 단위이자 하나 이상의 SQL문이 포함된다.
  • 또한 거래를 의미하기도 하며 거래의 모든 결과가 모두 반영되거나 모두 취소되어야 한다.

 

[권한]

구분 명령어 권한 내용
시스템 권한 CREATE USER 계정 생성
SESSION DB 접속
TABLE 테이블 생성
VIEW 뷰 생성
SEQUENCE 시퀀스 생성
PROCEDURE 함수 생성
DROP USER 계정 삭제
ANY TABLE 테이블 삭제
 
구분 권한 내용
객체 권한 ALTER 테이블 변경
INSERT 데이터 조작
DELETE
SELECT
UPDATE
EXECUTE PROCEDURE 실행

 

 

 

 

'SQL' 카테고리의 다른 글

DML  (0) 2022.03.07
DDL  (0) 2022.02.25
SQL 문법 정리  (0) 2022.02.09

[다중 테이블 검색 기법]

  • 조인
  • 서브쿼리
  • 집합 연산자

 

1. 조인

[개념]

  • Join, 결합을 의미하며 RDB에서의 조인은 교집합 결과로 데이터 결합 방법을 의미한다. 
  • 두 테이블의 공통값을 이용하여 칼럼을 조합하는 수단으로 사용된다.
  • 보통 PK(Primary Key, 기본키)나 FK(Foreign Key, 외래키)값을 결합하여 사용한다. 
  • 세 개 이상의 테이블 조인은 두 개의 테이블을 우선 조인한 후 그 결과와 나머지 테이블을 다시 조인한다.

내부조인, INNER JOIN

[유형]

논리적 조인  - 사용자가 직접 작성한 SQL문에 의해 표현한 테이블 결합 방식
물리적 조인  - DBMS의 옵티마이저 엔진에 의해 발생하는 테이블 결합 방식
 - Nested Loop Join
 - Merge Join 
 - Hash Join
  (빨간 글씨: 처음 들어보는 단어)

 

[유형(세분)]

내부 조인  - 두 테이블에 공통으로 있는 열을 활용하는 유형
 - 공통 컬럼(열) 기반
외부 조인  - 특정 테이블의 모든 데이터 기준, 다른 테이블의 정보와 비교하여 추출한다.
 - 다른 테이블에 동일한 값이 없어도 특정 테이블은 출력된다.

 

내부조인 동등  - 공통으로 있는 컬럼값이 같은 경우 레코드(행) 추출한다.
자연  - 두 테이블에 있는 동일한 컬럼명을 기준으로 모든 컬럼값이 같은 경우 레코드(행) 추출한다.
교차  - 조인 조건이 없는 모든 데이터의 조합을 추출한다.

 

외부조인 왼쪽  - 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터를 추출한다.
 - 오른쪽 테이블에 동일한 값이 없어도 왼쪽 테이블의 레코드는 출력된다.
오른쪽  - 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 동일 데이터를 추출한다.
 - 왼쪽 테이블의 동일한 값이 없어도 오른쪽 테이블의 레코드는 출력된다.
완전  - My에서만 사용 가능하며 Or에서는 불가능하다고 한다. (수업메모)
 - 양쪽의 모든 데이터를 추출한다.

 - 양쪽 테이블에 동일한 값이 없어도 양쪽 테이블의 레코드는 출력된다.

 

SQL Join 종류

https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

 

Visual Representation of SQL Joins

This article describes SQL Joins in a visual manner, and also the most efficient way to write the visualized Joins.

www.codeproject.com

2. 서브쿼리

[개념]

  • SQL문 안에 포함된 또 다른 SQL문을 의미한다.
  • 확인되지 앟은 기준을 위해 검색하는 용도로 사용된다.
  • 메인쿼리와 서브쿼리는 주종관계를 이룬다.
  • 당연하게도 서브쿼리에 작성된 컬럼명은 메인쿼리의 컬럼명을 가져와서 사용할 수 있으나 역은 성립하지 않는다.

[유형1 (우선동작)]

비연관
(Un-Correlated)
 - 서브쿼리 안에 메인쿼리의 커럼 정보를 가지고 있지 않은 형태를 의미한다.
 - 메인쿼리 없이 독자적으로 실행한다.
연관
(Correlated)
 - 서브쿼리 안에 메인쿼리의 컬럼 정보를 가지고 있는 형태를 의미한다.
 - 메인쿼리의 실행된 결과를 통해 서브쿼리의 조건이 맞는지 확인한다.

[유형2 (반환 데이터 형태)]

단일 행
(Single Row)
 - 서브쿼리의 결과가 항상 1건 이하인 서브쿼리를 의미한다.
 - 단일 행의 비교 연산자에는 = , < , <= , > , >= , <> 등이 있다.
다중 행
(Multiple Row)
 - 서브쿼리의 실행 결과가 여러 건인 서브쿼리를 의미한다.
 - 다중 행의 비교 연산자에는 IN, EXISTS, ALL, ANY 등이 있다.
 - From 뒤에 또는 WHERE 절에 사용된다. (수업메모)
다중 컬럼
(Multiple Column)
 - 서브쿼리의  실행 결과가 2개 이상 컬럼으로 반환되는 쿼리를 의미한다.
 - 메인쿼리의 조건절에 다수 칼럼을 비교할 때, 서브와 메인에서 비교하는 칼럼 개수, 위치가 동일해야 한다.

 

3. 집합 연산자

[개념]

UNION  - 2개 이상 SQL문의 실행 결과에 대한 중복을 제거한 합집합 
 - ((AB) - (AB))
UNION ALL  - 2개 이상 SQL문의 실행 결과에 대한 중복을 제거하지 않은 합집합
 - A와 B
INTERSECTION  - 2개 이상 SQL문의 실행 결과에 대한 중복을 제거한 교집합
 - (AB)
 - ???, 중복 값을 한 번만 출력한다는 뜻인가?
EXCEPT (MINUS)  - 선행 SQL문의 실행 결과와 후행 SQL문의 실행 결과 사이의 중복을 제거한 차집합
 - DBMS마다 EXCEPT을 쓰기도 MINUS를 쓰기도 한다고 한다.
 - (A-B)

 

'SQL' 카테고리의 다른 글

DCL  (0) 2022.03.10
DDL  (0) 2022.02.25
SQL 문법 정리  (0) 2022.02.09

1. 개념

  • DDL(Data Definition Language), 영문 그대로 데이터를 정의하는 언어
  • 직관적인 설명으로는 데이터를 담을 그릇을 생성하는 언어
  • 이렇게 생성된 그릇을 DBMS(Database Management System)에서는 오브젝트(Object)라고 한다.

[DDL 대상]

DDL 대상 설명
스키마
(Schema)
 - DBMS의 특징과 구축 환경에 기반한 데이터 구조
 - 하나의 데이터베이스(이하 DB)라고 이해할 수 있음
도메인
(Domain)
 - 속성의 데이터 타입과 제약 조건 등을 설정한 정보
 - 속성이 가지는 값의 범위로 이해 가능
테이블
(Table)
 - 데이터 저장 공간
 - 이해하기 쉬운 개념으로는 '표'가 있음

(View)
 - 1개 이상의 물리 테이블을 통해서 만드는 가상의 논리 테이블
인덱스
(Index)
 - 빠른 검색을 위한 데이터 구조
 - 책이나 논문의 차례 또는 개요라고 볼 수 있음

 

2. 유형(생성, 변경, 삭제/제거)

구분 명령어 내용
생성 CREATE 생성
변경 ALTER 변경
삭제 DROP 삭제
TRUNCATE 내용 삭제

 

DDL 명령어로 분류되지는 않지만 DDL과 같이 사용되는 명령어가 있는데

M에서는 생성된 오브젝트의 목록을 조회하기 위해 SHOW 명령문을 사용하고 내용을 조회하기 위해서는 SELECT를 사용한다.

O에서는 SELECT로 목록과 내용을 조회한다.

 

3. 작성 (스키마, 도메인, 뷰, 인덱스 추가할 것)

[테이블 생성, CREATE문]

CREATE TABLE 테이블명 (
#아래부분은 참고
    칼럼명 데이터타입 [DEFAULT값][NOT NULL]
    {, 칼럼명 데이터타입 [DEFAULT값][NOT NULL]}*
    [PRIMARY KEY (칼럼 리스트),]
    {[FOREIGN KEY (칼럼 리스트) REFERENCES 테이블명 [(칼럼명)]
    	[ ON DELETE 옵션 ]
        [ ON UPDATE 옵션 ] ], }*
    [CHECK (조건식) | UNIQUE(칼럼명) ] );
    
-- 테이블 복제
CREATE TABLE 테이블명 AS SELECT문;

 

[제약조건]

제약 조건 설명
PRIMARY KEY (PK)  - 테이블의 기본키
 - 기본적으로 NOT NULL, UNIQUE 제약 사항이 결정된다.
FOREIGN KEY (FK)  - 테이블에 외래키 정의
 - 참조 대상을 테이블명(칼럼명) 형식으로 작성해야 한다.
 - 참조 무결성이 위배되는 상황 발생 시 다음 옵션으로 처리가 가능하다
   (CASCADE, NO ACTION, SET NULL, SET DEFAULT)
UNIQUE  - 테이블에서 해당하는 값은 유일해야 함을 의미한다.
 - 테이블에서 모든 값이 다르게 적재되어야 하는 열에 설정한다.
NOT NULL  - 테이블에서 해당하는 열의 값은 NULL이 불가능하다
 - 필수적으로 입력해야 한다는 뜻이다.
CHECK  - 사용자가 직접 정의하는 제약 조건이다.
 - 발생 가능한 상황에 따라 여러 가지 조건을 설정할 수 있다.

사실 맨 윗줄 외엔 딱히 실전에서 써보지 않은 거라 뭐라 말은 못하겠지만 

짐작하는 바로는 (*)이 붙은 것은 있을 수도 있고 없을 수도 있다는 것으로 보인다.  

 

[테이블 변경, ALTER문]

--열 추가
ALTER TABLE 테이블명 ADD 칼럼명 데이터타입 [DEFAULT값]

--열 데이터 타입 변경
ALTER TABLE 테이블명
    MODIFY 칼럼명 데이터타입 [DEFAULT값]
    
--열 삭제
ALTER TABLE 테이블명 DROP 칼럼명

--테이블명 변경(1)
RENAME TABLE 이전테이블명 TO 새로운테이블명

--테이블명 변경(2)
ALTER TABLE 이전테이블명 RENAME 새로운테이블명

 

[테이블 삭제, DROP / TRUNCATE문]

--테이블삭제
DROP TABLE 테이블명

--테이블내용삭제
TRUNCATE TABLE 테이블명

'SQL' 카테고리의 다른 글

DCL  (0) 2022.03.10
DML  (0) 2022.03.07
SQL 문법 정리  (0) 2022.02.09

[DDL]

  • CREATE : DB, Table, View, Index 등 생성
  • ALTER : Table의 속성(Attribute), 도메인(Domain), 제약조건(Constraint) 등 변경
  • DROP : DB, Table, View, Index 등 삭제
  • TRUNCATE : Table의 모든 행 삭제
# CREATE 문법
CREATE TABLE 테이블명 (
	컬럼명1 자료형 [DEFAULT 기본값][제약조건]
    ...
    컬럼명N 자료형 [DEFAULT 기본값][제약조건]
);

# ALTER 문법, FK = FOREIGN KEY(외래키)
# 컬럼 추가 SQL 문법
ALTER TABLE 테이블명 ADD CONSTRAINT [제약조건명] FK ([컬럼명]) 
	REFERENCES [참조 대상 테이블명]([참조 대상 컬럼명])
    [외래키 옵션];
    
# 외래키(FK, FOREIGN KEY) 추가 문법
1) ON UPDATE/DELETE CASCADE : 부모 데이터 삭제 시 자식 데이터도 삭제
2) ON UPDATE/DELETE SET NULL : 부모 데이터 삭제 시 자식 데이터는 NULL로 수정
3) ON UPDATE/DELETE SET DEFAULT : 부모 데이터 삭제 시 자식 데이터는 DEFAULT값 수정
4) ON UPDATE/DELETE RESTRICT : 자식 테이블이 참조하고 있는 경우 데이터 삭제 불가
5) ON UPDATE/DELETE NO ACTION : RESTRICT와 동일하며 옵션 미지정 시 자동 선택됨

# DROP(DB / TABLE) + IF EXISTS
DROP DB DB명;
DROP DB 테이블명;

DROP DB IF EXISTS DB명;
DROP TABLE IF EXISTS 테이블명;

# TRUNCATE 문법
TRUNCATE TABLE 테이블명;

[DML]

  • SELECT : Table, View의 특정 조건 데이터 조회
  • INSERT : Table에 특정 조건의 데이터 입력
  • UPDATE : Table의 특정 조건 데이터 수정
  • MERGE : Table에 특정 조건에 따라 데이터를 입력(INSERT)하거나 수정(UPDATE)
  • DELETE : Table의 특정 조건의 데이터 삭제
# SELECT 문법
SELECT (필드명 | *) FROM 테이블명 [WHERE 조건문];

중복값 제거(DISTINCT) 
SELECT DISTINCT 필드명 FROM 테이블명; 

오름차순 정렬 (ORDER BY) : 
SELECT (필드명 | *) FROM 테이블명 ORDER BY 필드명;

내림차순 정렬 (ORDER BY ... DESC) : 
SELECT (필드명 | *) FROM 테이블명 ORDER BY 필드명 DESC;

혼합 정렬 (오름, 내림) : 
SELECT (필드명 | *) FROM 테이블명 ORDER BY 필드명1 DESC, 필드명2 ASC;

별칭 이용 처리 
SELECT 필드명 AS 별칭 FROM 테이블명; -- 해당 필드에 새로운 별칭 부여
SELECT 필드면 FROM 테이블명 AS 별칭; -- 해당 테이블에 새로운 별칭 부여

# INSERT 문법 컬럼명과 값의 위치는 동일하게 입력하도록한다.
INSERT INTO 테이블명 [(컬럼명1, ... , 컬럼명N)] VALUES (값1, ... , 값N);

EX)
INSERT INTO GreatMen(ID, Name, Date, RoomNum) 
VALUES (1, '홍길동', '2022-02-09', 1601);

생략할 수 있는 필드
1. NULL을 저장할 수 있도록 설정된 필드
2. DEFAULT 제약 조건이 설정된 필드
3. AUTO_INCREMENT 키워드가 서정된 필드


# UPDATE 문법
UPDATE 테이블명 SET 수정컬럼명1 = 값1, ... 수정컬러명N = 값N [WHERE 조건문];

쉽게 보기
UPDATE 테이블명
SET 필드명1 = 값1, ... 필드명N = 값N
WHERE 필드명 = 값


# DELETE 문법
DELETE FROM 테이블명 [WHERE 조건식];

테이블 레코드 삭제
DELETE FROM 테이블명 WHERE 필드명 = 값;

테이블의 모든 데이터 삭제
DELETE FROM 테이블명;


# Merge 문법
MERGE INTO 메인테이블명 USING 서브테이블명 ON (조건)
	WHEN MATCHED THEN
    	UPDATE SET 컬럼1 = 값1, ... 컬럼N = 값N
    WHEN NOT MATCHED THEN
    	INSERT (컬럼1, ... 컬럼N) VALUES (값1, ... , 값N)

[DCL]

  • GRANT : 특정 사용자에게 특정 객체에 대한 특정 작업 수행 권한 부여
  • REVOKE : 특정 사용자에게 부여된 권한 회수 
# GRANT 문법
GRANT 권한 ON 객체명 TO 사용자 (사용자명 | PUBLIC)

권한 : SELECT, INSERT, DELETE, UPDATE, REFERENCES 중 한 개 이상

EX)
-- STUDENT에게 SCORE 테이블에 대해 SELECT 연산 수행할 수 있는 권한 부여.
GRANT SELECT ON SCORE TO STUDENT

-- 모두에게 권한 부여 (PUBLIC)
GRANT SELECT ON SCORE TO PUBLIC

-- A에게 모든 권한 부여 (ALL PRIVILEGES)
GRANT ALL PRVILEGES ON SCORE TO A

-- 권한 전달 가능 옵션
GRANT SELECT ON SCORE TO A WITH GRANT OPTION


# REVOKE 문법
-- A에게 부여된 SCORE 테이블에 대한 SELECT 권한 회수
REVOKE SELECT ON SCORE FROM A

'SQL' 카테고리의 다른 글

DCL  (0) 2022.03.10
DML  (0) 2022.03.07
DDL  (0) 2022.02.25

+ Recent posts