안녕하세요? 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
의 필드들의 타입, 제약조건 수정 혹은 필드 추가 및 삭제 할 수 있습니다.
ADD
DROP
MODIFY COLUMN
Syntax
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에 대해서 알아 보겠습니다.