에스큐엘
에스큐엘(SQL)은 Structured Query Language의 약자로서, 구조화 질의어를 말한다. 주로 '에스큐엘'이라고 읽지만, 시퀄이라고 읽는 경우도 있고, SQL의 최초 이름이 SEQUEL(Structured English QUEryl Language)이었기 때문에 시큐얼로 읽는 경우도 있으나 표준은 에스큐엘로 읽는 것을 권고한다.[1] SQL 기반의 관계형 데이터베이스 관리 시스템(RDBMS)에는 오라클(Oracle), 마이에스큐엘(MySQL), 엠에스에스큐엘(MS-SQL), 티베로(Tibero), 큐브리드(Cubrid) 등이 있다. SQL은 데이터베이스 관리 시스템(RDBMS)에서 데이터를 관리하기 위해 고안되었다. 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 사용된다. 데이터베이스 관련 프로그램들은 상당수 SQL을 표준으로 채택하고 있다.[2]
목차
특징
SQL은 문법이 영어 문법과 흡사하기 때문에 배우고 사용하기 쉬운 언어라는 특징이 있다. 초심자도 쉽게 접근할 수 있다. 절차적 개별 단위로 처리되는 프로그래밍 언어와는 다르게 데이터의 집합 단위로 처리된다. 데이터가 어떻게 처리되는지 과정은 SQL 문장 작성자는 신경 쓰지 않아도 된다. 하지만 SQL이 시스템에 미치는 영향은 크기 때문에 고급 SQL이나 SQL 튜닝의 중요성은 점점 커지고 있다.[1] 또한 SQL은 표준 SQL 문장이 존재한다. 1986년부터 ANSI/ISO를 통해 표준화되고 정의되었다. 일부 구체적인 용어는 다를 수 있지만 대부분의 관계형 데이터베이스에서 ANSI/ISO 표준을 최대한 따르기 때문에 다른 데이터베이스를 사용하더라도 상당 부분 기존 지식을 재사용할 수 있고, ANSI/ISO SQL-99, SQL-2003 이후 기준이 적용된 SQL이라면 프로그램의 이식성을 높이는 데도 공헌한다.[1] 이와 같이 DBMS의 종류에 얽매이지 않고 사용할 수 있다는 점도 SQL의 특징 중 하나이다. [3]
RDBMS
관계형 데이터베이스 관리 시스템(Relational Database Management System)이라고 한다. 관계형 모델을 기반으로 하는 데이터베이스 관리 시스템이다. 현재 사용되는 대부분의 데이터베이스는 관계형 모델을 기반으로 한다. RDBMS는 SQL을 비롯한 현대 데이터베이스 시스템들의 기준이 된다. 데이터들을 행과 열로 이루어진 테이블이라는 데이터베이스 객체에 저장한다. 데이터베이스에서 여러 개의 테이블이 있을 수 있으며, 테이블은 각자 이름을 가진다. 테이블은 또다시 한 열을 나타내는 필드와 한 행을 나타내는 레코드로 나뉜다.[2]
테이블
데이터베이스에는 데이터들이 들어있다. 별도의 정리 작업을 하지 않은 데이터의 경우 입력한 본인이 아니라면 알아보기가 힘들다. 그래서 데이터를 다른 사용자들도 알아보고 도움이 될 수 있도록 정리 작업이 필요하다. 데이터가 저장되는 형태는 기본 단위인 테이블의 형태로 저장된다. 테이블이란 특정한 주제와 목적을 가지고 만들어지는 데이터의 집합이다.
국가 | 수도 |
---|---|
한국 | 서울 |
중국 | 베이징 |
일본 | 도쿄 |
미국 | 워싱턴 |
예를 들어 이런 표를 보면 국가, 수도 가 각각의 칼럼이 되고, 각 국가의 정보는 2개의 칼럼(Column)을 가지는 행으로 데이터화되어 테이블에 저장된다. 테이블에는 등록된 자료들이 있으며, 자료를 삭제하지 않는 한 지속적으로 유지된다. 데이터를 입력하지 않으면 테이블은 만들어질 때 받은 속성 그대로 유지하면서 존재하게 된다.
- 칼럼 : 테이블에서의 세로방향. 하나하나의 특정 속성
- 행 : 테이블에서의 가로방향. 연결된 데이터[1]
테이블은 데이터를 저장하는 객체로서 관계형 데이터베이스의 기본 단위이다. 테이블의 데이터는 칼럼과 행의 2차원 구조로 나타내는데 이대 세로 방향을 칼럼(Column), 가로 방향을 행(Row)라고 하며 칼럼과 행이 겹치는 공간을 필드(Field)라고 한다.
데이터를 테이블에 저장할 때 모든 데이터를 하나의 테이블로 저장하지 않는다. 여러 개의 테이블에 분할하여 저장하고 나뉜 테이블은 칼럼의 값에 의해 연결된다. 이것은 데이터의 불필요한 중복을 줄이기 위한 정규화(Normalization)라고 한다. 정규화는 데이터 입력, 수정, 삭제시 발생할 수 있는 이상 현상을 방지하기 위해 매우 중요한 프로세스이다.
선수번호 | 이름 | 팀 코드 | 포지션 | 등번호 | 키 |
---|---|---|---|---|---|
1 | 김남일 | K03 | DF | 33 | 177 |
2 | 박지성 | K07 | MF | 7 | 178 |
3 | 이영표 | K02 | MF | 22 | 176 |
<선수 테이블>
팀 코드 | 팀 명 | 연고지 |
---|---|---|
K03 | 스틸러스 | 포항 |
K07 | 드래곤즈 | 전남 |
K02 | 블루윙즈 | 수원 |
<구단 테이블>
각 행을 한 가지 의미로 특정할 수 있는 한 개 이상의 칼럼을 기본키(Primary Key)라고 한다. <선수 테이블>의 선수 번호와 <구단 테이블>의 팀 코드는 각각 기본키가 되고, <선수 테이블>의 팀 코드는 <구단 테이블>의 팀 코드가 된다. 이처럼 다른 테이블의 기본 키로 사용되면서 관계를 연결하는 칼럼을 외부키(Foreign Key)라고 한다.
데이터 관리
SQL은 데이터베이스 데이터를 관리하는 것을 목적으로 만든 프로그래밍 언어이다. SQL로는 데이터들을 관리할 수 있다.
데이터 조작(DML)
- 데이터 조작어(Data Manipulation Language). 데이터를 조회, 저장, 삭제할 때 사용할 수 있다. 저장의 경우 입력과 수정 두 가지로 다시 나눌 수 있다.
- 조회 : SELECT
- 삭제 : DELETE
- 저장 : INSERT, UPDATE
데이터 정의(DDL)
- 데이터 정의어(Data Definition Language). 테이블과 같은 데이터 구조를 정의하는데 사용한다. 이를 데이터베이스 객체라고 한다. 데이터베이스 객체는 데이터베이스, 인덱스, 테이블, 뷰, 트리거 등이 있다.
- CREATE, DROP, ALTER, TRUNCATE
데이터 제어(DCL)
- 데이터 제어어(Data Control Language). 데이터베이스에 들어있는 데이터에 접근을 제어(객체를 사용하도록 권한을 주고 회수) 한다.
- GRANT, REVOKE
SQL 문
기본적으로 데이터베이스에서 행해지는 대부분의 명령은 SQL 문으로 실행된다.
- SELECT * FROM Customers;
위 SQL 문은 Customers라는 테이블의 모든 레코드를 선택하는 명령이다. 이때 SQL 문에서는 대소문자를 구분하지 않는다. select 와 SELECT는 같은 명령이다. 또한 각각의 SQL 문의 끝에 ;를 붙여서 문장을 구분한다.
중요한 SQL 명령어
- SELECT - 데이터 추출
- INSERT INTO - 새로운 데이터 삽입
- UPDATE - 데이터 갱신
- DELETE - 데이터 삭제
- CREATE DATABASE- 새로운 데이터베이스 생성
- ALTER DATABASE - 데이터베이스 변경
- CREATE TABLE - 테이블 생성
- ALTER TABLE - 테이블 변경
- DROP TABLE - 테이블 삭제
- CREATE INDEX- 인덱스 생성
- DROP INDEX - 인덱스 삭제
NoSQL
데이터베이스 기술에서는 두 가지 타입이 있다. SQL 타입과 NoSQL 타입이다. SQL의 경우에는 위에서 계속 설명한 타입이고 아주 오래전부터 사용되었던 방식이다. NoSQL 타입은 Non-SQL 혹은 Not Only SQL이라고 부른다. 관계형 테이블로 서로 이루어진 SQL과 달리 데이터 저장을 위한 메커니즘이 다르다. 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 구성되지 않은 데이터인 비정형 데이터(Unstructured Data)를 저장하기에 좋다.
NoSQL과 차이점
SQL과 NoSQL은 서로 반대의 개념이 아니다.[4] 두 가지 타입을 동시에 모두 사용하는 회사도 많다. 한 가지 타입만으로는 모든 경우를 만족시킬 수 없는 경우가 많기 때문이다. 급격하게 데이터가 방대해질 경우라면 NoSQL이 도움이 될 수 있다.
SQL의 경우에는 시스템이 커져가면 DB를 증설하게 된다. 서로 관계를 가진 테이블들이 수평으로 점차 커져간다. 이는 훨씬 더 고성능의 DB시스템을 필요로 하게 된다는 뜻이다. 이렇게 될 경우 관리가 굉장히 어려워질 수 있다.
NoSQL의 경우는 고성능의 DB 시스템을 갖추지 않고도 여러 DB 시스템을 추가할 수 있다. 이는 숫자를 무한대로 늘려갈 수 있다는 것을 뜻한다. 여러 DB 시스템을 갖출 수 있다는 것은 SQL과 비교해 장점이 될 수 있다. 또한 스타트업처럼 짧은 시간 안에 DB 구조 등이 자주 변하는 형태라면 NoSQL이 적합하다고 볼 수 있다.
반면 SQL의 경우에는 DB 스키마를 한번 정하게 되면 데이터 구조의 완전성을 보장하지만 유연하지 않다. DB 구조 등이 자주 변하지 않는 금융 산업과 같은 경우에는 SQL이 적합하다고 볼 수 있다.
각주
- ↑ 1.0 1.1 1.2 1.3 〈D가이드 관계형 데이터베이스 개요〉, 《DB가이드넷》
- ↑ 2.0 2.1 Che1, 〈SQL 이란?〉, 《깃허브》, 2017-10-07
- ↑ ignocide, 〈SQL 특징 및 구성〉, 《블로거》, 2014-04-13
- ↑ 쿠우보이, 〈SQL? NoSQL?〉, 《브런치》, 2017-10-19
참고자료
- Che1, 〈SQL 이란?〉, 《깃허브》, 2017-10-07
- ignocide, 〈SQL 특징 및 구성〉, 《블로거》, 2014-04-13
- 쿠우보이, 〈SQL? NoSQL?〉, 《브런치》, 2017-10-19
- 〈D가이드 관계형 데이터베이스 개요〉, 《DB가이드넷》
같이 보기
- 데이터베이스(DB)
- 데이터베이스 관리 시스템(DBMS)
- 관계형 데이터베이스 관리 시스템(RDBMS)
- 노에스큐엘(NoSQL)
- 마이에스큐엘(MySQL)
- 데이터베이스 조작어(DML)
- 데이터베이스 정의어(DDL)
- 데이터베이스 제어어(DCL)
- 비정형데이터(Unstructured Data)