안녕하세요? Justkode 입니다. 오늘은 SQL에 대해서 간단하게 알아보는 시간을 가져보도록 하겠습니다. SQL은 Structured Query Language의 약자로, RDBMS의 데이터베이스를 주로 조회 하는데에 사용이 되는, 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어입니다. 여기서 설명 하는 문법들은 많은 내용을 담지 않고, SQL을 간략하게 설명 하기 위해, 간단한 코드 예제를 보여 줄 뿐이니, SQL Fiddle을 이용 하여 실제로 연습 하거나, 각 챕터마다 이론을 따로 공부 하는 것을 추천 드립니다.
(전에 작성 했던 글인 SQL 간단 문법 정리 의 수정본이라고 생각하셔도 될 정도로, 중복 되는 내용이 매우 많습니다. 참고 해 주세요.)
CREATE DATABASE 문은 말 그대로, DATABASE를 생성하기 위한 구문입니다. DATABASE는 내부에 여러 개의 TABLE을 가지고 있습니다.
Syntax
CREATE DATABASE 데이터베이스명;DB라는 이름을 가지는 DATABASE를 생성하는 예제입니다.
Example
CREATE DATABASE DB;USE문을 이용, 사용 하고자 하는 DATABASE를 선택 할 수 있습니다.
Syntax
USE 데이터베이스명;DB라는 DATABASE를 사용 하는 예제입니다.
Example
USE DB;USE문을 이용하여, DATABASE를 선택 한 이후, 해당 DATABASE에서 TABLE을 생성 할 수 있습니다. CREATE TABLE문을 이용합니다.
Syntax
CREATE TABLE 테이블명 (
필드명_1 타입_1,
필드명_2 타입_2,
필드명_3 타입_3,
...
);CREATE TABLE문을 이용하여, PLAYER 테이블을 생성하는 예제입니다. 만들어 지는 TABLE의 파라미터를 보면 속성-타입의 쌍이 있는 것을 볼 수가 있습니다. 이를 통해 속성과 해당 속성의 타입을 지정 해 줄 수 있습니다.
지정 할 수 있는 타입은 MySQL, PostgreSQL, Oracle SQL 등등 여러가지 RDBMS에 따라 다르게 사용 됩니다.
Example
CREATE TABLE PLAYER (
ID INT,
NAME VARCHAR(30),
POSITION VARCHAR(20),
AGE INT,
GOAL INT,
ASSIST INT
);각 필드에 제약 조건을 걸 수 있습니다.
NOT NULL : 해당 필드는 NULL 값이 불가능 합니다.UNIQUE : 해당 필드의 값은 테이블 내 해당 필드에서 유일해야 합니다.PRIMARY KEY : 해당 필드는 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가집니다.FOREIGN KEY : 해당 필드는 다른 테이블의 특정 필드 값과 일치해야 합니다.DEFAULT : 해당 필드는 기본값을 가집니다.CREATE TABLE 문을 작성하는 과정에서도 사용 가능합니다.
Syntax
CREATE TABLE 테이블명 (
필드명_1 타입_1 제약조건_1,
필드명_2 타입_2 제약조건_2,
필드명_3 타입_3 제약조건_3,
...
);CREATE TABLE문을 이용하여, 필드에 적절한 제약 조건이 들어간 PLAYER 테이블과 TEAM 테이블을 생성하는 예제입니다.
Example
CREATE TABLE TEAM (
ID INT PRIMARY KEY,
NAME VARCHAR(30) NOT NULL,
COUNTRY VARCHAR(20) DEFAULT "Korea"
);
CREATE TABLE PLAYER (
ID INT PRIMARY KEY,
NAME VARCHAR(30) NOT NULL,
POSITION VARCHAR(20),
COUNTRY VARCHAR(20) DEFAULT "Korea",
AGE INT,
GOAL INT DEFAULT 0,
ASSIST INT DEFAULT 0,
TEAM INT NOT NULL,
FOREIGN KEY (TEAM)
REFERENCES TEAM (ID)
);ALTER 문을 이용해 TABLE의 필드 수정 혹은 DATABASE의 문자 집합 및 콜레이션을 수정 할 수 있습니다.
ALTER DATABASE를 통해 DATABASE의 CHARACTER SET, COLLATE를 수정 할 수 있습니다.
Syntax
ALTER DATABASE 데이터베이스명 CHARACTER SET=문자집합이름;
ALTER DATABASE 데이터베이스명 COLLATE=콜레이션이름;DB 데이터베이스에 범용적으로 사용하는 utf8 문자 집합과 utf8_general_ci 콜렉션을 사용해 보겠습니다.
Example
ALTER DATABASE DB CHARACTER SET=uft8 COLLATE=utf8_general_ci;ALTER TABLE을 통해 TABLE의 필드들의 타입, 제약조건 수정 혹은 필드 추가 및 삭제 할 수 있습니다.
ADDDROPMODIFY COLUMNSyntax
ALTER TABLE 테이블이름 ADD 필드명 필드타입;
ALTER TABLE 테이블이름 DROP 필드명;
ALTER TABLE 테이블이름 MODIFY COLUMN 필드명 필드타입;ALTER TABLE을 이용하여, PLAYER 테이블에 ADD로 필드를 추가하고, DROP으로 필드를 제거하고, MODIFY COLUMN으로 제약조건을 추가해 보겠습니다.
Example
ALTER TABLE PLAYER ADD RATING FLOAT(3, 2) DEFAULT 0.00;
ALTER TABLE PLAYER DROP COUNTRY;
ALTER TABLE PLAYER MODIFY COLUMN AGE INT DEFAULT 20;DROP을 이용해 DATABASE나 TABLE을 삭제 할 수 있습니다.
Syntax
DROP DATABASE 데이터베이스명;
DROP TABLE 테이블명;한번 PLAYER 테이블과 DB 데이터베이스를 삭제 시켜 보겠습니다.
Example
DROP TABLE PLAYER;
DROP DATABASE DB;TRUNCATE TABLE문은 테이블 내의 스키마는 남겨놓고, 테이블 내의 데이터 만을 지우고자 할 때 사용합니다.
Syntax
TRUNCATE TABLE 테이블명;Example
TRUNCATE TABLE PLAYER;INSERT INTO문은 데이터를 삽입할 때 사용합니다. VALUES에 삽입 하려고 하는 데이터 들을 입력 하면 됩니다. 복수 입력 또한 가능합니다.
Syntax
INSERT INTO 테이블명(필드명_1, 필드명_2, 필드명_3, ...)
VALUES (필드값_1, 필드값_2, 필드값_3, ...), (필드값_1, 필드값_2, 필드값_3), ...;TEAM 테이블에 Tottenham Hotspur 을 추가 해 보겠습니다.
Example
INSERT INTO TEAM(ID, NAME, COUNTRY)
VALUES (1, "Tottenham Hotspur", "England");UPDATE문을 이용하여 데이터를 수정할 수 있습니다. UPDATE문으로 TABLE을 선택하고, SET문으로 원하는 데이터를 설정한 후, WHERE문으로 데이터 수정을 원하는 행을 선택할 수 있습니다.
Syntax
UPDATE 테이블명
SET 필드명_1=필드값_1, 필드명_2=필드값_2, ...
WHERE 필드명_1=필드값_1, 필드명_2=필드값_2, ...;TEAM 테이블에 넣어 놓은 Tottenham Hotspur의 이름을 토트넘 핫스퍼으로 수정 해 보겠습니다.
Example
UPDATE TEAM
SET NAME="토트넘 핫스퍼"
WHERE NAME="Tottenham Hotspur";DELETE문을 이용하여 데이터를 삭제할 수 있습니다. DELETE FROM문으로 TABLE을 선택하고, WHERE문으로 데이터 삭제를 원하는 행을 선택할 수 있습니다.
Syntax
DELETE FROM 테이블명
WHERE 필드명_1=필드값_1, 필드명_2=필드값_2, ...;TEAM 테이블에 넣어 놓은 토트넘 핫스퍼를 삭제 해 보겠습니다.
Example
DELETE FROM TEAM
WHERE NAME="토트넘 핫스퍼";SELECT문을 이용하여 데이터를 조회할 수 있습니다. SELECT문으로 보고 싶은 필드를 선택하고, FROM문으로 TABLE을 선택한 후, WHERE문으로 조회 하고 싶어 하는 행을 선택 할 수 있습니다.
Syntax
SELECT 필드명_1, 필드명_2, ...
FROM 테이블명
WHERE 필드명_1=필드값_1, 필드명_2=필드값_2;TEAM 테이블에 있는 데이터 중, COUNTRY가 Korea인 행만 조회 해 보겠습니다.
Example
SELECT *
FROM TEAM
WHERE COUNTRY="Korea";예시를 들어 보겠습니다. FOREIGN KEY 제약 조건이 존재 하는 PEOPLE 테이블과 SCHOOL 테이블을 생성하는 예제입니다.
Example
CREATE TABLE SCHOOL (
ID INT PRIMARY KEY,
NAME VARCHAR(30) NOT NULL
);
CREATE TABLE PEOPLE (
ID INT PRIMARY KEY,
NAME VARCHAR(30) NOT NULL,
AGE INT,
SCHOOL INT,
FOREIGN KEY (SCHOOL)
REFERENCES SCHOOL (ID)
);
INSERT INTO SCHOOL(ID, NAME)
VALUES (1, "KyungHee Univ"), (2, "KyungHee High School");
INSERT INTO PEOPLE(ID, NAME, AGE, SCHOOL)
VALUES (1, "Justkode", 24, 1), (2, "JustPark", 24, NULL);여기에 있는 PEOPLE과 SCHOOL 에서, PEOPLE.SCHOOL과 SCHOOL.ID 가 일치 하는 행에 대해 조합하여 하나의 테이블 형태로 출력을 하고자 할 때는, INNER JOIN을 사용 합니다.
SELECT *
FROM PEOPLE
INNER JOIN SCHOOL
ON SCHOOL.ID = PEOPLE.SCHOOL;
Inner Join
LEFT JOIN은 첫 번째 테이블을 기준으로, 두 번째 테이블을 조합하는 JOIN 입니다. 첫 번째 테이블에 있는 값을 모두 출력하고, 만약 ON 절의 조건을 만족한다면, 두 번째 테이블의 필드 값을 함께 출력 하지만, 만족하지 않을 경우에는 전부 NULL로 처리가 됩니다.
SELECT *
FROM PEOPLE
LEFT JOIN SCHOOL
ON SCHOOL.ID = PEOPLE.SCHOOL;
Left Join
RIGHT JOIN은 두 번째 테이블을 기준으로, 첫 번째 테이블을 조합하는 JOIN 입니다. 두 번째 테이블에 있는 값을 모두 출력하고, 만약 ON 절의 조건을 만족한다면, 첫 번째 테이블의 필드 값을 함께 출력 하지만, 만족하지 않을 경우에는 전부 NULL로 처리가 됩니다.
SELECT *
FROM PEOPLE
RIGHT JOIN SCHOOL
ON SCHOOL.ID = PEOPLE.SCHOOL;
Right Join
이번 시간에는 SQL의 간단한 문법들에 대해 알아 보았습니다. 다음 시간에는 머신러닝의 핵심이 되는 학습 과정을 알아 보고, 이를 수학적으로 해석해 보는 Machine Learning Basic에 대해서 알아 보겠습니다.