기록/DB

[MYSQL] DML(Data Manipulation Language)

5월._. 2022. 5. 12.
728x90

1. 사용방법

* [참고] WHERE 없는 DELETE와 TRUNCATE의 차이점

  • DELETE : DML.데이터만 지워진다. 디스크 상 공간, 인덱스도 모두 남아있다.
  • TRUNCATE : DDL. 최초 테이블이 만들어진 상태로 돌아간다. 따라서 디스크 공간과 인덱스도 삭제된다. 자동으로 커밋을 실행하기 때문에 데이터를 복구할 수 없다.
-- 삽입
-- 1. 특정 필드만 삽입할 때
INSERT INTO 테이블이름(필드이름, 필드이름, ..)
VALUES(데이터값, 데이터값, 데이터값, ..);
-- 2. 전체 필드를 넣을 때
-- (NULL저장가능 필드, DEFAULT 설정된 필드, AUTO_INCREMENT 설정 필드 생략가능)
INSERT INTO 테이블이름
VALUES(데이터값, 데이터값, 데이터값, ..);

-- 수정
-- WHERE생략한다면 해당 테이블 모든 레코드의 필드값이 변경됨
UPDATE 테이블이름
SET 필드이름=데이터값, 필드이름=데이터값, ..
WHERE 필드이름=데이터값

-- 삭제
-- WHERE 생략하면 해당 테이블에 저장된 모든 데이터가 삭제됨
DELETE FROM 테이블이름
WHERE 필드이름=데이터값

-- 조회
SELECT 필드이름
FROM 테이블이름
[WHERE 조건];

 

2. SELECT

문법순서

  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY

실행순서

  1. FROM : 조회 테이블 확인
  2. ON : 조인 조건 확인
  3. JOIN : 각 테이블 조인
  4. WHERE : 데이터 추출 조건 확인
  5. GROUP BY : 컬럼 그룹화
  6. HAVING : 그룹화 조건 확인
  7. SELECT : 데이터 추출
  8. DISTINCT : 중복 제거
  9. ORDER BY : 데이터 순서 정렬

 

3. JOIN

데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현한다.

  1. INNER JOIN : ON 조건을 만족하는 경우만 가져온다.
  2. LEFT JOIN : ON 조건을 만족하지 않는 경우는 첫번째 테이블 필드값만 채우고 두번째 테이블 필드값은 NULL로 채운다.
  3. RIGHT JOIN : ON 조건을 만족하지 않는 경우는 두번째 테이블 필드값만 채우고 첫번째 테이블 필드값은 NULL로 채운다.
  4. OUTER JOIN
  5. SELF JOIN
  6. CROSS JOIN
-- INNER JOIN
첫번째테이블이름
INNER JOIN 두번째테이블이름
ON 조건

-- LEFT JOIN
첫번째테이블이름
LEFT JOIN 두번째테이블이름
ON 조건

-- RIGHT JOIN
첫번째테이블이름
RIGHT JOIN 두번째테이블이름
ON 조건

 

4. UNION

여러 개의 SELECT 문의 결과를 하나의 테이블이나 결과집합으로 표현할 때 사용한다.

이 때 각각의 SELECT 문으로 선택된 필드의 개수와 타입은 모두 같아야하며, 필드의 순서 또한 같아야 한다.

중복되는 레코드까지 모두 출력하고 싶다면 UNION ALL을 사용한다.

SELECT 필드이름
FROM 테이블이름
UNION
SELECT 필드이름
FROM 테이블이름

 

5. 연산자

이 글에 없는 다른 연산자의 자세한 설명은 http://www.tcpschool.com/mysql/mysql_operator_arithmetic 부터 읽으면 된다.

연산자 우선순위

1 INTERVAL
2 BINARY, COLLATE
3 !
4 - (단항 연산자), ~ (비트 연산자)
5 ^
6 *, /, DIV, %, MOD
7 - (이항 연산자), +
8 <<, >>
9 &
10 \|
11 = (관계 연산자), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
12 BETWEEN, CASE, WHEN, THEN, ELSE
13 NOT
14 AND, &&
15 XOR
16 OR, \|\|
17 = (대입 연산자), :=

 

CASE

-- 1. 값비교
CASE value
WHEN [compare_value] THEN result
[WHEN [compare_value] THEN result]
[ELSE result]
END
-- 2. 조건 비교
CASE
WHEN [condition] THEN result 
[WHEN [condition] THEN result]
[ELSE result]
END

 

REGEXP

WHERE 필드이름 REGEXP '표현';
. 줄 바꿈 문자(\n)를 제외한 임의의 한 문자를 의미함.
* 해당 문자 패턴이 0번 이상 반복됨.
+ 해당 문자 패턴이 1번 이상 반복됨.
^ 문자열의 처음을 의미함.
$ 문자열의 끝을 의미함.
\| 선택을 의미함.(OR)
[...] 괄호([]) 안에 있는 어떠한 문자를 의미함.
[^...] 괄호([]) 안에 있지 않은 어떠한 문자를 의미함.
{n} 반복되는 횟수를 지정함.
{m,n} 반복되는 횟수의 최솟값과 최댓값을 지정함.

 

6. 서브쿼리

다른 쿼리 내부에 포함되어 있는 SELECT 문을 의미한다. 서브쿼리를 포함하고 있는 쿼리를 외부쿼리라고 부르며, 서브쿼리는 내부쿼리라고도 부른다. MYSQL에서 서브쿼리를 포함할 수 있는 외부쿼리는 SELECT, INSERT, UPDATE, DELETE, SET, DO문이다.

 

서브쿼리는 반드시 괄호로 감싸져있어야 한다. 서브쿼리가 먼저 수행된 후에 외부쿼리가 실행된다.

특징

  1. 쿼리를 구조화시키므로, 쿼리의 각 부분을 명확히 구분할 수 있게 한다.
  2. 복잡한 JOIN이나 UNION과 같은 동작을 수행할 수 있는 다른 방법을 제공한다.
  3. 복잡한 JOIN이나 UNION보다 읽기 편하다.
  4. 서브쿼리에서 사용된 테이블이나 그 결과집합은 수정할 수 없다.

 

 

출처 : http://www.tcpschool.com/mysql

'기록 > DB' 카테고리의 다른 글

[MYSQL] 그룹함수  (0) 2022.05.14
[MYSQL] DCL(Data Control Language)  (0) 2022.05.13
[MYSQL] DDL(Data Definition Language)  (0) 2022.05.11

댓글