[찍먹 Data Science] 4. SQL
SQL의 기본 문법에 대해 알아보자. 2021-07-11
주의! Caution!
해당 게시글은 Archive된 게시글 입니다.
Archive된 사유는 다음 중 하나에 해당 됩니다.
  • 작성 된지 너무 오랜 시간이 경과 하여, API가 변경 되었을 가능성이 높은 경우
  • 주인장의 Data Engineering으로의 변경으로 질문의 답변이 어려워진 경우
  • 글의 퀄리티가 좋지 않아 글을 다시 작성 할 필요가 있을 경우
이 점 유의하여 게시글을 참고 하시길 바랍니다.

SQL

안녕하세요? Justkode 입니다. 오늘은 SQL에 대해서 간단하게 알아보는 시간을 가져보도록 하겠습니다. SQLStructured Query Language의 약자로, RDBMS의 데이터베이스를 주로 조회 하는데에 사용이 되는, 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어입니다. 여기서 설명 하는 문법들은 많은 내용을 담지 않고, SQL을 간략하게 설명 하기 위해, 간단한 코드 예제를 보여 줄 뿐이니, SQL Fiddle을 이용 하여 실제로 연습 하거나, 각 챕터마다 이론을 따로 공부 하는 것을 추천 드립니다.

(전에 작성 했던 글인 SQL 간단 문법 정리 의 수정본이라고 생각하셔도 될 정도로, 중복 되는 내용이 매우 많습니다. 참고 해 주세요.)

목차

  • CREATE
  • ALTER
  • DROP
  • INSERT
  • UPDATE
  • DELETE
  • SELECT
  • JOIN

CREATE

DATABASE 생성

CREATE DATABASE 문은 말 그대로, DATABASE를 생성하기 위한 구문입니다. DATABASE는 내부에 여러 개의 TABLE을 가지고 있습니다.

Syntax

CREATE DATABASE 데이터베이스명;

DB라는 이름을 가지는 DATABASE를 생성하는 예제입니다.

Example

CREATE DATABASE DB;

DATABASE 선택

USE문을 이용, 사용 하고자 하는 DATABASE를 선택 할 수 있습니다.

Syntax

USE 데이터베이스명;

DB라는 DATABASE를 사용 하는 예제입니다.

Example

USE DB;

DATABASE의 TABLE 생성

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
);

Constraint: 제약 조건

각 필드에 제약 조건을 걸 수 있습니다.

  • NOT NULL : 해당 필드는 NULL 값이 불가능 합니다.
  • UNIQUE : 해당 필드의 값은 테이블 내 해당 필드에서 유일해야 합니다.
  • PRIMARY KEY : 해당 필드는 NOT NULLUNIQUE 제약 조건의 특징을 모두 가집니다.
  • 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

ALTER 문을 이용해 TABLE필드 수정 혹은 DATABASE문자 집합 및 콜레이션을 수정 할 수 있습니다.

ALTER DATABASE

ALTER DATABASE를 통해 DATABASECHARACTER 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

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

DROP을 이용해 DATABASETABLE삭제 할 수 있습니다.

Syntax

DROP DATABASE 데이터베이스명;
DROP TABLE 테이블명;

한번 PLAYER 테이블과 DB 데이터베이스를 삭제 시켜 보겠습니다.

Example

DROP TABLE PLAYER;
DROP DATABASE DB;

TRUNCATE TABLE

TRUNCATE TABLE문은 테이블 내의 스키마는 남겨놓고, 테이블 내의 데이터 만을 지우고자 할 때 사용합니다.

Syntax

TRUNCATE TABLE 테이블명;

Example

TRUNCATE TABLE PLAYER;

INSERT

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문을 이용하여 데이터를 수정할 수 있습니다. 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문을 이용하여 데이터를 삭제할 수 있습니다. DELETE FROM문으로 TABLE을 선택하고, WHERE문으로 데이터 삭제를 원하는 행을 선택할 수 있습니다.

Syntax

DELETE FROM 테이블명
WHERE 필드명_1=필드값_1, 필드명_2=필드값_2, ...;

TEAM 테이블에 넣어 놓은 토트넘 핫스퍼를 삭제 해 보겠습니다.

Example

DELETE FROM TEAM
WHERE NAME="토트넘 핫스퍼";

SELECT

SELECT문을 이용하여 데이터를 조회할 수 있습니다. SELECT문으로 보고 싶은 필드를 선택하고, FROM문으로 TABLE을 선택한 후, WHERE문으로 조회 하고 싶어 하는 행을 선택 할 수 있습니다.

Syntax

SELECT 필드명_1, 필드명_2, ...
FROM 테이블명
WHERE 필드명_1=필드값_1, 필드명_2=필드값_2;

TEAM 테이블에 있는 데이터 중, COUNTRYKorea인 행만 조회 해 보겠습니다.

Example

SELECT *
FROM TEAM
WHERE COUNTRY="Korea";

JOIN

예시를 들어 보겠습니다. 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);

여기에 있는 PEOPLESCHOOL 에서, PEOPLE.SCHOOLSCHOOL.ID 가 일치 하는 행에 대해 조합하여 하나의 테이블 형태로 출력을 하고자 할 때는, INNER JOIN을 사용 합니다.

SELECT *
FROM PEOPLE
INNER JOIN SCHOOL
ON SCHOOL.ID = PEOPLE.SCHOOL;

Inner Join

LEFT JOIN

LEFT JOIN은 첫 번째 테이블을 기준으로, 두 번째 테이블을 조합하는 JOIN 입니다. 첫 번째 테이블에 있는 값을 모두 출력하고, 만약 ON 절의 조건을 만족한다면, 두 번째 테이블의 필드 값을 함께 출력 하지만, 만족하지 않을 경우에는 전부 NULL로 처리가 됩니다.

SELECT *
FROM PEOPLE
LEFT JOIN SCHOOL
ON SCHOOL.ID = PEOPLE.SCHOOL;

Left Join

RIGHT JOIN

RIGHT JOIN은 두 번째 테이블을 기준으로, 첫 번째 테이블을 조합하는 JOIN 입니다. 두 번째 테이블에 있는 값을 모두 출력하고, 만약 ON 절의 조건을 만족한다면, 첫 번째 테이블의 필드 값을 함께 출력 하지만, 만족하지 않을 경우에는 전부 NULL로 처리가 됩니다.

SELECT *
FROM PEOPLE
RIGHT JOIN SCHOOL
ON SCHOOL.ID = PEOPLE.SCHOOL;

Right Join

마치며

이번 시간에는 SQL의 간단한 문법들에 대해 알아 보았습니다. 다음 시간에는 머신러닝의 핵심이 되는 학습 과정을 알아 보고, 이를 수학적으로 해석해 보는 Machine Learning Basic에 대해서 알아 보겠습니다.

Recent Posts in Data-Science Category