전체 텍스타 검색 (match)
-- 제품 설명에서 '커피'와 관련된 단어 검색 (MySQL 예제) SELECT product_name, description FROM products WHERE MATCH(description) AGAINST('+커피 -디카페인' IN BOOLEAN MODE); -- 검색 결과 관련성 순으로 정렬 SELECT product_name, description, MATCH(description) AGAINST('에스프레소 머신') AS relevance_score FROM products WHERE MATCH(description) AGAINST('에스프레소 머신') ORDER BY relevance_score DESC;
- 설명**:
- 대량의 텍스트 데이터에서 효율적으로 검색 - 단순 LIKE 검색보다 훨씬 빠른 성능 - 불린 모드, 자연어 모드 등 다양한 검색 방식 지원
테이블 샘플링 (Table Sampling)
-- 대용량 테이블에서 10% 무작위 샘플 조회 (PostgreSQL 예제) SELECT * FROM large_sales_data TABLESAMPLE SYSTEM(10); -- 특정 행 수만큼 샘플링 (Oracle 예제) SELECT * FROM customer_transactions SAMPLE(1000 ROWS);
- 설명**:
- 대용량 테이블에서 무작위 샘플 데이터 추출 - 데이터 분석이나 테스트 시 유용 - `SYSTEM` 방식(블록 샘플링)과 `BERNOULLI` 방식(행 단위 샘플링) 차이 이해 필요
임시 테이블 (Temporary Tables)
-- 세션 동안만 유지되는 임시 테이블 생성 (SQL Server 예제) CREATE TEMPORARY TABLE #temp_top_customers ( customer_id INT, total_spent DECIMAL(10,2) ); -- 임시 테이블에 데이터 삽입 INSERT INTO #temp_top_customers SELECT customer_id, SUM(amount) FROM orders GROUP BY customer_id HAVING SUM(amount) > 10000; -- 임시 테이블 조회 SELECT * FROM #temp_top_customers ORDER BY total_spent DESC;
- 설명**:
- 세션이나 트랜잭션 동안만 존재하는 임시 테이블 - 중간 결과 저장이나 복잡한 쿼리 분해 시 유용 - 데이터베이스 종류에 따라 생성 문법이 다름(#, TEMPORARY, GLOBAL TEMPORARY 등)
동적 SQL (Dynamic SQL)
-- 조건에 따라 다른 쿼리 실행 (MySQL 저장 프로시저 예제) DELIMITER // CREATE PROCEDURE get_employee_data(IN dept_id INT, IN min_salary DECIMAL) BEGIN SET @sql = CONCAT('SELECT * FROM employees WHERE department_id = ', dept_id); IF min_salary IS NOT NULL THEN SET @sql = CONCAT(@sql, ' AND salary >= ', min_salary); END IF; SET @sql = CONCAT(@sql, ' ORDER BY last_name;'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END // DELIMITER ; -- 프로시저 호출 CALL get_employee_data(5, 50000);
- 설명**:
- 런타임에 SQL 문을 동적으로 생성하고 실행 - 조건에 따라 다른 컬럼, 테이블, 조건을 사용할 때 필요 - SQL 인젝션 공격 방지를 위해 반드시 입력 값 검증 필요