|
|
(다른 사용자 한 명의 중간 판 3개는 보이지 않습니다) |
1번째 줄: |
1번째 줄: |
| ==전체 텍스타 검색 (match)== | | ==전체 텍스트 검색 (match)== |
| <source lang=sql> | | <source lang=sql> |
| -- 제품 설명에서 '커피'와 관련된 단어 검색 (MySQL 예제) | | -- 제품 설명에서 '커피'와 관련된 단어 검색 (MySQL 예제) |
18번째 줄: |
18번째 줄: |
| - 단순 LIKE 검색보다 훨씬 빠른 성능 | | - 단순 LIKE 검색보다 훨씬 빠른 성능 |
| - 불린 모드, 자연어 모드 등 다양한 검색 방식 지원 | | - 불린 모드, 자연어 모드 등 다양한 검색 방식 지원 |
|
| |
| == 테이블 샘플링 (Table Sampling) ==
| |
| <source lang=sql>
| |
| -- 대용량 테이블에서 10% 무작위 샘플 조회 (PostgreSQL 예제)
| |
| SELECT *
| |
| FROM large_sales_data TABLESAMPLE SYSTEM(10);
| |
|
| |
| -- 특정 행 수만큼 샘플링 (Oracle 예제)
| |
| SELECT *
| |
| FROM customer_transactions SAMPLE(1000 ROWS);
| |
| </source>
| |
|
| |
| **설명**:
| |
| - 대용량 테이블에서 무작위 샘플 데이터 추출
| |
| - 데이터 분석이나 테스트 시 유용
| |
| - `SYSTEM` 방식(블록 샘플링)과 `BERNOULLI` 방식(행 단위 샘플링) 차이 이해 필요
| |
|
| |
| == 임시 테이블 (Temporary Tables) ==
| |
|
| |
| <source lang=sql>
| |
| -- 세션 동안만 유지되는 임시 테이블 생성 (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;
| |
| </source>
| |
|
| |
|
| |
| **설명**:
| |
| - 세션이나 트랜잭션 동안만 존재하는 임시 테이블
| |
| - 중간 결과 저장이나 복잡한 쿼리 분해 시 유용
| |
| - 데이터베이스 종류에 따라 생성 문법이 다름(#, TEMPORARY, GLOBAL TEMPORARY 등)
| |
|
| |
| == 동적 SQL (Dynamic SQL) ==
| |
|
| |
| <source lang=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);
| |
| </source>
| |
|
| |
|
| |
| **설명**:
| |
| - 런타임에 SQL 문을 동적으로 생성하고 실행
| |
| - 조건에 따라 다른 컬럼, 테이블, 조건을 사용할 때 필요
| |
| - SQL 인젝션 공격 방지를 위해 반드시 입력 값 검증 필요
| |