SELECT 'Hello, World';
The Era of Data
2020년대 IT의 거대한 흐름을 꼽으라면 빅데이터와 AI가 가장 먼저 꼽힙니다. 이 두 IT 트렌드의 공통점은 바로 '데이터(Data)'인데요. 데이터를 다루는 기술, 처리할 수 있는 양이 엄청나게 발전하면서 이론적으로만 가능했던 인공지능과 빅데이터를 이용한 예측 모델링이 가능해졌습니다.
그러나 우리는 컴퓨터의 첫 시작부터 데이터와 함께했습니다. 아주 예전부터 데이터는 우리에게 중요한 존재였으며, 데이터를 처리하는 방법은 예전부터 있어왔습니다. 대표적으로 사용목적이 같은 데이터를 모아 체계적으로 구축한 데이터의 집합인 데이터베이스(DB, Database)가 있습니다. 그렇다면 데이터의 집합인 데이터베이스를 다루는 도구도 있어야겠죠? 그 도구가 바로 '데이터베이스 관리 시스템(DBMS, Database Management System)'입니다.
여러 데이터베이스 관리 시스템이 있지만 우리에게 그나마 익숙한건 MS사의 Acess가 아닐까 합니다.
엑세스 안에 있는 데이터가 엑셀의 데이터와 굉장히 비슷한 형태를 가지고 있습니다. 이런 형태의 데이터베이스(이하, DB)를 관계형 데이터베이스(Relational database)라 합니다.
데이터베이스는 데이터를 어떤 형태로 구성해 저장했는지에 따라 종류가 나뉩니다. 관계형 데이터베이스는 데이터베이스 중에서 가장 많은 비중을 차지합니다. 위에서 보듯이 행(row)과 열(column)로 구성된 테이블(table) 간의 관계를 설정하여 데이터를 관리합니다. 스프레드시트와 매우 비슷하죠.
주류를 이루는 관계형 데이터베이스를 다루는 가장 대표적인 프로그래밍 언어가 SQL(Structured Query Language)입니다.
SQL은 '구조화 질의 언어'라는 특이한 이름을 가지고 있는데요. 왜 이런 이름을 가지게 되었는지 살펴보면서 SQL의 개념, 장점, 구조 등을 알아보겠습니다.
1. SQL(Structured Query Langauge)의 개념
SQL의 단어 뜻 부터 살펴보겠습니다.
SQL은 관계형 데이터베이스 관리 시스템(이하 RDBMS, Relational Database Management System)을 질의(명령)을 통해 제어하는 프로그래밍 언어입니다. 일반적인 프로그래밍 언어와 제어방법이 비슷하지만, 질문 형태로 선언하여 데이터 베이스를 조작합니다.
따라서, SQL은 HTML, CSS와 같이 특수 분야 언어(Domain-specific language)에 속합니다. 관계형 데이터베이스 영역에서만 쓰이는 데이터베이스용 프로그래밍 언어입니다.
1970년대에 도널트 D. 트럼플린이 IBM 시스템에 적용하기 위해 개발했고, 1980년대에 미국 ANSI(미국 표준협회, American National Standards Institute)와 ISO(국제 표준화 기구, International Organization for Standardization)에서 데이터베이스용 언어의 표준으로 지정되었습니다. 이후 표준 문법을 ISO의 위원회에서 지속적으로 업데이트해 발표하고 있습니다. 다만, SQL을 실제 프로그램에서 구현하는 경우 꼭 표준을 지켜야 하는 것은 아닙니다. 세부적인 부분은 각 SQL 프로그램마다 다를 수 있습니다.
2. SQL(Structured Query Langauge)의 구조와 사용법
SQL은 위와 같이 테이블 형태로 구성된 관계형 데이터베이스에 사용하는 언어라고 하였습니다. 데이터베이스 내부에 있는 데이터, 테이블, 칼럼, 레코드, 키를 쿼리(질의, Query)를 통해 조작합니다. 관계형 데이터베이스는 다음과 같이 구성되어 있습니다.
- 데이터(data): 각 항목에 저장되는 값입니다.
- 테이블(table; 또는 relation) : 사전에 정의된 열의 데이터 타입대로 작성된 데이터가 행으로 축적됩니다.
- 칼럼(column; 또는 field) : 테이블의 한 열을 가리킵니다.
- 레코드(record; 또는 tuple) : 테이블의 한 행에 저장된 데이터입니다.
- 키(key) : 테이블의 각 레코드를 구분할 수 있는 값입니다. 각 레코드마다 고유한 값을 가집니다. 기본키(primary key)와 외래키(foreign key) 등이 있습니다.
관계형 데이터베이스를 다루는 대표적인 SQL 질의 명령어(Query command)를 보겠습니다.
거의 영어와 같군요! 이걸 직접 사용해보겠습니다.
SELECT customers.name
FROM customers
WHERE customers.countrys = 'Korea'
위 예제를 풀어 설명해보면
SELECT customers.name → customers 테이블 안에 있는 name 칼럼을 선택합니다.
FROM customers → customers 테이블에서
WHERE customers.countrys = 'Korea' → customers안에 있는 countrys 칼럼 중 Korea와 일치하는 데이터만!
즉, customers 테이블에 있는 countrys 칼럼 중 Korea와 일치하는 name 칼럼의 데이터만 선택하는 질의문입니다. SQL은 이렇게 질문을 하는 형태로 데이터를 골라냅니다. (SELECT는 return, WHERE는 조건문과 비슷하네요)
위 형태의 언어 요소를 분석해보겠습니다.
키워드(Keywords): SQL에서 미리 정의된 단어. (SELECT, COUNT, YEAR...)
식별자(Identifiers): 데이터 객체(테이블, 칼럼, 스키마 등)의 이름. 키워드와 같은 이름을 사용할 수 없음.
구분 식별자(Delimited identifier): 쌍따옴표로 감싼 식별자. 문자열 저장 가능. 키워드 같은 이름 가능함
절(Clauses): 선언문이나 쿼리의 구성요소. 영어의 절과 의미가 같음(동사 포함한 문장 구성 성분)
표현문(Expressions): 스칼라 값이나 테이블 생성 표현. 연산 명령으로 이해 가능
서술부(Predicates): SQL의 3-valued logic(3VL) (true/false/unknown)에 의해 평가 받을 수 있는 조건식
쿼리(Queries): 특정한 기준에 따라 데이터를 추출
선언문(Statements): 프로그램의 흐름, 연결, 세션, 트랙잭션 등에 영향을 끼칠 수 있는 하나의 문장. 여러 절로 구성되어 있음.
세미콜론(Semicolon): SQL에서 하나의 선언문을 끝낼 때 사용하는 경계
3. SQL(Structured Query Langauge)의 문법(Syntax)
SQL이 데이터베이스의 어떤 것을 조작할 수 있는지 정리해보겠습니다.
1. 데이터베이스 테이블 및 인덱스 구조 수정 (modifying database table and index structures)
2. 데이터 행 추가, 갱신, 삭제 (adding, updating and deleting rows of data; )
3. 데이터 베이스의 서브셋(부분 정보 집합) 취득 (retrieving subsets of information)
이렇게 저장, 수정, 삭제, 반환 등 다양한 기능을 질의를 통해 조작할 수 있습니다. SQL학습 시에는 이런 조작 기능을 분류하여 구분하기도 합니다. 분류에 따라 문법 키워드를 정리해보죠.
DDL(Data Definition Language): 데이터 객체(테이블 등)를 정의할 때 사용하는 언어
- CREATE: 테이블과 같은 데이터 객체 생성
- ALTER: 기존에 존재하는 데이터 객체의 구조 변경
- DROP: 데이터 객체 삭제
- TRUNCATE: 테이블 내의 모든 데이터 삭제(테이블은 남김)
- RENAME: 데이터 객체의 이름 새롭게 정의
DML(Data Manipulation Language): 데이터베이스에 데이터를 저장할 때 사용하는 언어
- INSERT INTO: 테이블 내 행 추가
- DELETE FROM: 테이블 내 행 삭제
- UPDATE: 테이블 내 행 수정
- MERGE: 여러 테이블 내 데이터 병합
- SELECT: 테이블 내 데이터 선택
DCL(Data Control Language): 데이터베이스에 대한 접근 권한과 관련한 문법
- GRANT: 하나 이상의 사용자에게 데이터 객체에 대한 작업을 수행할 수 있는 권한 부여
- REVOKE: 권한 부여 제거
TCL(Transaction Control Language): DML을 거친 데이터의 변경사항 저장 및 수정
- COMMIT: 트랜잭션(Transaction,쪼갤 수 없는 업무 처리의 최소 단위)의 데이터 변경을 영구 저장
- ROLLBACK: 마지막 COMMIT이나 ROLLBACK 이후의 모든 변경 사항을 삭제하고 변경 이전 상태로 유지
- SAVEPOINT: 현재의 트랙잭션을 작게 분할. ROLLBACK TO SAVEPOINT로 저장한 포인트로 ROLLBACK 가능
더 자세한 키워드는 아래에서 확인할 수 있습니다.
https://www.w3schools.com/sql/sql_ref_keywords.asp
SQL Keywords Reference
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com