SQL: 두 판 사이의 차이

youngwiki
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)
);

각주

  1. char 타입과 varchar 타입을 비교할 경우, 비교 전에 varchar 값에 공백이 덧붙여져 길이를 맞출 것이라고 기대할 수 있지만, 이 작업이 실제로 수행되는지는 데이터베이스 시스템에 따라 다르다. 따라서 varchar를 권장한다.