SQL 개요와 데이터 정의어
23년 이전 글/데이터베이스

SQL 개요와 데이터 정의어

SQL 개요

SQL의 특징

  • 자연어에 가까운 구문을 사용하여 질의 표현
  • 비 절차적 언어(선언적 언어) - 데이터 처리를 위한 접근 경로에 대한 명세가 불필요
  • 관계 대수나 관계 해석보다 표현력이 우수 - 관계 대수 + 확장된 관계 해석 기초
  • SQL의 표준화 - 상용관계 DBMS간의 전환이 용이, 대화식 질의어로 사용
  • 응용 프로그램에 삽입된 형태로도 사용
  • 레코드 집합 단위로 처리

 

SQL의 수행

  • 관계 DBMS는 사용자가 입력한 SQL문을 번역하여 사용자가 요구한 데이터를 찾는데 필요한 모든 과정을 담당
  • 데이터베이스 접근 인터페이스
  • 대화식 SQL(interactive SQL) : 최종 사용자들이 사용
  • 내포된 SQL(embedded SQL) : 응용 프로그래머가 사용

데이터베이스 접근 인터페이스

 

SQL의 구성요소

  • 데이터 정의어(DDL : Data Definition Language)
  • 데이터 조작어(DML : Data Manipulation Language)
  • 데이터 제어어(DCL : Data Control Language)

SQL의 구성요소

데이터 정의어(DDL : Data Definition Language)

  • relation, 뷰, 인덱스의 생성, 제거, 변경 등의 작업을 수행
  • relation 생성시 무결성 제약조건 명시

데이터 제어어(DCL : Data Control Language)

  • 트랜잭션 관리(시작, 철회, 완료)
  • 릴레이션에 대한 권한 관리
  • 동시성 제어(Lock 관리)

데이터 조작어(DML : Data Manipulation Language)

  • 데이터베이스 스키마 내의 데이터를 조작
  • 튜플 검색 (SELECT), 튜플 삽입(INSERT)
  • 튜플 삭제 (DELETE), 속성 값의 변경(UPDATE)

데이터 조작어의 사용

 

데이터 정의어

데이터 정의어 종류

데이터 정의어 종류

 

