데이터베이스를 접근하고 조작하는데 필요한 표준언어를 활용할 수 있게 해주는 규칙
SQL문법의 분류
- 데이터 정의어(DDL)
- 테이블이나 관계의 구조를 생성하는 데 사용
- CREATE, ALTER, DROP, TRUNCATE문
- 데이터 조작어(DML)
- 데이터베이스에 저장된 자료들을 입력, 수정, 삭제, 조회하는 언어
- SELECT, INSERT, UPDATE, DELETE문이 있음
- SELECT 문은 특별한 질의어(Query)라고 부름
- 데이터 제어어(DCL)
- 데이터베이스관리자(DBA)가 데이터 보안, 무결성 유지, 병행 제어, 회복의 위해 DBA가 사용하는 제어용 언어
- GRANT, REVOKE문이 있음
- 도메인 : 하나의 속성이 가질 수 있는 원자값들의 집합
- 스키마 : 데이터베이스의 구조, 제약조건 등의 정보를 담고 있는 기본적인 구조, 외부,개념,내부 스키마
- 테이블 : 데이터 저장공간
- 뷰 : 하나 이상의 물리 테이블에서 유도되는 가상의 테이블
- 인덱스 : 검색을 빠르게 하기 위한 데이터 구조
1) 외부스키마
사용자나 개발자의 관점에서 필요로 하는 데이터베이스의 논리적 구조
사용자 뷰를 나타냄
2) 개념 스키마
데이터베이스의 전체적인 논리적 구조
전체적인 뷰를 나타냄
개체 간의 관계, 제약조건, 접근권한, 무결성, 보안에 대해 정의
3) 내부 스키마
물리적 저장장치의 관점에서 보는 데이터베이스 구조
실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현방법, 내부 레코드의 물리적 순서 등을 표현
개념
데이터를 저장하는 항목인 필드들로 구성된 데이터의 집합체이다.
테이블의 구성조건
- 테이블에 포함된 행들은 유일해야하고, 중복된 행이 존재하지 않아야 한다.
- 테이블에 포함된 행들 간에는 순서가 존재하지 않는다.
- 테이블을 구성하는 열들 간에는 순서가 존재하지 않는다.
테이블의 구조
컬럼: 세로, row: 가로
테이블의 용어
튜플/행 : 테이블 내의 행을 의미하며 레코드라고도 함, 튜플은 릴레이션에서 같은 값을 가질 수 없음
애트리뷰트/열 : 테이블 내의 열을 의미, 열의 개수를 디그리라고 함
식별자 : 여러 개의 집합체를 담고 있는 관계형 데이터베이스에서 각각의 구분할 수 있는 논리적인 개념
카디널리티 : 튜플의 개수
차수 : 애트리뷰트의 개수
도메인 : 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자값들의 집합
개념
뷰는 논리 테이블로서 사용자에게(생성 관점 아닌 사용관점에서)테이블과 동일하다.
특징
- 논리적 데이터 독립성 제공
- 데이터 조작 연산 간소화
- 보안기능(접근제어) 제공
- 뷰 변경 불가
목적
- 뷰를 사용하는 주된 이유는 단순 질의어를 사용할 수 있기 때문이다.
- FROM절에서 있는 하나의 뷰를 통해 뷰를 구성하는 복수의 테이블을 대체
- 테이블의 중요 데이터 일부만을 제공할 수 있는 장단점이 있다.
뷰 명령어
- 테이블 A 그대로
CREATE VIEW VW_A AS SELECT * FROM A
- 테이블 A 일부컬럼
CREATE VIEW VW_B AS SELECT 컬럼1, 컬럼2 FROM A;
- 테이블A와 테이블B 조인결과
CREATE VIEW VW_C AS SELECT * FROM A,B WHERE A.컬럼1 = B.컬럼2
- 뷰 교체
CREATE OR REPLACE VIEW 뷰이름 AS 조회쿼리;
뷰 삭제/변경
- 뷰 정의 자체를 변경하는 것은 불가능
- 뷰 이름이나 쿼리문을 변경하는 수단은 제공되지 않음
- 뷰 삭제와 재생성을 통해 뷰에 대한 정의변경이 가능
- 뷰를 통해 접근 가능한 데이터는 변경이 가능
- 모든 경우의 데이터 변경이 가능한 것이 아니라 일부 제약 존재
뷰 삭제하는 법 -> DROP VIEW 뷰이름;
개념
인덱스는 데이터를 빠르게 찾을 수 있는 수단으로서 테이블에 대한 조회 속도를 높여주는 자료구조, 인덱스 걸린 컬럼은 중복값 허용하지 않는다. 하지만 복수 컬럼을 인덱스로 걸 수 있다.
종류
- 순서 인덱스 : 데이터가 정렬된 순서로 생성되는 인덱스
- 해시 인덱스 : 해시함수에 의해 직접 데이터에 키값으로 접근하는 인덱스
- 비트맵 인덱스 : 각 컬럼에 적은 개수 값이 저장된 경우 선택하는 인덱스
- 함수기반 인덱스 : 수식이나 함수를 적용하여 만든 인덱스
- 단일 인덱스 : 하나의 컬럼으로만 구성한 인덱스
- 결합 인덱스 : 두개 이상의 컬럼으로 구성한 인덱스
- 클러스터드 인덱스 : 기본 키(PK) 기준으로 레코드를 묶어서 저장하는 인덱스
명령어
- 생성
CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명);
- 삭제
DROP INDEX 인덱스명;
- 변경
ALTER [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명);
인덱스 스캔방식
- 인덱스 범위 스캔 : 인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 후에 리프 블록을 필요한 범위만 스캔하는 방식
- 인덱스 전체 스캔 : 수직적 탐색 없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식
- 인덱스 단일 스캔 : 수직적 탐색만으로 데이터를 찾는 스캔 방식
- 인덱스 생략 스캔 : 선두 컬럼이 조건 절에 빠졌어도 인덱스를 활용하는 스캔방식
CREATE 명령어
CREATE TABLE 테이블명 ( 속성명 데이터타입 [NOT NULL], PRIMARY KEY(기본키), UNIQUE(속성명, ...), FOREIGN KEY(외래키)REFERENCES 참조테이블(기본키), CONSTRAINT 제약조건명 CHECK(조건식), );
CREATE TABLE 속성
- PRIMARY KEY : 테이블의 기본 키를 정의, 유일하게 테이블의 각 행을 식별
- FOREIGN KEY : 외래키를 정의, 참조대상을 테이블로 명시, 열과 참조된 테이블의 열 사이의 외래 키 관계를 적용하고 설정
- UNIQUE : 테이블 내에서 얻은 유일한 값을 갖도록 하는 속성
- NOT NULL : 해당 컬럼은 NULL값을 포함하지 않도록 하는 속성
- CHECK : 개발자가 정의하는 제약조건, 참이어야 하는 조건을 지정
- DEFAULT : 해당 필드의 기본값을 설정
ALTER 명령어
- 컬럼추가
ALTER TABLE 테이블명 ADD 컬러명 데이터_타입;
- 컬럼수정
ALTER TABLE 테이블명 MODIFY 컬럼명 데이터_타입 [DEFAULT 값][NOT NULL];
- 컬럼삭제
ALTER TABLE 테이블명 DROP 컬럼명;
- 컬럼명 수정
ALTER TABLE 테이블명 RENAME COLUMN 변경 전_컬럼명 TO 변경 후 _컬럼명;
DROP 명령어
- CASCADE는 참조하는 테이블까지 연쇄적으로 제거하는 옵션
- RESTRICT는 다른 테이블이 삭제할 테이블을 참조 중이면 제거하지 않는 옵션
DROP TABLE 테이블명 [CASCADE|RESTRICT]
TRUNCATE 명령어
- 테이블 내의 데이터들을 삭제하는 명령어
TRUNCATE TABLE 사원;