Today I Learned
SQL
- Structured Query Language
- 관계형 데이터베이스에서 사용하는 언어
- 관계형 데이터베이스 : 행(데이터)과 열(속성)로 구성된 테이블에 데이터 저장. 정해진 형식에 맞게 데이터를 저장해야 하며 정보 요청시 구조화된 쿼리 언어를 사용해야 함. 데이터베이스의 ACID 성질을 준수해야 하는 금융 서비스 등에서 사용됨.
- SQL을 사용헤 데이터베이스에 쿼리(데이터 필터링을 위한 질의문)를 보내 특정 데이터를 불러오거나 삽입할 수 있음
- SQL을 사용할 수 있는 데이터베이스 : MySQL, Oracle, SQLite, PostgreSQL
SQL 기본 문법
CREATE
CREATE DATABASE dbname;
CREATE TABLE tablename (
col1 datatype,
col2 datatype,
col3 datatype
);
- 데이터타입 : INT, CHAR, VARCHAR, .... (레퍼런스)
USE
USE dbname;
DROP
DROP DATABASE dbname;
DROP TABLE tablename;
DESCRIBE
DESCRIBE tablename;
SELECT ... FROM
- 데이터 선택
- 반환되는 데이터는 result-set이라고 불리는 테이블에 저장된다
SELECT col1, col2, col3, ...
FROM tablename;
- 와일드카드(*)를 사용하면 모든 열이 선택된다
SELECT * FROM tablename;
- SELECT DISTINCT : 유니크한 값들만 선택
SELECT DISTINCT col1, col2, col3, ...
FROM tablename;
INSERT INTO
INSERT INTO tablename (col1, col2, col3, ...)
VALUES (val1, val2, val3, ...);
- 만약 모든 테이블의 모든 열에 대해 값을 추가하는 경우 열 이름을 특정할 필요가 없다
DELETE
WHERE
SELECT col1, col2
FROM tablename
WHERE condition
- tablename에서 주어진 조건 condition을 만족하는 레코드의 col1, col2 추출
UPDATE
UPDATE tablename
SET col1 = val1, col2 = val2
WHERE condition;
- 주어진 조건 condition을 만족하는 레코드의 col1 값을 val1으로, col2 값을 val2로 바꾼다
ORDER BY
SELECT col1, col2, ...
FROM tablename
ORDER BY col1, col2, ... ASC|DESC;
- ASC 오름차순이 기본이며 내림차순으로 정렬하고 싶다면 DESC 키워드를 붙여주어야 한다
JOIN
- 둘 이상의 테이블의 연관된 열을 기준으로 행들을 합치기 위해 사용된다
- (INNER) JOIN : 교집합
- LEFT JOIN : 왼쪽 테이블의 모든 레코드 + 오른쪽 테이블에서 일치하는 레코드
- RIGHT JOIN : 오른쪽 테이블의 모든 레코드 + 왼쪽 테이블에서 일치하는 레코드
- FULL (OUTER) JOIN : 합집합