본문 바로가기
Data Analysis/정보처리기사

[데이터베이스DB] 관계대수, 관계해석, SQL 쓰임 정리

by suvii 2024. 4. 27.

 

관계대수 : 절차적 방법

  • 순수 관계 연산자
    • Select(σ) : 주어진 조건을 만족하는 튜플 선택, 수평적 부분 집합(행 선택)
    • Project(π) : 속성 리스트에 주어진 속성 값만을 추출, 수직적 부분 집합(열 선택)
    • Join(⋈) : 두 릴레이션에서 연관된 튜플들을 결합하여 새로운 릴레이션 생성
    • Division(÷) : 두 릴레이션 A, B에 대해 B 릴레이션의 모든 조건을 만족하는 튜플들을 릴레이션 A에서 분리해 내어 프로젝션 하는 연산
  • 일반집합 연산자
    • Union(∪)
    • Intersection()
    • Difference(-)
    • Cartesian Product(×)
      : SELECT * FROM A, B 튜플 수는 곱하기/ 속성 수는 더하기
  • SELECT문과 관계대수
    SELECT 속성 FROM 테이블 WHERE 조건 ;  ↔  π 속성 ( σ 조건 (테이블) )
  • INNER JOIN과 관계대수
    SELECT SNO, NAME FROM T1 INNER JOIN T2 ON T1.SNO = T2.SNO ;  
    ↔  π SNO, NAME ( T1 ⋈ T1.SNO = T2.SNO T2 )
  • Division 예제 1

R ÷ S → D2에 1, D3에 A를 지닌 D1만 추출

  • Division 예제 2

R1 ÷ R2 → C2에 A와 B 모두를 지닌 C1 추출

 

관계 해석 : 비절차적 방법(결과만 명시), 수학의 Predicate Calculus에 기반을 둠

  • 연산자 : OR(∨), AND(∧), NOT(⌉)
  • 정량자 : For All(∀), At Least(∃)

DDL(Data Definition Language)

 

  • CREATE : 테이블/인덱스/뷰/트리거 생성
    • CREATE TABLE 테이블명
    • CREATE INDEX 인덱스명 ON 테이블명(칼럼1, 칼럼2)
    • CREATE VIEW 뷰명 AS SELECT - FROM - WHERE -
    • CREATE TRIGGER 트리거명 BEFORE/AFTER 삽입/삭제/갱신 ON 테이블명 (FOR EACH ROW)
  • DROP : 테이블/뷰/인덱스 삭제
    • DROP TABLE 테이블명
    • DROP VIEW 뷰명
    • DROP INDEX 인덱스명
  • ALTER : 속성(칼럼) 변경
    • 속성 추가 : ALTER TABLE 테이블명 ADD
    • 속성 변경 : ALTER TABLE 테이블명 MODIFY
    • 속성 삭제 : ALTER TABLE 테이블명 DROP COLUMN
    • 인덱스 변경 : ALTER INDEX 인덱스명 RENAME TO/REBUILD/UNUSABLE
  • TRUNCATE : 테이블 초기화(구조 남아있음)
    • TRUNCATE [TABLE] 테이블명

 


DML(Data Manipulation Language)

 

  • INSERT : 명시된 속성에 값 삽입
    • INSERT INTO TABLE(COL1, COL2) VALUES('A', 1)
    • 주소록 테이블에서 거래처번호가 null이 아닌 레코드를 모두 거래처 테이블에 삽입한다.
      INSERT INTO 거래처 SELECT * FROM 주소록 WHERE 거래처번호 IS NOT NULL ;
  • UPDATE : 튜플 변경
    • UPDATE TABLE SET 변경내용 WHERE 조건
    • '인사'로 시작하는 모든 부서에 속한 직원들의 봉급을 10% 올리고자한다.
      UPDATE 직원 SET 봉급 = 봉급 * 1.1 WHERE 부서번호 IN (
      SELECT 부서번호 FROM  부서 WHERE 부서명 LIKE '인사%') ;
  • DELETE : 튜플(행) 삭제
    • DELETE FROM TABLE WHERE 조건
  • SELECT
    • SELECT * FROM TABLE WHERE 조건 AND/OR 조건
      GROUP BY - HAVING 집계함수(SUM, AVG, COUNT, MIN, MAX) 
      ORDER BY - ASC/DESC ;
    • 중복을 제거하고 검색 : SELECT DISTINCT 속성 FROM TABLE ;
    • UNION은 중복 제거/ UNION ALL은 중복 안 제거 → 아래에 이어 붙이는 것(칼럼 수 같아야 함)
    • COUNT(*)은 행을 셈/ COUNT(칼럼명)은 NULL값을 제외한 행을 셈
    • INNER JOIN/ OUTER JOIN/ CROSS JOIN
    • WHERE 속성 IN ('A', 'B')/ NOT IN ('A', 'B')
    • 하나라도 높은 : WHERE 속성 > ANY (SELECT 속성 FROM TABLE WHERE 조건) ;
      모두 높은 : WHERE 속성 > ALL (SELECT 속성 FROM TABLE WHERE 조건) ;
    • 해당 조건에 포함되는 : WHERE EXISTS (SELECT * FROM TABLE WHERE 조건)
      해당 조건에 포함되지 않는 : WHERE NOT EXISTS (SELECT * FROM TABLE WHERE 조건)
    • GROUP BY 부서번호 부서번호가 NULL값인 것도 추출
      WHERE 부서번호 IN NULL값 인식 불가, 추출 불가

 


DCL(Data Control Language)

 

  • GRANT : 데이터베이스 사용자의 사용 권한을 부여
    • GRANT 권한 ON 테이블명 TO 사용자명
    • GRANT 권한 ON 테이블명 TO PUBLIC (모든 사용자에게 권한 부여)
    • WITH GRANT OPTION : 다른 사용자에게 해당 권한을 부여할 수 있는 권한도 부여
  • REVOKE : 이미 부여된 데이터베이스 객체의 권한을 취소
    • REVOKE 권한 ON 테이블명 FROM 사용자명
    • CASCADE : 객체가 다른 객체에게 부여한 권한까지 모두 회수