다른 명령
| 37번째 줄: | 37번째 줄: | ||
===Basic Schema Definition=== | ===Basic Schema Definition=== | ||
SQL 관계(relation)는 create table 명령어를 사용하여 정의한다. create table 명령의 일반적인 형식은 다음과 같다: | |||
<syntaxhighlight lang="sql"> | |||
create table r ( | |||
A1 D1, | |||
A2 D2, | |||
..., | |||
An Dn, | |||
⟨무결성 제약조건1⟩, | |||
..., | |||
⟨무결성 제약조건k⟩ | |||
); | |||
위에서 r은 관계의 이름이고, 각 Ai는 관계 r의 스키마의 있는 속성의 이름, Di는 Ai에 대한 도메인([[Relational Model#Relational Schema와 Instance|domain]])에 해당한다. | |||
</syntaxhighlight> | |||
예를 들어, 아래 명령어는 데이터베이스 안에 department라는 관계를 생성한다: | |||
<syntaxhighlight lang="sql"> | |||
create table department ( | |||
dept_name varchar(20), | |||
building varchar(15), | |||
budget numeric(12,2), | |||
primary key (dept_name) | |||
); | |||
</syntaxhighlight> | |||
==각주== | ==각주== | ||
[[분류:데이터베이스 시스템]] | [[분류:데이터베이스 시스템]] | ||
2025년 4월 1일 (화) 11:21 판
상위 문서: 데이터베이스 시스템
개요
SQL(Stuctured Query Language)은 가장 널리 자용되는 데이터베이스 질의(query) 언어이다. SQL은 SQL query language라고 많이 불리지만, 단순히 데이터베이스의 질의를 하는 것 이상의 일, 데이터의 구조를 정의하고, 데이터베이스의 데이터를 수정하며, 보안 제약 조건을 명시할 수 있다.
SQL의 구성
SQL은 아래와 같은 여러 부분으로 구성된다:
- DDL(Data Definition Language): SQL DDL은 관계 스키마를 정의하고, 관계를 삭제하며, 관계 스키마를 수정하는 명령어들을 제공한다.
- DML(Data Manipulation Language): SQL DML은 데이터베이스에서 정보를 질의하고, 튜플을 삽입하고, 삭제하고, 수정하는 기능을 제공한다.
- 무결성(Integrity): SQL DDL에는 데이터베이스에 저장된 데이터가 반드시 만족해야 하는 무결성 제약 조건을 명시하는 명령어가 포함되어 있다.
- View definition: SQL DDL에는 뷰를 정의하는 명령어가 포함되어있다.
- Transaction protocol: SQL은 transaction의 시작점과 종료점을 지정하는 명령어들을 포함한다.
- Embedded SQL and dynamic SQL: 임베디드 SQL과 동적 SQL은 SQL 문장이 C, C++, Java와 같은 범용 프로그래밍 언어 안에 어떻게 포함되는지를 정의한다.
- 권한 부여(Authorization): SQL DDL은 관계와 뷰에 대한 접근 권한을 명시하는 명령어들을 포함한다.
SQL data definition
SQL DDL은 relation들에 대한 정보를 구체화한다. 이때 구체화되는 항목은 아래와 같다:
- 각 관계의 스키마(schema)
- 각 속성(attribute)에 연결된 값들의 자료형
- 무결성 제약 조건(The integrity constraints)
- 각 관계에 대해 유지되는 인덱스들의 집합
- 각 관계에 대한 보안 및 권한 부여 정보
- disk 상에서 각 관계의 physical storage structure
Basic types for SQL
SQL 표준은 여러 가지 내장 타입들을 지원하며 다음이 포함된다:
- char(n): 사용자가 지정한 길이 n을 갖는 고정 길이 문자열
- varchar(n): 사용자가 지정한 최대 길이 n을 갖는 가변 길이 문자열
- int: 정수
- smallint: 작은 정수
- numeric(p, d): 사용자가 지정한 정밀도를 갖는 고정 소수점 숫자
- 이 숫자는 p개의 숫자(부호 포함)로 구성되며, 그 중 d개는 소수점 오른쪽에 위치한다.
- 예를 들어 numeric(3,1)은 44.5는 정확히 저장할 수 있지만, 444.5나 0.32는 이 타입의 필드에 정확히 저장할 수 없다.
- real, double precision: 기계 의존적인 정밀도를 갖는 부동 소수점 및 배정밀도 부동 소수점 숫자
- float(n): 정밀도 n자리 이상을 갖는 부동 소수점 숫자
각 자료형은 널(null) 값이라 불리는 특수한 값을 포함할 수 있다. 널 값은 존재할 수는 있으나 알려지지 않았거나, 전혀 존재하지 않을 수도 있는 누락된 값을 나타낸다. 또한, char 데이터 타입은 고정 길이 문자열을 저장한다. 예를 들어, 속성 A의 타입이 char(10)이라고 하자. 만약 이 속성에 문자열 "Avi"를 저장하면, 그 문자열은 길이를 10자로 맞추기 위해 7개의 공백이 문자열 뒤에 덧붙여진다. 반면에 속성 B의 타입이 varchar(10)이고, "Avi"를 저장하면, 공백이 덧붙여지지 않는다. 두 개의 char 타입 값을 비교할 때, 길이가 다르다면 짧은 쪽에 자동으로 공백이 덧붙여져 비교 전에 길이가 동일해진다.[1]
Basic Schema Definition
SQL 관계(relation)는 create table 명령어를 사용하여 정의한다. create table 명령의 일반적인 형식은 다음과 같다:
create table r (
A1 D1,
A2 D2,
...,
An Dn,
⟨무결성 제약조건1⟩,
...,
⟨무결성 제약조건k⟩
);
위에서 r은 관계의 이름이고, 각 Ai는 관계 r의 스키마의 있는 속성의 이름, Di는 Ai에 대한 도메인([[Relational Model#Relational Schema와 Instance|domain]])에 해당한다.
예를 들어, 아래 명령어는 데이터베이스 안에 department라는 관계를 생성한다:
create table department (
dept_name varchar(20),
building varchar(15),
budget numeric(12,2),
primary key (dept_name)
);
각주
- ↑ char 타입과 varchar 타입을 비교할 경우, 비교 전에 varchar 값에 공백이 덧붙여져 길이를 맞출 것이라고 기대할 수 있지만, 이 작업이 실제로 수행되는지는 데이터베이스 시스템에 따라 다르다. 따라서 varchar를 권장한다.