1. 서브쿼리(Subquery)란?
쿼리 안에 들어가는 또 다른 쿼리입니다.
주로 WHERE, SELECT, FROM 안에서 사용되어 조건을 정하거나, 특정 값을 계산할 때 유용합니다.
SELECT * FROM students WHERE age > (SELECT AVG(age) FROM students);
- (SELECT AVG(age)...) 이 부분이 서브쿼리입니다.
- 전체 학생의 평균 나이보다 나이가 많은 사람만 조회합니다.
2. 뷰(View)
(1) 뷰란?
조회용 쿼리 결과를 가상의 테이블처럼 저장하는 것입니다.
복잡한 쿼리를 매번 다시 쓰지 않고 SELECT * FROM 뷰이름으로 간단하게 불러올 수 있어요.
(2) 사용 예시
- CREATE VIEW furniture_products AS SELECT * FROM products WHERE category = 'Furniture';
이렇게 길게 쓰지 않고 아래 처럼 짧게 사용가능 합니다.
- SELECT * FROM furniture_products;
3. 트랜잭션(Transaction)
(1) 트랜잭션이란?
여러 SQL 작업을 하나의 묶음으로 실행하는 기능입니다.
예를 들어 돈을 보내고 받는 두 작업이 동시에 성공하거나, 동시에 실패해야 할 때 꼭 필요합니다.
(2) 기본 구조
BEGIN; -- 트랜잭션 시작
UPDATE accounts SET balance = balance - 100 WHERE id = 1; -- 동시에 하길 원하는 작업을 실행하는 부분 입니다.
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 모든 작업 성공 시 적용 --
또는
ROLLBACK; -- 문제 생기면 전부 취소
4. 인덱스(Index)
(1) 인덱스란?
책의 목차처럼, 테이블에서 원하는 데이터를 빠르게 찾기 위해 만들어지는 구조입니다.
대량의 데이터를 다룰 때 필수이며, WHERE, JOIN, ORDER BY 등에 큰 영향을 줍니다.
(2) 기본 인덱스
- CREATE INDEX idx_products_category_price ON products (category, price);
- 위와 같이 인덱스를 만들 수있습니다. 만든 인덱스를 활용 하려 검색 한다면 더 빠른 처리가 가능합니다.
- SELECT * FROM products WHERE category = 'Furniture';
(3) 복합 인덱스란?
- 여러 컬럼을 동시에 기준으로 삼는 인덱스
- 예: CREATE INDEX idx_users_name_age ON users (name, age);
- 주로 정렬 할때 사용 됩니다.
6. 마무리 요약
| 서브쿼리 | 쿼리 안에서 조건 또는 값을 계산 |
| 뷰 | 자주 쓰는 쿼리를 저장해 재사용 |
| 트랜잭션 | 여러 작업을 하나로 묶어 처리 |
| 인덱스 | 검색/조회 속도 향상 |
'공부 내용 정리' 카테고리의 다른 글
| Repository란? (0) | 2025.08.12 |
|---|---|
| Entity란? (0) | 2025.08.11 |
| SQL 기본 문법 정리 (3) | 2025.08.07 |
| NestJS 스케줄러란? (2) | 2025.08.05 |
| RESTful 설계란? (1) | 2025.08.04 |