[목차]
1. SQL이란?
2. SQL의 특징
3. DDL (Data Definition Language)
1. SQL이란?
SQL은 Structured Query Language의 줄임말로, 관계형 데이터베이스 시스템(RDBMS)에서 데이터를 관리, 처리하기 위해 설계된 프로그래밍 언어이다.
1970년대 IBM에서 SEQUEL(Structured English Query Language)이라는 이름으로 처음 개발되었으며, 후에 Structured Query Language로 다시 이름이 지어졌다.
SQL 문법의 종류는 다음 세 가지로 분류된다.
- Data Definition Language (DDL) : Schema definition (CREATE, ALTER, RENAME, DROP,...)
- Data Manipulation Language (DML) : SELECT, INSERT, UPDATE, DELETE
- Data Control Language (DCL) : Security, access controls
DML은 데이터를 관리하기 위한 언어이고, DDL은 릴레이션을 정의하기 위한 언어이며, DCL은 사용자별로 데이터를 관리하고 접근하는 권한을 다루는 언어이다.
2. SQL의 특징
1. 영어 문장과 비슷한 구문을 갖추고 있어 쉽게 배우고 사용할 수 있는 언어이다.
2. SQL은 데이터 연산에 대한 처리가 절차적으로 진행되지 않고, 데이터의 집합 단위로 처리된다. (Non-Procedural)
따라서, SQL 문장을 작성하는 사용자는 데이터가 어떻게 처리되는지는 알 필요가 없다는 장점이 있다.
3. 표준 SQL 문법이 존재해 DBMS 종류(Oracle, MSSQL, MySQL 등)에 얽매이지 않고 사용할 수 있다.
4. 릴레이션(relation), 튜플(tuple), 속성(attribute)과 같은 관계형 모델의 용어 대신 테이블(table), 행(row), 열(column)과 같은 일반적인 용어를 사용한다.
5. SQL은 기본적으로 대소문자를 구분하지 않는다. 다만 가독성을 위해서 주로 대문자를 사용하기도 하며, 간혹 서버 환경이나 데이터베이스 시스템에 따라 대소문자를 구분하기도 한다.
6. SQL 명령은 반드시 세미콜론(;)으로 끝나야 하고, 고유의 값은 따옴표(' ')로 감싸준다.
7. 한 줄 주석은 '--'를 앞에 붙여 사용하고, 여러 줄 주석은 /* */로 감싸준다.
3. DDL (Data Definition Language)
Data Definition Language, 데이터 정의 언어는 테이블과 인덱스 구조를 관리한다. 사용되는 구문들에는 어떤 것이 있는지 알아보자.
1. CREATE
먼저, 데이터베이스를 만드는 방법은 다음과 같다.
mysql> CREATE DATABASE db;
db라는 이름을 가진 데이터베이스를 생성한 모습이다. 올바르게 수행되었다면 'Query OK, 1 row affected (0.01sec)' 과 같은 문장이 출력될 것이다.
mysql> SHOW DATABASES
db라는 데이터베이스가 올바르게 생성된 걸 볼 수 있다.
SHOW라는 명령어는 데이터베이스나 테이블 목록 등 다양한 정보를 볼 때 사용한다. SHOW를 응용하여 여러 형태로 목록을 확인할 수 있지만, 지금은 데이터베이스나 테이블이 올바르게 생성되었는지 확인하는 데만 이용하자.
이제, db라는 데이터베이스로 이동하여 테이블을 만들어보자. 아래는 db 데이터베이스에 이동하는 방법이다.
mysql> USE db;
테이블을 생성하는 문법은 링크에 자세히 나와있다. 하지만 링크에는 복잡하고 다양한 방법까지 모두 소개하고 있기 때문에 우선 간단한 방법부터 먼저 알아보자.
구글에 'create table in mysql cheat sheet' 라고 검색하면 아래처럼 간단한 요약본 같은 것들이 많이 나온다. 이를 참고하면 기본적인 것들은 더 쉽게 이해할 수 있을 것이다.
table을 생성하는 문법은 다음과 같다.
CREATE TABLE 이름(
c1 datatype(length)
c2 datatype(length)
...
PRIMARY KEY(c1)
)
'이름'에는 원하는 테이블 이름을 넣어준다. 그리고 c1, c2, ... 등에는 열(column)의 이름을 적어주고, datatype은 해당 열의 데이터 형식을 지정해준다. 그리고 PRIMARY KEY는 테이블의 각 열을 유일하게 구별할 수 있는 열을 지정한다.
해당 열은 값이 중복될 수 없게 된다.
datatype에는 다양한 자료형이 있기 때문에 자세한 설명은 생략하고 이 링크로 대체하겠다.
이제 실제 테이블을 생성해보자.
테이블의 형태는 다음 표와 같은 형태로 생성하려고 한다.
Id | Name | Age | Country | Job |
mysql> CREATE TABLE tb(
Id INT(11) NOT NULL AUTO_INCREMENT,
Name VARCHAR(50) NOT NULL,
Age INT(150) NOT NULL,
Country VARCHAR(50) NOT NULL,
Job VARCHAR(50) NULL,
PRIMARY KEY(Id));
VARCHAR는 255 이하의 길이를 갖는 가변 문자열이다.
INT는 C/C++에서의 int와 동일하다. signed면 -2147183648 ~ 2147483647, unsigned면 0 ~ 4294967295의 범위를 갖는다. 그렇다면 괄호 안에 있는 11이란 값은 뭘까? 이는 INT 값의 범위가 아니다.
ZEROFILL 이라는 옵션이 있는 경우에, 괄호 안의 수보다 자릿수가 작은 경우, 남은 자릿수를 모두 0으로 채운다는 의미이다.
즉, 만약 INT(5)이고, 해당 열에 43이라는 값을 넣으면 00043이 되고, INT(8)이라면 00000043이 된다는 의미이다.
테이블을 생성하는 과정에서 크게 중요한 부분은 아니므로 이 정도만 이해하고 넘어가자.
NULL과 NOT NULL은 해당 열이 NULL값을 가질 수 있는지 없는지를 의미한다. Id나 이름, 나이, 나라는 반드시 존재하는 값이기 때문에 NOT NULL로, 직업은 없을 수도 있으니 NULL로 설정하였다.
DESC 명령어는 Describe의 줄임말로, 테이블의 구조를 볼 수 있다.
위의 사진처럼 테이블의 각 열의 데이터 타입과 같은 특징을 확인할 수 있다.
2. ALTER
ALTER 구문은 이미 존재하는 테이블을 수정하고 싶을 때 사용한다. 테이블의 이름을 변경하거나, 열(Column)을 추가, 변경, 삭제할 수 있다.
1) 열(Column) 추가 (ADD)
mysql> ALTER TABLE tb ADD COLUMN Hobby VARCHAR(50) NOT NULL;
기존의 테이블에 Hobby라는 이름의 열을 추가한 모습이다.
"ALTER TABLE [테이블] ADD COLUMN [열] [데이터 타입]"의 형태를 갖는다.
2) 열(Column) 변경 (MODIFY / CHANGE)
mysql> ALTER TABLE tb MODIFY COLUMN Hobby INT(11) NULL;
추가했던 Hobby 열의 속성을 변경시켜주었다. 데이터 타입을 VARCHAR(50)에서 INT(11)로, NOT NULL에서 NULL로 변경된 모습을 확인할 수 있다.
존재하지 않는 열을 수정하려고 시도하면 위와 같이 에러가 발생한다.
만약 열의 이름까지 변경하고 싶다면 MODIFY 대신에 CHANGE를 이용하면 된다.
"ALTER TABLE [테이블명] CHANGE COLUMN [기존 열] [새로운 열] [데이터 타입]"의 형태이다.
mysql> ALTER TABLE tb CHANGE COLUMN Hobby Hobby2 VARCHAR(50) NULL;
3) 열 삭제 (DROP)
열을 삭제하고 싶다면 DROP 명령어를 사용한다.
mysql> ALTER TABLE tb DROP COLUMN Hobby2;
4) 테이블 이름 변경
mysql> ALTER TABLE tb RENAME tb2
테이블 이름은 위와 같이 변경시켜줄 수 있다. 간단하므로 결과 화면은 생략하겠다.
3. RENAME
ALTER 명령어를 이용하지 않고 RENAME만으로도 테이블의 이름을 변경해줄 수 있다. 위의 코드와 동일하게 수행된다.
mysql> RENAME TABLE tb TO tb2
4. DROP
DROP을 이용하여 테이블이나 데이터베이스 자체를 삭제할 수도 있다.
mysql> DROP DATABASE dp;
mysql> DROP TABLE tb;
PC로 보시는 것을 권장합니다.
피드백은 언제나 환영입니다. 댓글로 달아주세요 ^-^
'Computer Science > 데이터베이스(DB)' 카테고리의 다른 글
[DB/SQL] 6. 집계 함수(Aggregate Function), GROUP BY, HAVING (0) | 2021.07.06 |
---|---|
[DB/SQL] 5. DML(Data Manipulation Language) - UPDATE, DELETE (0) | 2021.06.16 |
[DB/SQL] 4. DML(Data Manipulate Language) - INSERT, SELECT (1) | 2021.06.11 |
[DB] 2. Relational Algebra (관계 대수) (1) | 2021.06.06 |
[DB] 1. Relational Model (관계형 모델) (6) | 2021.05.27 |