[데이터베이스] SQL
SQL(Structured Query Language)
ANSI, ISO에서 선정한 관계 데이터베이스 표준
언어
관계 대수와 관계 해석을 기초로 한 혼합 언어
데이터 정의, 조작, 제어 기능을 모두 갖추고 있다.
비절차식
언어이며 대화식 질의어로 사용 가능
다른 프로그램 언어(COBOL, PL/1, C, Pascal)에 삽입된 형태
로 사용 가능
SQL에서 사용하는 테이블
- 기본 테이블
DDL에 의해 만들어지는 테이블로 독립적으로 존재하며 테이블명을 기록하게 되어 있다 - 뷰 테이블
역시 DDL에 의해 만들어지며 기본 테이블에서 유도되어 만들어지는가상
테이블 - 임시 테이블
질의 처리과정에서 DML에 의해 만들어지는 테이블로 임시적으로 만들어지는 테이블
SQL에서 사용하는 자료형의 종류
타입명 | 구분 | 설명 |
---|---|---|
BIT(N) | 비트열 | 고정길이로 Bit단위로 할당 |
VARBIT(N) | 비트열 | 가변길이로 Bit단위로 할당 |
CHAR(N) | 문자열 | 고정 길이로 N개 할당 |
VARCHAR(N) | 문자열 | 가변 길이로 N개 할당 |
SMALLINT | 정수형 | 2바이트 고정 소수점 형식 |
INT or INTEGER | 정수형 | 4바이트 고정 소수점 형식 |
FLOAT | 실수형 | 4바이트 부동 소수점 형식 |
DOUBLE | 실수형 | 8바이트 부동 소수점 형식 |
DECIMAL(i,j) | 10진형 | i는 10진수의 개수, j는 소수점 이하 자리수 |
GRAPHIC(N) | 그래픽형 | 그림 형태의 내용을 기억시킬 기억 장소 할당 |
LOGICAL | 논리형 | TRUE, FALSE를 기억시킬 기억 장소 |
DATE | 날짜형 | YY-MM-DD 형식 |
TIME | 시간형 | HH:MM:SS 형식 |
SQL 명령어의 분류
- 데이터 정의어(DDL : Data Definition Language)
- 데이터 조작어(DML : Data Manipulation Language)
- 데이터 제어어(DCL : Data Control Language)
- 트랜잭션 제어어(TCL : Transaction Control Language)
- COMMIT : 데이터를 데이터베이스에 저장하고 트랜잭션을 성공적으로 종료
- ROLLBACK : 데이터의 변경사항을 취소하고 원상태로 복귀한 후 트랜잭션 종료
데이터 정의어
CREATE
테이블, 뷰, 인덱스 등을 생성할 때 사용
테이블 생성 구문
CREATE TABLE 테이블 명
({속성의 멤버 정의...})
{[PRIMARY KEY 속성]}
{[UNIQUE 속성]}
{
[FOREIGN KEY 속성 REFERENCES 기본테이블] 속성
[ON DELETE {RESTRICT/CASCADE/SET NULL/SET DEFAULT}]
[ON UPDATE {RESTRICT/CASCADE/SET NULL/SET DEFAULT}]
[]
}
{[CHECK 조건식]}
- NOT NULL : 널 값을 허용하지 않을 때 지정
- PRIMARY KEY : 기본키를 구성하는 속성을 지정
- FOREIGN KEY : 외래키로 어떤 릴레이션의 기본키를 참조하는지를 지정
- RESTRICT : 동작이 취소(제한)됨
- CASCADE : 연속으로 같은 동작을 수행
- SET NULL : 모두 NULL로 바꿔주는 동작 수행
- SET DEFAULT : 주어진 초기 값으로 설정
- CHECK : 속성의 제약조건 지정
뷰 생성 구문
CREATE VIEW 뷰이름(속성)
AS SELECT (속성)
FROM 테이블명
[WHERE 조건식]
인덱스 생성 구문
CREATE [UNIQUE] INDEX 색인명
ON 테이블명 (속성 [ASC/DESC])
[CLUSTER]
- UNIQUE : 색인화되어야 할 하나의 필드나 필드 조합이 중복되어서 같은 값이 나타나지 않게 하고자 사용
- ASC/DESC : 명시하지 않으면 오름차순(ASC)으로 자동설정
- CLUSTER : 색인 값과 물리적인 실제 데이터를 일치시킬 때 사용하는 옵션으로 하나의 테이블에서 한번빡에 생성할 수 없음
ALTER
생성된 기본 테이블이나 도메인의 정의를 변경하고자 할 때 사용하는 명령어
기본 구문
ALTER TABLE 테이블명
[ADD/ALTER/DROP/MODIFY] 변경하고자 하는 속성
- ADD : 테이블에 속성 추가
- ALTER : 도메인 정의 변경
- DROP : 테이블에서 속성이나 제약조건 삭제
- MODIFY : 속성의 데이터 유형, 제약조건에 대한 변경
-
MODIFY COLUMN 시 고려사항
해당 컬럼의 크기를 늘릴 수는 있지만 줄이지는 못한다. 이는 기존의 데이터가 훼손될 수 있기 때문이다.
해당 컬럼이 NULL 값만 가지고 있거나 테이블에 아무 행도 없으면 컬럼의 폭을 줄일 수 있다.
해당 컬럼이 NULL 값만을 가지고 있으면 데이터 유형을 변경할 수 있다.
해당 컬럼의 DEFAULT 값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향을 미치게 된다.
해당 컬럼에 NULL 값이 없을 경우에만 NOT NULL 제약조건을 추가할 수 있다.
-
DROP
테이블, 뷰, 인덱스의 정의를 제거
기본 구문
DROP TABLE 테이블 이름 [CASCADE | RESTRICT]
DROP VIEW 뷰 이름 [CASCADE | RESTRICT]
DROP INDEX 인덱스 이름
데이터 조작어
SELECT
테이블이나 뷰에 접근해서 원하는 튜플이나 속성을 검색하는 명령어
기본 구문
SELECT [COUNT/SUM/AVG/MAX/MIN](속성)
FROM 테이블명
SELECT [ALL(*)/DISTINCT] 속성 리스트
FROM 테이블명
[WHERE 조건식]
{
속성 BETWEEN 값1 AND 값2
속성 IS (NOT) NULL
속성 IN (도메인값:집합형태)
속성 LIKE '문자'
}
[GROUP BY 속성][HAVING 조건식]
[ORDER BY 속성[ASC/DESC]]
- ALL(*) : 하나의 테이블에 있는 모든 속성 출력
- DISTINCT : 중복을 제거하는 옵션
- 집계함수
- COUNT : 해당 열이 있는 총 튜플의 개수
- SUM : 해당 열에 있는 데이터의 합
- AVG : 해당 열에 있는 데이터들의 평균
- MAX : 해당 열에 있는 데이터 중 최대값
- MIN : 해당 열에 있는 데이터 중 최소값
- BETWEEN : 값1과 값2 사이에 해당하는 조건
- IS (NOT) NULL : 값이 NULL일 경우(아닐 경우) 조건
- IN : 연산자는 조건의 범위를 지정하는 데 사용된다. 값은 콤마( , )로 구분하여 괄호 내에 묶으며, 이 값 중에서 하나 이상과 일치하면 조건에 맞는 것으로 평가
- LIKE : 문자열 연산으로 사용되며 부분적으로 일치하는 값을 검색(숫자로 되어있는 필드는 사용 불가)
- ‘_‘(하이픈) : 한 문자의 대표 문자
- ’%’(퍼센트) : 모든 문자의 대표 문자
- 예시)
‘유__’ : 문자 ‘유’로 시작하는 3글자 검색
‘유%’ : 문자 ‘유’로 시작되는 모든 문자열 검색
- GROUP BY : 그룹 지정, 조건식으로 HAVING 문법 사용
- ORDER BY : 정렬 검색, [ASC: 오름차순 / DESC : 내림차순]
INSERT
원하는 테이블에 원하는 튜플을 삽입시키는 연산
기본 구문
INSERT INTO 테이블명(삽입시킬 속성들)
VALUES(삽입시킬 속성에 삽입될 실제 값들)
UPDATE
테이블에서 원하는 속성값을 변경시키는 연산
기본 구문
UPDATE 테이블명 SET 속성=값 [WHERE 조건식]
DELETE
원하는 테이블에서 원하는 레코드를 삭제시키는 연산
기본 구문
DELETE FROM 테이블 [WHERE 조건식]
데이터 제어어
GRANT
사용자에 따라서 접근할 수 있는 DB데이터와 사용할 수 있는 기능을 제한
기본 구문
GRANT 권한(ALL PRIVILEGES/SELECT/UPDATE/INSERT ...) ON 데이터베이스.테이블
TO '아이디'@'호스트' IDENTIFIED BY '비밀번호' WITH GRANT OPTION
FLUSH PRIVILEGES;
- WITH GRANT OPTION : 권한을 할당받은 유저가 GRANT 명령어도 사용할 수 있는 권한을 가지게 된다. 권한의 해제는 REVOKE GRANT OPTION 명령어를 사용한다.
REVOKE
REVOKE 권한 ON 데이터베이스.테이블 FROM 사용자
댓글남기기