Structured Query Language의 줄임말로, 관계형 데이터베이스 시스템 (RDBMS)에서 데이터를 관리, 처리하기 위해 설계된 프로그래밍 언어이다.
SQL 문법의 종류는 다음 세가지 종류로 구분된다
DML은 데이터를 관리하기 위한 언어이고, DDL은 릴레이션을 정의하기 위한 언어이며, DCL은 데이터 관리를 접근하기 위한 언어이다
테이블과 인덱스 구조를 관리
데이터베이스를 만드는 명령어
CREATE DATABASE db;
이미 존재하는 테이블을 수정하고 싶을 때 사용. 테이블의 이름을 변경하거나, 열(Column)을 추가, 변경, 삭제할 수 있다.
mysql> ALTER TABLE tb ADD COLUMN Hobby VARCHAR(50) NOT NULL;
mysql> ALTER TABLE tb MODIFY COLUMN Hobby INT(11) NULL;
mysql> ALTER TABLE tb DROP COLUMN Hobby2;
mysql> ALTER TABLE tb RENAME tb2
ALTER 명령어를 이용하지 않고 RENAME만으로도 테이블의 이름을 변경해줄 수 있다.
mysql> RENAME TABLE tb TO tb2
DROP을 이용하여 테이블이나 데이터베이스 자체를 삭제할 수 있도 있다.
mysql> DROP DATABASE dp;
mysql> DROP TABLE tb;
사용자가 데이터베이스에 대해 검색, 등록, 삭제 등을 할 수 있도록 하는 데이터베이스 언어이다.
데이터를 테이블에 추가할 때 사용한다. 입력하지 않은 값은 자동으로 NULL이 입력된다. 만약 입력하지 않은 열이 NOT NULL 속성을 가지고 있다면 default value를 가지고 있지 않다는 에러가 발생한다.
mysql> INSERT INTO tb (Id, Name, Age, Country) VALUES (1, 'Kim', 23, 'Korea');
mysql> INSERT INTO tb (Name, Age, Country) VALUES ('John', 20, 'USA')
데이터 조회
- FROM,WHERE
- AND,OR,NOT
- 패턴 매칭(LIKE)
- ORDER BY
- DISTINCT
데이터베이스의 테이블에서 데이터를 갱신하는 기능
셀 단위로 데이터를 갱신할 수 있고, 만약 테이블이 존재하지 않은 열을 지정하면 에러가 발생한다.
UPDATE table_name SET column1='data1', column2='data2', ... [WHERE condition]
테이블에서 조건을 만족하는 행을 지우고 싶을 때 사용
mysql> DELETE FROM table_name [WHERE condition];
집계함수는 여러 행으로부터 하나의 결괏값을 반환하는 함수이다. SELECT 구문에서만 사용되며, 이전에 다룬 기본 함수들이 행(row)끼리 연산을 수행했다면, 집계 함수는 열(Column)끼리 연산을 수행한다.
주로 평균, 합, 최대, 최소 등을 구하는 데 사용
특정 열(Column)의 행의 개수를 세는 함수이다. Count(*)로 작성하면 테이블에 존재하는 행의 개수가 반환되고, 특정 열에 대해서 Count를 수행하면 해당 열이 NULL이 아닌 행의 개수를 반환한다.
mysql> SELECT COUNT(*) FROM tb;
mysql> SELECT COUNT(Name) FROM tb;
mysql> SELECT COUNT(Name) AS name_cnt FROM tb;
mysql> SELECT COUNT(Name) AS "name cnt" FROM tb;
mysql> SELECT COUNT(Job) FROM tb;
MIN은 최소, MAX는 최대값을 구하는 함수. 사용법은 Count와 동일
mysql> SELECT MAX(Age) FROM tb;
mysql> SELECT MIN(Age) FROM tb;
mysql> SELECT MAX(Age) max_age FROM tb;
AVG는 선택한 열(Column)의 평균을 계산하며, SUM은 선택한 열(Column)의 합을 계산
숫자값에 대해서만 연산이 가능하며, NULL은 무시하고 계산한다.
따라서 NULL을 0으로 취급하며 평균을 구하고 싶다면 NULL을 0으로 지정하는 작업을 추가로 해야한다
GROUP BY 키워드를 이용하면 테이블의 일부 행을 대상으로 집계 함수를 사용할 수 있다.
mysql> SELECT Country, SUM(Age) FROM tb GROUP BY Country;
HAVING절은 이전의 WHERE와 비슷하게 작용
GROUP BY와 함께 쓰이는 조건문이라고 생각하면 되는데, WHERE에서는 집계 함수를 사용할 수 없는 반면 HAVING은 집계 함수와 함께 사용 가능하다는 장점이 있다.