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 데이터베이스 사용이 더 좋을 때
- 정확한 데이터 구조를 알 수 없거나 변경, 확장될 수 있는 경우
- 읽기를 자주 하지만, 데이터 변경은 자주 없는 경우
- 데이터베이스를 수평적으로 확장해야 하는 경우
댓글남기기