스키마의 생성과 제거

  • relation, 도메인, 제약조건, 뷰, 권한 등을 그룹화하기 위해서 스키마 개념을 지원
  • 권한을 부여 받지 못한 사용자는 스키마에 접근할 수 없음
  • "KIM"이라는 사용자가 'MY_DB'라는 스키마를 생성(CREATE SCHEMA MY_DB AUTHORIZATION KIM;
  • 스키마 제거(DROP SCHEMA MY_DB RESTRICT;) (DROP SCHEMA MY_DB CASCADE;)

 

테이블 생성

CREATE TABLE 테이블_이름
( { 열_이름 데이터_형식
			[NOT NULL]
			[UNIQUE]
			[DEFAULT 기본값]
			[CHECK 체크조건]
	}
	[PRIMARY KEY(열_이름)]
	[FOREIGN KEY(열_이름) REFERENCES 테이블_이름(열_이름) ]
);

데이터 타입(도메인 타입) - SQL92

열의 데이터 타입 결정시 고려사항

숫자인지 문자인지 먼저 결정,

문자라면 고정길이 인지 가변길이 인지, 최대 길이 결정

숫자라면 정수 또는 실수, 최대 길이, 소수점 아래 개수 특정

 

도메인 정의

  • 한 Attribute에 데이터 타입을 직접 정의하지 않고 도메인을 정의하여 여러 테이블에서 일관되게 사용
  • 변경시 도메인을 정의한 곳에서 도메인 정의를 변경하면 도메인을 사용하는 모든 테이블에서 일관되게 적용
  • 도메인 생성
  • CREATE DOMAIN DEPTNAME CHAR(10) DEFAULT '개발';
CREATE DOMAIN DEPTNAME CHAR(10) DEFAULT '개발'
CONSTRAINT VALID_DEPT
CHECK VALUE IN ('영업','총무','기획','개발)

도메인 제거

DROP DOMAIN DEPTNAME;

고객 테이블 생성

CREATE TABLE 고객
(
고객번호 INT,
고객명 VARCHAR(30)
);

 

테이블 제거(DROP)

  • 기존의 RELATION은 DROP문으로 제거
  • RELATION의 정의와 RELATION의 튜플들이 모두 삭제됨
  • 사용형식
  • DROP TABLE : RELATION 명칭 [RESTRICT | CASCADE]
  • RESTRICT : 명시한 RELATION이 참조되고 있으면 제거 안됨
  • CASCADE : 명시된 RELATION과 참조하는 RELATION 모두 제거됨
-- 사용 예
DROP TABLE COURSE;
DROP TABLE COURSE CASCADE;

 

테이블 변경(ALTER)

열 추가하기
열 삭제하기

무결성 제약조건

무결성 제약조건 예제

NOT NULL

  • 속성은 기본적으로 NULL 값을 허용
  • NULL 값을 갖지 않는 속성은 `NOT NULL` 명시
  • 기본키는 반드시 `NOT NULL`을 명시
  • NULL은 값은 있지만 모르는 값이거나, 해당되지 않는 값임
CREATE TABLE EMPLOYEE
		(EMPNO INTEGER NOT NULL,...)

 

UNIQUE

  • 속성 값이 유일 하도록 보장
  • 유일 값이므로 NULL 값도 한번은 허용
  • 한 테이블에 UNIQUE 제약조건을 여러 개 명시할 수 있음
  • 사용 예
CREATE TABLE EMPLOYEE
		(...,
        EMPNAME CHAR(10) UNIQUE,
        ...);

 

DEFAULT

  • 속성에 NULL 값 대신 특정 값을 기본 값으로 지정
  • 사용 예
CREATE TABLE EMPLOYEE
		(...,
        TITLE CHAR(10) DEFAULT '사원'
        ...);

 

CHECK

  • CHECK절은 하나의 속성이 취하는 값들의 범위 지정
  • 사용 예
CREATE TABLE EMPLOYEE
		(...,
        SALARY INTEGER CHECK (SALARY < 6000000),
        ...);
        
-- 사용 예 2

CREATE TABLE EMPLOYEE
		(ID INTEGER,
        NAME CHAR(10),
        SALARY INTEGER,
        MANAGER_SALARY INTEGER,
        CHECK(MANAGER_SALARY > SALARY)
        );

 

기본 키

  • 기본 키는 개체 무결성 제약조건에 의해 NULL 값을 갖지 않음
  • 사용 예
CREATE TABLE EMPLOYEE
		(EMPNO INTEGER NOT NULL,
        ...,
        PRIMARY KEY (EMPNO),
        ...);

DEPARTMENT 테이블 생성

CREATE TABLE DEPARTMENT (
	DEPTNO INTEGER NOT NULL,
    DEPTNAME CHAR(10),
    FLOOR INTEGER,
    PRIMARY KEY (DEPTNO)
    );
CREATE TABLE DEPARTMENT (
		DEPTNO INTEGER NOT NULL,
        ...
        CONSTRAINT PK_DEPT_NO PRIMARY KEY (DEPTNO)
        );

--기본 키 제약 조건의 삭제
ALTER TABLE DEPARTMENT DROP CONSTRAINT PK_DEPT_NO;

--제약 조건의 추가
ALTER TABLE DEPARTMENT ADD CONSTRAINT PK_DEPT_NO PRIMARY KEY (DEPTNO);

 

외래 키

  • RELATION을 정의하면서 명시함
  • 참조되는 속성은 동일한 데이터 타입이면서 UNIQUE 또는 기본키로 정의됨
  • 참조하는 외래 키 속성의 값은 참조하는 속성의 값이거나 NULL만이 가능
  • 참조되는 RELATION에서 튜플이 삭제/수정 될 때 참조하는 RELATION에서 어떻게 동작할 것인가를 명시

- 참조 무결성 제약 조건을 위반할 때 기본 동작은 위반한 연산을 거절

- CASCADE절이 명시되면 참조 무결성을 위배하는 참조하는 RELATION에도 영향을 미침

무결성 제약

ON UPDATE CASECADE

기본키의 수정, 외래키 영향

2개의 RELATION 참조

RELATION 참조 예제

CREATE TABLE EMPLOYEE
	(EMPNO	INTEGER	NOT NULL,
     EMPNAME CHAR(10),
     TITLE	 CHAR(10),
     MANAGER INTEGER,
     SALARY	 INTEGER,
     DNO	 INTEGER,
     PRIMARY KEY(EMPNO),
     FOREIGN KEY(MANAGER) REFERENCES EMPLOYEE (EMPNO)),
     FOREIGN KEY(DNO) REFERENCES DEPARTMENT (DEPTNO):;

 

학생, 과목, 수강 RELATION

학생 RELATION

CREATE TABLE STUDENT
	(SNO INTEGER NOT NULL PRIMARY KEY,
     SNAME CHAR(10)
     );

 

 

과목 RELATION

CREATE TABLE COURSE
	(CNO CHAR(5) NOT NULL,
    CNAME CHAR(20),
    PRIMARY KEY(CNO)
    );

 

수강 RELATION

CREATE TABLE ENROL
		(SNO INTEGER NOT NULL,
        	CNO CHAR(5) NOT NULL,
            CREDIT CHAR(2),
            PRIMARY KEY (SNO, CNO),
            FOREIGN KEY (SNO) REFERENCES STUDENT(SNO),
            FOREIGN KEY (CNO) REFERENCES COURES(CNO)
            );

 

 

 

반응형

'23년 이전 글 > 데이터베이스' 카테고리의 다른 글

SELECT 2  (0) 2022.08.15
SELECT 1  (0) 2022.08.14
Microsoft SQL Server, SSMS 설치 및 기본설정  (0) 2022.08.04
관계 대수 확장, 해석, 관계 연산 정리  (0) 2022.07.27
관계 연산자, 조인  (0) 2022.07.27