MySQL만 내용 있음

관계형 데이터베이스 관리 시스템(RDBMS)

MySQL, PostgreSQL, MariaDB, Microsoft SQL Server, Oracle Database 등으로 구분되되, 기본적으로 어느 하나만을 사용한다.
SQL을 사용하며, SQL은 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)를 사용한다.
DDL [CREATE, ALTER, DROP]
DDL은 SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의(생성,수정,삭제)할 때 사용한다.
DML[SELECT, INSERT, UPDATE, DELETE]
DML은 TABLE 내의 데이터를 조작(검색,삽입,수정,삭제)할 때 사용한다.
SELECT - 데이터 검색

[기본] SELECT * FROM 테이블명

SELECT 절 - 검색할 컬럼명을 지정하는 곳으로, 컬럼명을 지정하여 데이터를 찾을 수 있다.
[SELECT 내용 변경1 - 컬럼지정] SELECT 컬럼명1, 컬럼명2 FROM 테이블명

[SELECT 내용 변경2 - 중복제거 DISTINCT] SELECT DISTINCT 컬럼명1, 컬럼명2 FROM 테이블명
- DISTINCT는 선택한 모든 컬럼의 값이 동일한 값, 즉 중복값을 가진 줄을 제외한채 반환한다.


FROM 절 - 검색할 테이블을 지정하는 곳으로, 해당 테이블에서 검색을 할 수 있다.
[FROM 절 - AS 약칭 추가]

[FROM 절 - AS 약칭 추가 및 다중테이블 사용]

FROM 절 - JOIN ~ ON 절 - 테이블을 엮어서 보여줄 수 있다.
- 2개 이상의 테이블 사용을 필요로 하여 테이블2 추가

[FROM 절 - JOIN ~ ON 절 추가 - JOIN, INNER JOIN] FROM 테이블명1 JOIN 테이블명2 ON 테이블명1.컬럼명1 = 테이블명2.컬럼명1

[FROM 절 - JOIN ~ ON 절 추가 - RIGHT JOIN, RIGHT OUTER JOIN] FROM 테이블명1 RIGHT JOIN 테이블명2 ON 테이블명1.컬럼명1 = 테이블명2.컬럼명1

[FROM 절 - JOIN ~ ON 절 추가 - LEFT JOIN, LEFT OUTER JOIN] FROM 테이블명1 LEFT JOIN 테이블명2 ON 테이블명1.컬럼명1 = 테이블명2.컬럼명1


WHERE 절 - 조건을 검색하는 것으로, 테이블 내 컬럼명이 해당 데이터를 가진 경우 찾는다.
[WHERE 절 추가 - 기본] WHERE 컬럼명1='검색할 데이터'

OR, AND를 사용하여 다양한 조건 추가 가능
[WHERE 절 추가 - 검색시 조건(AND)] WHERE 컬럼명1='검색할 데이터1' AND 컬럼명2='검색할 데이터2'

[WHERE 절 추가 - 검색시 조건(OR)] WHERE 컬럼명1='검색할 데이터1' OR 컬럼명2='검색할 데이터2'

OR, AND의 복합 사용 시, AND가 먼저 처리되지만 ()로 묶어서 우선순위를 지정할 수 있다.
[WHERE 절 추가 - 검색시 조건(다중조건2 AND우선(Default))] WHERE 컬럼명1='검색할 데이터1' OR 컬럼명2='검색할 데이터2' AND 컬럼명3='검색할 데이터3'

[WHERE 절 추가 - 검색시 조건(다중조건1 ()로 순서 변경)] WHERE (컬럼명1='검색할 데이터1' OR 컬럼명2='검색할 데이터2') AND 컬럼명3='검색할 데이터3'

완전 동일하지 않고, 내용을 포함하는 경우, Like를 사용
[WHERE 절 추가 - LIKE 사용] WHERE 컬럼명1 LIKE '%검색내용%'


ORDER BY 절 - 컬럼에 대해 ASC(오름차순/Default), DESC(내림차순)으로 정렬하여 출력
[ORDER BY 절 추가 - 기본 정렬(ASC 생략)] ORDER BY 컬럼명1
[ORDER BY 절 추가 - 기본 정렬] ORDER BY 컬럼명1 ASC
[ORDER BY 절 추가 - 복합 정렬] ORDER BY 컬럼명1 ASC, 컬럼명2 DESC

GROUP BY 절 - 해당 컬럼을 그룹화 하여 보여줄 수 있음
[GROUP BY 절 추가 - 기본 그룹화] GROUP BY 컬럼명1

[GROUP BY 절 추가 - 복합 그룹화] GROUP BY 컬럼명1, 컬럼명2
[GROUP BY 절 추가 - HAVING 절 추가] GROUP BY 컬럼명1 HAVING 조건

