공부 내용 정리

SQL 고급 기능

blockchoin 2025. 8. 8. 17:00

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