DML(Data Maniplulation Language)는 데이터 조작어 즉 실제 코드에서 많이 다루는 부분이다.
어차피 문법은 다른 DB나 개발 언어에서 비슷하다. 그러니 일단 스탠다드한 형태만 알아두고 사용하고, 만약 에러가 난다면 그때 한번씩 해당 언어랑 DB를 검색해보면 된다.
우선 명령어 종류다.
명령어의 종류는 SELECT, INSERT, UPDATE, DELETE가 있다.
위에 명령어는 다양하게 사용할 수 있다. 내가 생각나는대로 쓰는 것보다 계속 다양한 쿼리를 쓸 때 업데이트 하는 게 좋을듯하다.
그리고 쿼리문은 줄바꿈을 해도 상관 없다. 그리고 대소문자도 상관 없다. 어쨋든 DB는 내장함수를 대소문자, 줄바꿈 상관 없이 구분한다. 물론 컬럼이나 테이블은 아니다. 그리고 한 쿼리문당 세미콜론으로 구분한다. 그래서 끝날 때엔 세미콜론을 붙여줘야한다.
DB마다 내장함수들도 다양하니 한번 검색해보길 바란다.
Select 명령어
Select 명령어는 생성되어 있는 테이블에서 데이터를 가져오는 명령어다.
자연스럽게 조건에 맞는 데이터라는 말이 따라 붙을 것이다.
물론 조건문에 중첩 또한 가능하다. 다중 If 문 또는 다중 For 문 처럼 말이다. 그러니 좀 더 유연하게 사용하길 바란다.기본 형태는 아래와 같다.
Select 추출할 컬럼 From 해당 테이블 Where 조건문
예를 하나 들어보겠다.
SELECT * FROM table WHERE id = 'user';
table 테이블에서 id가 user의 컬럼 데이터를 모두 가져온다는 뜻이다.
Select문은 나의 경우는 조건문에서 많이 갈린다. 예를 들어 AND 나 OR 그리고 다중 Select 문을 사용하여 데이터를 추출한다.
Insert 명령어
Insert는 명령어는 이미 생성된 테이블에 데이터를 삽입하는 명령어다.
이 명령어는 해당 테이블에 필요한 컬럼의 데이터만 넣을 것인지 아니면 해당 테이블의 모든 컬럼 데이터를 넣을 것인지 쿼리문에서 구별할 수 있다. 모든 컬럼 데이터를 삽입할 경우 컬럼의 순서에 맞게 모든 데이터를 입력해야한다. 특정 컬럼의 데이터만 넣을 시에는 Into 부분에서 컬럼을 같이 써줘야한다.
INSERT INTO 테이블(컬럼1, 컬럼2, ... )
VALUES (컬럼1 데이터, 컬럼2 데이터, … )
INSERT INTO 테이블
VALUES (컬럼1 데이터, 컬럼2 데이터, … )
첫번 째 Insert문은 바로 특정 컬럼의 데이터만 넣고 싶을 때이다.
두번 째 Insert문은 해당 테이블에 모든 컬럼에 데이터를 삽입하고 싶을 때 쓰는 경우다.
아래 예시를 한번 보자.
INSERT INTO table (id, name) VALUES ('user', '홍길동');
Update 명령어
Update 명령어는 이미 들어가 있는 데이터를 수정하는 명령어다.
조건식을 통해 구분하여 데이터를 수정한다.
* 이 부분에서는 조건문을 사용하지 않으면 그 테이블에 해당 컬럼이 모두 바뀌니 주의하자.
UPDATE 테이블명
SET 컬럼1 = 컬럼1의 데이터, 컬럼2 = 컬럼2의 데이터, ...
WHERE 조건식
예를 한번 들어보겠다. 아래는 name이 홍길동인 사람의 id를 모두 400으로 수정하는 쿼리다.
UPDATE table
SET id = '200'
WHERE name = '홍길동';
주의할 점은 조건문에 기본키가 아닌 다른 컬럼일 경우 적어도 1개 이상의 데이터가 변경될 수 있다.
그러니깐 이름이 홍길동인 사람들의 id가 다 바뀐다.
Delete 명령어
Delete 명령어는 특정 데이터나 아니면 테이블에 있는 데이터를 삭제할 수 있다.
이 명령어도 주의해야 할 점은 조건문이 잘못될 경우 상관 없는 데이터가 삭제될 수 있다. 그리고 조건문이 없으면 모든 데이터가 삭제된다.
DELETE FROM 테이블 WHERE 조건문
예를 한번 들어보겠다. 아래는 name이 '홍길동'인 사람의 데이터를 삭제하는 쿼리다.
DELETE FROM table WHERE name = '홍길동';
Update 문 처럼 조건문에 기본키가 아닌 다른 컬럼일 경우 적어도 1개 이상의 데이터가 삭제될 수 있다.
그러니깐 이름이 홍길동인 사람들의 데이터는 다 삭제된다.
* 저는 현재 Mysql을 사용하고 있습니다.
#mysql dml