[DB] 3. SQL (Structured Query Language)

작성일     업데이트:

카테고리:

태그:

SQL (Structured Query Language) 관련 기본 개념 정리

1. 정의

  • 구조적인 질의 언어라는 뜻이며 데이터베이스를 제어, 관리하는 언어
  • 데이터베이스에서 자료를 검색/수정/삭제하는 데이터베이스 언어
  • 독자적인 문법을 갖는 DB 표준 언어

  • 다만 NoSQL 계열에서는 SQL 문을 사용하지 않는다


2. SQL 명령문의 종류

[ DML (Data Manipulation Language) ]

  • 데이터베이스 조작어
  • 데이터를 조작(추가, 변경, 삭제)하기 위한 명령어
  • 사용자가 데이터를 실질적으로 처리하기 위해 주로 사용

  • INSERT(추가) , UPDATE(변경) , DELETE(삭제) 문


[ DQL (Data Query Language) ]

  • 데이터 조회어
  • 질의어로 간단히 쿼리문(Query Statement) 이라고 한다

  • SELECT 문


[ DDL (Data Definition Language) ]

  • 데이터베이스 정의어
  • 데이터베이스 스키마를 정의하거나 조작
  • DDL에 대해 트랜잭션을 지원하지 않으므로 Rollback 할 수 없고 Commit 할 필요가 없다 (= 트랜잭션이 적용되지 않는다)

  • SCHEMA , DOMAIN , TABLE , VIEW , INDEX 를 CREATE(정의) / ALTER(변경) / DROP(삭제) 한다


[ DCL (Data Control Language) ]

  • 데이터 제어어
  • 데이터의 보안, 무결성, 회복, 병행 수행제어 등을 정의하는데 사용

  • 종류
    • COMMIT : 트랜잭션의 결과 반영
    • ROLLBACK : 트랜잭션의 작업취소 및 원상복구
    • GRANT : 사용자에게 권한 부여
    • REVOKE : 사용자 권한 취소


[ TCL (Transaction Control Language) ]

  • 트랜잭션 처리어
  • DCL에서 트랜잭션을 제어하는 명령어 COMMIT과 ROLLBACK에 대한 표현


3. SQL 특징

  • SQL 구문은 탐욕스럽다(Greedy)
    -> SQL은 가능한 넓은 범위에 걸처 작업하려고 한다
    -> 따라서 WHERE절이나 LIMIT 구문을 생략하면 SELECT의 경우 끝도 없이 출력하는 레코드열을 보게 될 것이고 UPDATE와 DELETE의 경우 사보타주에 가까운 광역 변조(파괴)가 일어난다
  • SQL과 PL/SQL은 다른 것이다


NoSQL (Not only SQL)

1. 정의

  • 기존의 DBMS가 갖고 있는 특성뿐만 아니라 다른 특성들을 부가적으로 지원한다는 것을 의미한다
  • 기존의 RDBMS로는 관리할 수 없는 복잡하고 용량이 큰 데이터들을 관리하기 위한 목적으로 등장한 개념이다
  • 데이터, 테이블 간의 관계를 정의하지 않기 때문에 정해진 스키마가 없어 보다 자유롭게 데이터를 저장할 수 있다
  • Key값 만을 가지고 데이터에 대한 입출력을 할 수 있다


2. 사용법

  • NoSQL에서는 레코드(Record)를 문서(Document)라고 부르며 다른 구조의 데이터를 같은 컬렉션(=SQL에서는 테이블)에 추가할 수 있다
  • 속성은 간단히 Key와 Value 값으로만 나타낸다

  • 대표적인 NoSQL : DynamoDB, MongoDB, Cassandra, Hbase 등


3. RDBMS vs NoSQL 차이점

  RDBMS NoSQL
장점 스키마가 정해져 있기 때문에 명확한 데이터 구조를 보장함(데이터 무결성 보장)
데이터 분류, 정렬, 탐색 속도가 비교적 빠름
데이터 중복을 피해 공간 절약
유지보수가 상대적으로 편리하고 생산성이 높음
스키마가 없기 때문에 자유롭게 데이터를 추가할 수있음
RDBMS보다 수평적 확장이 쉬움
RDBMS보다 복잡도가 떨어져, 훨씬 대용량의 데이터들을 저장, 관리할 수 있음
단점 복잡한 시스템일수록 Query문이 복잡해지고 성능이 떨어짐
수평적 확장이 어려워 대부분 수직적 확장을 함
중복된 데이터를 수정 시 모든 컬렉션에서 수행해야 함
key값에 대한 입츨력만 지원
유연성 때문에 데이터 구조 결정을 미루게 될 수 있음
  • SQL 데이터베이스 사용이 더 좋을 때

    • 변경될 여지가 없고 명확한 스키마가 사용자와 데이터에게 중요한 경우
    • 관계를 맺고 있는 데이터가 자주 변경(수정)되는 애플리케이션일 경우
  • NoSQL 데이터베이스 사용이 더 좋을 때

    • 정확한 데이터 구조를 알 수 없거나 변경, 확장될 수 있는 경우
    • 읽기를 자주 하지만, 데이터 변경은 자주 없는 경우
    • 데이터베이스를 수평적으로 확장해야 하는 경우

댓글남기기