[GROUP BY 절 추가 - GROUP SETS] // GROUP BY GROUP SETS ((컬럼1, 컬럼2), (컬럼1), ()) => null이 많이 생김 // GROUP BY GROUP SETS ((컬럼1, 컬럼2), ()) [GROUP BY 절 추가 - ROLLUP - 계층적 요약 제공, 2개 이상을 묶어서 그룹화할 수 있음] // GROUP BY ROLLUP (컬럼1, 컬럼2) => null이 많이 생김 // GROUP BY ROLLUP ((컬럼1, 컬럼2)) [GROUP BY 절 추가 - CUBE - ROLLUP과 반대의 순서로 총합을 구한다.] // GROUP BY CUBE ((컬럼1, 컬럼2)) // 미확인 [GROUP BY 절 추가 - GROUPING] // 작성필요
UNION 절 - SELECT 2개를 할 때 컬럼수가 동일해야한다. 합집합으로 보여준다. 단, 중복제거. Row가 추가됨(JOIN은 Column이 추가됨)
SELECT idx, price FROM test_table UNION SELECT idx, sell_price FROM test_table2;
UNION ALL 절 - SELECT 2개를 할 때 컬럼수가 동일해야한다. 합집합으로 보여준다. 단, 중복을 제거하지 않는다.
SELECT idx, price FROM test_table UNION ALL SELECT idx, sell_price FROM test_table2;
INTERSECT 절 - SELECT 2개를 할 때 컬럼수가 동일해야한다. 교집합으로 보여준다.
SELECT idx, price FROM test_table INTERSECT SELECT idx, sell_price FROM test_table2;
MINUS, EXCEPT 절 - SELECT 2개를 할 때 컬럼수가 동일해야한다. 테이블1에서 테이블2를 제거한 차집합으로 보여준다.
SELECT idx, price FROM test_table MINUS SELECT idx, sell_price FROM test_table2;

WITH ~ AS () 절 = Common Table Expressions (CTE) - 임시 테이블 정의 / 동일한 쿼리 내에서 cte_name 참조가능
WITH cte_name AS ( SELECT column1, column2 FROM table_name WHERE condition )
CASE 절 - 조건에 따른 컬럼정의
INSERT - 데이터 삽입
[INSERT INTO 문 - 기본 단일행 삽입] INSERT INTO 테이블명 (컬럼명1, 컬럼명2, ...) VALUES ('값1', '값2', ...);
[INSERT INTO 문 - 기본 단일행 삽입(컬럼명 생략)] INSERT INTO 테이블명 VALUES ('값1', '값2', ...);
- 단, (컬럼명1, 컬럼명2, ...) 생략 시, VALUES의 값의 갯수 = 테이블의 컬럼 수
[INSERT INTO 문 - 데이터 다중행 삽입] INSERT INTO `test_table` VALUES ('idx데이터1', 'name데이터1', 'amount데이터1', 'price데이터1'),('idx데이터2', 'name데이터2', 'amount데이터2', 'price데이터2')
[INSERT INTO 문 - SELECT문을 이용한 삽입(VALUES 미사용)] INSERT INTO 테이블명1 SELECT 컬럼명1, 컬럼명2,... FROM 테이블명2;
- 단, 삽입할 테이블 컬럼수 = 검색하여 나타나는 컬럼수

[INSERT INTO 문 - VALUES안에 복합 적 사용] INSERT INTO 테이블명1 VALUES (검색(SELECT)문 이용 - 컬럼하나, DEFAULT, 함수이용(NOW() 등))
[INSERT IGNORE INTO 문으로 대체 - 중복된 삽입 방지]
UPDATE - 데이터 수정
[UPDATE ~ SET 문 - 기본(전체 수정)] UPDATE 테이블명1 SET 컬럼명1='수정할값1'
[UPDATE ~ SET 문 - 기본(조건부 수정)] UPDATE 테이블명1 SET 컬럼명1='수정할값1' WHERE 컬럼명2='검색할값1'
[UPDATE ~ SET 문 - 다른 컬럼을 이용하기] UPDATE 테이블명1 SET 컬럼명1=컬럼명3*0.9 WHERE 컬럼명2='검색할값1'
[UPDATE ~ SET 문 - CASE를 이용한 다중조건] UPDATE 테이블명1 SET 컬럼명1 =
CASE
WHEN 조건문1 THEN 넣을값1
WHEN 조건문2 THEN 넣을값2
....
ELSE 넣을값3
END
[UPDATE ~ SET 문 - JOIN을 이용한 업데이트]

DELETE - 데이터 삭제
[DELETE FROM 문 - 모든 데이터 삭제] DELETE FROM 테이블명
[DELETE FROM 문 - 조건 데이터 삭제] DELETE FROM 테이블명 WHERE 컬럼명1='조건데이터1'
[DELETE FROM 문 - 제일 과거 데이터부터 100행 삭제] DELETE FROM 테이블명 ORDER BY idx ASC LIMIT 100
[DELETE FROM 문 - JOIN을 이용한 삭제]

DCL [COMMIT, ROLLBACK, GRANT, REVOKE]
DCL은 보안, 무결성, 데이터 회복, 병행 수행 제어 등을 위해 정의(완료,복구,권한부여,권한취소)할 때 사용한다.

Window 함수(아직 내용 일부만 작성됨)

Window 함수
고유순서 할당 : ROW_NUMBER() OVER (ORDER BY column1) AS row_num
순위 할당 : RANK() OVER (ORDER BY column1) AS rank
값의 밀집된 순위를 할당 : DENSE_RANK() OVER (ORDER BY column1) AS dense_rank
결과 집합을 지정된 수의 동일한 크기의 그룹으로 분할 : NTILE(4) OVER (ORDER BY column1) AS quartile
이전 행의 값 : LAG(column1) OVER (ORDER BY column1) AS prev_value
다음 행의 값 : LEAD(column1) OVER (ORDER BY column1) AS next_value
집계함수[합계, 평균, 갯수, 최소값, 최대값, 표준편차, 분산, 문자열결함, 그룹내{처음/끝}값 반환, 백분위수 계산 등] - 함수(column2) OVER (PARTITION BY column1) : SUM, AVG, COUNT, MIN, MAX, {STDDEV / STDDEV_POP / STDDEV_SAMP}, {VARIANCE / VAR_POP / VAR_SAMP}, GROUP_CONCAT, {FIRST_VALUE / LAST_VALUE}, {PERCENTILE_CONT / PERCENTILE_DISC}