SQL (Structured Query Language)
- 데이터베이스와 대화하기 위해 디자인된 언어.(데이터베이스와 통신하는데 가장 많이 사용됨)
- 데이터가 데이터베이스에 있고, 데이터베이스는 SQL 을 사용함, 그리고 SQL 을 사용해서 데이터를 다룰 수 있음
- 1970년대에 만들어졌고, "SQUARE" → "SEQUEL" (Structured English Query Language) → "SQL" 로 바뀜
- 엑셀 문서랑 똑같이 생김, 행(row), 열(column) 이 있음
- (엑셀) 문서 - sheet
- (SQL) 데이터 베이스 - 테이블
SQL의 특징
선언형 언어
- 실행 방법을 말하지 않고, 원하는 결과를 명시(실행 방법은 데이터베이스 시스템이 결정)
이식성
- SQL은 표준이 있어 기본적인 이식성을 제공하지만
- 데이터베이스 시스템마다 고유한 확장 기능과 문법차이가 있어 완전한 이식성은 보장되지 않음
- 데이터베이스 변경 시 제대로 작동하지 않음(코드를 수정해야 함)
영어와 유사한 문법
- SQL은 영어 문장과 유사한 구조를 가져 읽고 이해하기 쉬움
표준
- 대부분의 데이터베이스 시스템은 이 표준을 기반으로 하지만, 100% 따르고 있지는 않음
SQL 에서 사용하는 언어
DDL (Data Definition Language)
- 데이터베이스의 구조를 정의하는 언어
- 주요 명령어: CREATE, ALTER, DROP, TRUNCATE, RENAME
- 테이블, 뷰, 인덱스 등의 데이터베이스 객체를 생성, 수정, 삭제하는 데 사용
DML (Data Manipulation Language)
- 데이터를 조작할 때 사용하는 언어
- 주요 명령어: SELECT, INSERT, UPDATE, DELETE
- 데이터를 조회, 삽입, 수정, 삭제하는 데 사용
TCL (Transaction Control Language)
- 데이터베이스의 논리적 작업 단위인 트랜잭션을 제어하는 언어
- 주요 명령어: COMMIT, ROLLBACK, SAVEPOINT
- COMMIT: 트랜잭션의 변경사항을 데이터베이스에 영구적으로 반영
- ROLLBACK: 트랜잭션의 변경사항을 취소하고 이전 상태로 되돌림
- SAVEPOINT: 트랜잭션 내에 중간 저장점을 만들어 부분적 롤백이 가능하게 함
DCL (Data Control Language)
- 데이터베이스에 대한 접근 권한과 사용자 권한을 제어하는 언어
- 주요 명령어: GRANT, REVOKE
- 사용자에게 특정 데이터베이스나 테이블에 대한 접근 권한을 부여하거나 철회하는 데 사용
데이터베이스의 종류
1. RDBMS (Relational Database Management System)
- 관계형 데이터베이스를 생성, 관리, 사용할 수 있게 해주는 소프트웨어 시스템
- SQL을 사용해서 데이터를 조작
- 관계형 데이터베이스 : 데이터들을 테이블 안에 저장하는 데이터베이스(엑셀 시트처럼 데이터를 정리)
- MySQL, PostgreSQL, SQLite, MariaDB, Microsoft SQL Server, Oracle SQL
2. NoSQL (Non-Relational Database)
- 비관계형 데이터베이스로, 유연한 스키마와 대규모 데이터 처리에 적합함
- mongoDB, Redis, DynamoDB, couchDB ...
ORM (Object Relational Mapping)
프로그래밍 언어로 작성된 코드를 가져와서 SQL 코드로 바꿔주는 일을 함
데이터베이스 작업을 객체 지향적 방식으로 추상화하여 개발자가 SQL을 직접 작성하지 않고도 데이터베이스를 조작할 수 있게해줌
주요 ORM
- Python: Django ORM, SQLAlchemy
- PHP: Laravel Eloquent ORM
- Node.js: Sequelize, TypeORM
- Java: Hibernate
- .NET: Entity Framework
주의사항
- 개발자가 ORM에 지나치게 의존하면 SQL과 데이터베이스에 대한 이해가 부족해질 수 있음
- 복잡한 쿼리의 경우 ORM이 생성한 SQL이 최적화되지 않을 수 있음
- ORM의 편의성을 활용하되, SQL과 데이터베이스 원리에 대한 기본 지식을 유지하는 것이 중요