메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
편집 요약 없음
편집 요약 없음
 
18번째 줄: 18번째 줄:
- 단순 LIKE 검색보다 훨씬 빠른 성능
- 단순 LIKE 검색보다 훨씬 빠른 성능
- 불린 모드, 자연어 모드 등 다양한 검색 방식 지원
- 불린 모드, 자연어 모드 등 다양한 검색 방식 지원
{{:테이블 샘플링 (Table Sampling)}}
== 임시 테이블 (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 인젝션 공격 방지를 위해 반드시 입력 값 검증 필요

2025년 5월 30일 (금) 18:14 기준 최신판

전체 텍스트 검색 (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 검색보다 훨씬 빠른 성능 - 불린 모드, 자연어 모드 등 다양한 검색 방식 지원