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 문으로 대체 - 중복된 삽입 방지]