익명 사용자
로그인하지 않음
계정 만들기
로그인
youngwiki
검색
SQL 문서 원본 보기
youngwiki
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
원본 보기
역사
←
SQL
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
상위 문서: [[데이터베이스 시스템]] ==개요== '''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 타입 값을 비교할 때, 길이가 다르다면 짧은 쪽에 자동으로 공백이 덧붙여져 비교 전에 길이가 동일해진다.<ref>char 타입과 varchar 타입을 비교할 경우, 비교 전에 varchar 값에 공백이 덧붙여져 길이를 맞출 것이라고 기대할 수 있지만, 이 작업이 실제로 수행되는지는 데이터베이스 시스템에 따라 다르다. 따라서 varchar를 권장한다.</ref> ===Basic Schema Definition=== SQL 관계(relation)는 create table 명령어를 사용하여 정의한다. create table 명령의 일반적인 형식은 다음과 같다: <syntaxhighlight lang="sql"> create table r ( A1 D1, A2 D2, ..., An Dn, ⟨무결성 제약조건1⟩, ..., ⟨무결성 제약조건k⟩ ); </syntaxhighlight> 위에서 r은 관계의 이름이고, 각 Ai는 관계 r의 스키마의 있는 속성의 이름, Di는 Ai에 대한 도메인([[Relational Model#Relational Schema와 Instance|domain]])에 해당한다. 또한 SQL 코드 끝의 세미 콜론은 create table 뿐 아니라 많은 다른 SQL 명령어에 대해서도 선택적으로 사용된다. <br>SQL은 또한 다양한 무결성 제약 조건(integrity constraints)을 지원한다. 이는 아래와 같다: * '''[[Relational Model#Keys|primary key]] (Ap1, Ap2,...Apm)''': 이는 속성 Ap1, Ap2,...Apm이 해당 관계의 primary key임을 의미한다. ** primary key는 널 값을 가질 수 없고, unique해야 한다. 즉, 두 튜플이 기본 키 속성들에 대해 동일한 값을 가질 수 없다. * '''[[Relational Model#Keys|foreign key]] (Af1, Af2,...,Afn)''': 이는 속성 Af1, Af2,...,Afn이 해당 관계의 foreign key임을 의미한다. ** 이때, 어느 튜플의 foreign key에 해당하는 값은 다른 관계 s의 primary key 속성들의 값에 존재해야한 한다. * '''not null''': 속성에 대한 not null 제약 조건은 그 속성에 널 값이 허용되지 않음을 명시한다. 이때 SQL은 무결성 제약 조건을 위반하는 데이터베이스의 갱신은 어떠한 경우에도 허용하지 않는다. 예를 들어, 아래 명령어는 데이터베이스 안에 instructor라는 관계를 생성한다: <syntaxhighlight lang="sql"> create table instructor ( ID char(5), name varchar(20) not null, dept_name varchar(20), salary numeric(8,2), primary key (ID), foreign key (dept_name) references department ); </syntaxhighlight> ===Updates to tables=== SQL에서 테이블을 업데이트 하기 위해서는 아래와 같은 명령어들을 사용한다.<br> '''Insert''': r 테이블에 새로운 튜플(행)을 추가하는 명령이다. <syntaxhighlight lang="sql"> insert into r values (A1, A2,..., An); </syntaxhighlight> '''Delete''': r 테이블에서 모든 튜플을 삭제한다. <syntaxhighlight lang="sql"> delete from r </syntaxhighlight> '''Drop table''': r 테이블을 완전히 삭제하여 스키마는 물론 모든 데이터를 완전히 삭제한다. <syntaxhighlight lang="sql"> drop table r </syntaxhighlight> '''Alter''': 테이블의 구조를 변경한다.<br> 아래는 테이블 r에 새로운 속성 A를 추가하며, D는 해당 속성의 자료형을 의미한다. 또한 이미 존재하는 모든 튜플은 새로 추가된 속성 A에 null 값을 자동으로 가진다. <syntaxhighlight lang="sql"> alter table r add A D </syntaxhighlight> 아래는 테이블 r에서 속성 A를 제거한다. 하지만 많은 데이터베이스는 에러의 위험성 때문에 이를 지원하지 않는다. <syntaxhighlight lang="sql"> alter table r drop A </syntaxhighlight> ==[[Structure of SQL Queries]]== 자세한 내용은 [[Structure of SQL Queries]] 문서를 참조하십시오. ==각주== [[분류:데이터베이스 시스템]]
SQL
문서로 돌아갑니다.
둘러보기
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록