SQLD를 딴 지 벌써 2년이 다 되어가서 보수교육을 들으라는 안내 메시지가 왔다. 약 4시간에 달하는 분량의 동영상인데 이렇게 보게 된 김에 보면서 SQL에 대한 기본적인 내용을 정리하고 보충하기로 했다.
SQL: 구조화된 질의 언어
SQL(Structured Query Language)은 관계형 데이터베이스에서 데이터를 저장, 관리, 조회, 수정, 삭제하기 위해 사용되는 표준화된 프로그래밍 언어다. SQL은 1970년대에 개발되어 이후 ANSI(미국 국가표준협회)와 ISO(국제표준화기구)에서 국제 표준으로 지정되었다.
SQL의 주요 특징
1. 모든 관계형 DBMS에서 사용 가능
SQL은 ANSI/ISO 표준을 기반으로 설계되어, 대부분의 관계형 데이터베이스 관리 시스템(RDBMS)에서 동일한 방식으로 사용할 수 있다.
대표적인 DBMS로는 MySQL, PostgreSQL, Oracle, MS SQL Server 등이 있다
2. 관계형 데이터베이스 모델 기반
SQL은 데이터를 테이블 형식으로 구조화하고, 데이터 간의 관계를 정의해 효율적인 관리와 검색을 가능하게 한다.
3. 비절차형 언어
SQL은 사용자가 원하는 결과를 선언적으로 기술하는 언어다. 데이터 조회 시 어떤 경로를 통해 데이터를 가져올지 명시하지 않고, 결과에 대한 조건만 정의하면 데이터베이스가 최적의 방법으로 처리한다.
SELECT name FROM users WHERE age > 30;
사용자가 질의를 정의하면, 데이터베이스가 해석하여 실행한다.
4. 표준화와 확장성
SQL은 ANSI/ISO 표준을 따르며, 다양한 DBMS에서 활용 가능하다. 각 DBMS는 이를 기반으로 고유한 확장 기능 (T-SQL, PL/SQL 등)을 제공한다.
5. 데이터베이스 무결성 유지
SQL은 ACID 속성(원자성, 일관성, 독립성, 지속성)을 통해 트랜잭션 처리와 데이터 무결성을 보장한다.
SQL의 주요 기능
1. 데이터 정의(DDL)
- 데이터베이스와 테이블의 구조를 정의하고, 데이터 간의 관계를 설정한다.
- CREATE, ALTER, DROP, TRUNCATE
2. 데이터 조회(DQL)
- 특정 데이터를 선택적으로 조회할 수 있다.
- SELECT
3. 데이터 조작(DML)
- 데이터를 삽입, 수정, 삭제하는 작업을 수행한다.
- INSERT, UPDATE, DELETE, MERGE
4. 데이터 제어(DCL)
- 데이터 접근 권한을 관리하고 보안을 강화한다.
- GRANT, REVOKE
5. 트랜잭션 제어(TCL)
- 데이터 일관성을 유지하기 위한 트랜잭션 단위를 관리한다.
- COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION
SQL의 범용성과 특수성
두 개 이상의 DBMS를 사용해본 개발자라면 익히 알겠지만, SQL은 ANSI/ISO 표준이 정해져 있음에도 DBMS마다 문법과 기능에서 미묘한 차이가 있다. SELECT, INSERT, UPDATE, DELETE와 같은 주요 명령어는 대부분의 데이터베이스에서 동일한 문법으로 동작한다. 이는 SQL이 관계형 데이터베이스의 핵심 언어로 자리 잡을 수 있었던 원인이기도 하다.
하지만 DBMS별 특수한 요구사항과 최적화를 반영하기 위해, 각 시스템은 표준 SQL 위에 고유한 확장 기능을 추가했다. 예를 들어, Oracle의 PL/SQL, Microsoft SQL Server의 T-SQL, MySQL의 사용자 정의 함수(UDF) 등은 표준 SQL을 기반으로 하지만 고유한 기능과 문법을 포함하고 있다. 이는 특정 DBMS를 사용하는 환경에서 최적화를 가능하게 하지만, 동시에 DBMS 간 호환성 문제를 일으킬 수 있다.
주요 차이점
1. 문자열 연결
- Oracle: || 사용
- MySQL, MSSQL: + 사용
-- Oracle
SELECT 'Hello ' || 'World' FROM dual;
-- MySQL, MS SQL Server
SELECT 'Hello ' + 'World';
2. 결과 제한
- MySQL, PostgreSQL: LIMIT 사용
- MSSQL: TOP 사용
-- MySQL, PostgreSQL
SELECT * FROM users LIMIT 10;
-- MSSQL
SELECT TOP 10 * FROM users;
3. 날짜와 시간 함수
- Oracle: SYSDATE
- MS SQL Server: GETDATE()
- PostgreSQL: CURRENT_TIMESTAMP
이처럼 SQL의 표준화는 데이터베이스의 기본적인 공통 사용성을 보장하지만, 완전한 통일성을 보장하지는 않는다. 따라서 개발자는 각 데이터베이스 간의 특성에 대한 숙지가 필요하다.
SQL의 ACID: 트랜잭션 안정성과 데이터 일관성
ACID는 데이터베이스 트랜잭션의 안정성을 유지하고 데이터 일관성을 보장하는 4가지 원칙이다.
- 원자성(Atomicity): 트랜잭션은 "모두 실행되거나 전혀 실행되지 않는다." 중간에 실패하면 모든 작업이 취소되어 데이터는 이전 상태로 복구된다.
- 일관성(Consistency): 트랜잭션 실행 전후 데이터는 항상 규칙과 제약 조건을 만족해야 한다.
- 고립성(Isolation): 여러 트랜잭션이 동시에 실행될 때 서로 영향을 미치지 않도록 독립적으로 처리된다.
- 지속성(Durability): 성공적으로 완료된 트랜잭션의 결과는 시스템 오류에도 영구적으로 저장된다.
정리하고보니 SQLD뿐만 아니라 정보처리기사를 준비할 때 꽤 도움 되었던 내용들이다.
https://www.ibm.com/think/topics/structured-query-language
https://www.w3schools.com/sql/sql_intro.asp
https://blog.ansi.org/sql-standard-iso-iec-9075-2023-ansi-x3-135/
'SQL' 카테고리의 다른 글
[MSSQL][SQL SERVER] SQL 성능 최적화: 캐싱과 동적 평가(Dynamic Evaluation)의 함정 (1) | 2025.01.05 |
---|---|
[MSSQL] MSSQL에서 서버 및 데이터베이스 수준 DML 권한 확인하기: 동적 쿼리 예시 (2) | 2024.11.17 |
[SQL조인][조인 순서] 왜 조인을 할 때 ON절에서 조인 대상 테이블의 alias가 먼저 올까 (0) | 2024.10.25 |
[Oracle]SQLPlus에서 'set autotrace on' 설정 시 에러 조치 (0) | 2024.06.09 |
[SQL][#1][강의]기초 데이터 분석을 위한 핵심 SQL (0) | 2024.03.24 |
댓글