개요
쿼리의 종류는 DDL / DML / DCL 로 나뉩니다.
잘 보시면 아시겠지만 가운데의 단어만 다릅니다. 그러나 앞뒤 생각 말고 가운데를 보셔서,
DDL 의 가운데 D는 Definition (정의)
DML 의 가운데 D는 Manipulation (조작)
DCL 의 가운데 D는 Control (제어)
라고 생각을 하시면 됩니다.
DDL
DDL 은 테이블이나 유저 같은 것들을 생성하거나 지우거나 하는 구문을 얘기합니다. 객체를 만들거나 수정하거나 없애거나 하는 것인데, 개발 단계에서 사용이 되고, 운영단계 에서는 덜 쓰이게 되는 구문 이라는 얘기입니다.
CREATE 와 DROP/ ALTER 와 같은 것들이 있습니다.
데이터를 입력하거나 수정 하는 개념이 아니며, 작업하기 위한 환경을 생성하거나 변경하는 언어라고 생각을 하시면 되겠습니다. 예를 들어, 데이터와 무관하게. 체크를 하기 위한 함수를 생성할 수 있겠습니다.
[CREATE FUNCTION 어쩌고저쩌고~~]
라는 DDL 구문을 날리면, 함수가 생성이 됩니다. 이것은 게시판 따위에서 글을 입력하거나 삭제 하는 그런 것과는 성향이 다르죠. 이해가 되시겠는지요.
DML
DML 은 계속 쓰이게 되는 구문을 얘기합니다. SELECT / INSERT / UPDATE / DELETE 와 같은 것들이 있으며, 각각의 목적은 조회/입력/수정/삭제 와 목적을 띕니다. 게시판에서 글을 적고 저장 을 누르거나, 댓글을 달고 저장을 누르는 순간, 데이터베이스로는 INSERT 의 구문이 날아가는 것입니다.
이러한 종류를 DML 이라고 합니다.
DCL
DCL 은 제어 하는 구문 입니다. 좀더 쉽게 생각알 하시면, 권한을 넣거나 빼거나 와 같은 구문을 얘기합니다.
GRANT / REVOKE
복잡하게 설명이 되었습니다만, DDL/DML/DCL 의 종류에 대해서는 잘 알지 못하여 되는 부분이기는 합니다.
하지만, 시간이 지나면 더 헛갈리게 될 여지가 있기 때문에 기왕에 알아두고 넘어가는 것이 좋지요.
질의문이라는 것을 작성을 하게 되는데,
어떤 녀석은 DB를 구축하기 위한 목적인 녀석이 있고(DDL) ,
어떤 녀석은 데이타를 관리하기 위한 목적인 녀석이 있고 (DML),
어떤 녀석은 권한 갖고 장난을 치기 위한 목적일 수도 있습니다. (DCL)
그래서 목적이 너무 분명히 다르기 때문에, 세 가지로 구분지어 볼 수 있다는 얘기인 것이죠.
일반적으로 데이터베이스 전문가가 아니시라면, 구축(DDL)이나 권한(DCL) 갖은 부분이 아닌 데이터에 대한 부분(DML) 을 사용하게 되실 것입니다.
앞서 말했다시피 DML 의 종류는
SELECT
INSERT
DELETE
UPDATE
의 4종류가 있습니다. 시간 나는대로 순서대로 하나씩 짚어가면서 포스팅하도록 하겠습니다. (라고 썼는데...9년이 흘렀네요...)
다시 한번 개요
(2019년 03월 추가 작성중)
이해를 돕기 위해 추가 작성 중입니다. 아래로는 추가로 작성한 내용입니다.
DML, DDL, DCL 을 구분하기 위해서는 누가 왜 나눴을까 를 짚어보면 이해가 쉬울 수 있을 듯 합니다.
DCL 다시 한번
가장 먼저 DCL 을 생각해 볼 수 있습니다.
DCL 은 누가 접속할 것인지 를 다룰 수 있습니다.
아주 아주 높은 관리자가 있다고 합시다. 이 사람은 차 열쇠, 창고 열쇠, 금고 열쇠 등을 갖고 있는 사람입니다. 물건을 가져와서 무엇을 하는지는 크게 관심이 없고, '누구에게 열쇠를 줄지 말지'가 일단 가장 중요한 사항일 수 있습니다.
GRANT 는 권한을 주는 쿼리입니다. 접속 권한을 줄 지, SELECT 할 수 있게 해줄지, UPDATE 가 가능하게 해줄지 등등 세밀한 권한을 조정할 수 있습니다.
REVOKE 는 반대로 권한을 제거시키는 쿼리 입니다.
실제로는 'DBA' 나 '시스템 관리자' 같은 분들이 주로 사용하게 되는 쿼리라고 볼 수 있겠습니다.
특징 상, 데이터베이스의 종류에 따라서 디테일하게 쿼리 구문이 다를 수 있겠죠? Oracle 만의 특징이 있는 쿼리가 더 있을 수 있고, MSSQL 만의 특징이 있는 쿼리가 더 있을 수 있다고 짐작해 볼 수 있습니다. 왜냐하면 정말 중요하잖아요 :)
개인정보를 누구에게 넘겨줄지 말지 를 다루는 쿼리 입니다.
DCL 의 대표적인 것들
- GRANT : 권한 주다
- REVOKE : 권한을 뺏다 (무효화 하다)
DDL 다시 한번
DDL 은 테이블도 만들고, 뷰도 만들고, 함수도 만들고, 프로시저도 만들고.
만들고 수정하고 삭제하고... 이런 부분에 대한 쿼리 입니다.
음...
큰 창고가 있다고 하구요. 열쇠를 받아서 이제 창고를 사용할 수 있다고 합시다. 창고에 쇠로 된 프레임을 만들어서 10단으로 만들고, 구간마다 종류별로 분류하고 관리하고 싶다고 합시다. (이케아 가보셨나요? 구간마다 잘 정리되어 있습니다. 그런 느낌을 떠올려 봅시다)
이런 구조를 만드는 것이 DDL 입니다.
데이터베이스 구조 를 잘 설계했다면, 솔직히 한 번만 동작되어도 되는 쿼리 입니다.
보안을 깐깐하게 하는 곳이라면, 처음 한번만 동작할 수 있게 권한을 주고 그 다음부터는 '수정을 못하게' 할 수도 있겠죠?
DDL 의 대표적인 것들
- CREATE : 만들다
- ALTER : 수정하다
- DROP : 날리다 (아주 그냥 날려버립니다)
실제로는 '데이터베이스 설계' 단계 같은 것을 거치는데, 이 때에 데이터베이스 구조를 완성하게 됩니다. 'ERD' 라고 하는 종류의 소프트웨어를 사용해서, 네모네모 하게 설계를 하게 됩니다. 쉬운 소프트웨어는 쉽게 되어있어서, 이렇게 만들고 저렇게 하다보면 쿼리가 만들어지게 됩니다.
틀이 완성이 되게 되겠군요.
하지만, 쓰다보면 애초 생각과는 다른 일이 벌어지므로 ALTER 도 많이 쓰이게 됩니다 (눈물...)
DML 다시 한번
DML 은 뭘까요?? 쿼리 Query 는 '질의문' 이라는 뜻의 영어단어 입니다. 질의 하다. 묻다, 라는 의미인데요.
어찌보면 DML 이 정말로 Query 로써의 의미를 가장 잘 갖고 있는 것이라고 볼 수 있습니다.
DML 의 대표적인 애들
- SELECT : 조회하다
- DELETE : 날리다, 삭제하다, 싹 지우다
- UPDATE : 수정하다. 데이터를 수정하다. 갱신하다.
- INSERT : 추가하다, 삽입하다. 데이터를 넣다.
접속 권한도 얻었고, 틀도 완성되어졌습니다.
이제 '웹'으로도 이용하고 싶고, '앱'으로도 이용하고 싶고, '윈도우 소프트웨어'로도 이용하고 싶고, 전문 '통계' 프로그램에 연결시켜서 통계도 내보고 싶고, '데이터 과학자'라서 Insight 를 얻고도 싶겠죠.
데이터베이스 와 '어떤 것' 과의 사이에서 데이터를 주거니 받거니, 보여주거니 변경하거니 하는 것을 담당하는 쿼리 입니다.
'개발자'들이 많이 이용하게 됩니다. '통계학자'도 이용하게 되구요. '데이터 과학자'도 이용하게 됩니다.
이용 방법은 어려울 것은 없습니다. (단지 복잡한 것을 요구하는 고객들이 있을 뿐. 눈물...)
마무리 글
DDL, DML, DCL 에 대해서 다시 한 번 추가 작성하게 되었습니다.
쉽게 쓰려고 했는데 이해가 되셨는지 모르겠네요. 그러나 걱정마세요. DDL, DML, DCL 이라는 용어는 그냥 구분짓기 위한 용어입니다. 몰라도 문제가 없습니다.
보다 중요한 것은 SELECT, UPDATE, DELETE, INSERT, CREATE, ALTER, DROP, GRANT, REVOKE 같은 쿼리를 정말로 어떻게 얼마나 잘 쓰는가 입니다. ... (네? 이게 무슨 소린가요?.. )
'데이터베이스' 카테고리의 다른 글
Navicat 'Missing required library sqlite.dll' (0) | 2017.11.29 |
---|---|
[SQLite] auto increment (0) | 2016.04.28 |
웹 ERD - WWW SQL Designer (0) | 2015.09.30 |
ms sql, oracle, mysql 현재 일시 구하기 (0) | 2011.02.17 |
[데이터베이스 database] 테이블 삭제시 constraints 삭제 (0) | 2010.09.07 |
(Database) 쿼리 - QUERY - 질의문 - SQL 에 대해서. (0) | 2010.04.01 |
(오라클/oracle/Transaction) 트랙젝션 에 대한 생각 (0) | 2009.09.08 |