찾다
데이터 베이스SQLSQL Deep Dive : 마스터 링 창 함수, 공통 테이블 표현식 (CTE) 및 저장 절차

SQL은 세 가지 강력한 기능, 즉 창 함수, 공통 테이블 표현식 (CTE) 및 저장 프로 시저를 제공합니다. 1. 창 함수는 데이터 세트를 변경하지 않고 그룹화 및 정렬 작업을 허용합니다. 2. CTE는 복잡한 쿼리를 단순화하기 위해 임시 결과 세트를 제공합니다. 3. 저장된 절차는 효율성과 일관성을 향상시키기 위해 반복적으로 실행할 수있는 사전 컴파일 된 SQL 코드 블록입니다.

소개

데이터 중심의 세계에서 SQL은 쿼리 언어 일뿐 만 아니라 예술이기도합니다. 오늘날 우리는 SQL의 세 가지 강력한 기능, 즉 창 함수, 공통 테이블 표현식 (CTE) 및 저장 절차로 뛰어들 것입니다. 이 기사를 통해 이러한 도구를 사용하여 복잡한 데이터 문제를 처리하고 SQL 기술을 향상 시키며 데이터 분석 및 관리를 편하게하는 방법을 배웁니다.

기본 지식 검토

SQL의 매력은 단순성과 강력한 기능에 있습니다. 창 함수를 사용하면 데이터 세트를 변경하지 않고 데이터를 그룹화하고 정렬 할 수 있습니다. CTE는 복잡한 쿼리를보다 읽기 쉽고 관리 할 수있는 임시 결과 세트 방법을 제공합니다. 저장된 절차는 효율성과 일관성을 향상시키기 위해 반복적으로 실행할 수있는 사전 컴파일 된 SQL 코드 블록입니다.

핵심 개념 또는 기능 분석

창 함수

창 함수는 데이터 세트를 변경하지 않고 데이터를 그룹화하고 정렬 할 수있는 SQL의 마법 도구입니다. 이동 평균, 순위, 누적 합계 등을 계산하는 데 도움이 될 수 있기 때문에 데이터 분석에 매우 유용합니다.

 선택하다 
    Employee_id,
    급여,
    AVG_DEPARTMENT_SALARY로 AVG (SALARY) OVER (부서 별 파티),
    salary_rank로 랭크 () 오버 (Salary desc의 주문)
에서 
    직원;

이 예에서는 각 직원 부서의 평균 급여를 계산하고 급여에 따라 직원을 순위합니다. 윈도우 함수의 힘은 하위 쿼리 또는 자체 주인을 사용하지 않고 동일한 쿼리에서 여러 계산을 수행 할 수 있다는 것입니다.

공통 테이블 표현식 (CTE)

CTE는 SQL의 임시 결과 세트이며 복잡한 쿼리의 구조를 단순화하고 코드를보다 읽기 쉽고 유지 관리합니다. CTE는 재귀 쿼리에 특히 유용합니다.

 재귀 적 Employee_hierarchy as (
    Employee_id, manager_id, 0을 레벨로 선택하십시오
    직원들로부터
    여기서 manager_id가 null입니다
    모두
    e.employee_id, e.manager_id, eh.level 1을 선택하십시오
    직원으로부터 e
    E.Manager_id = eh.employee_id에서 Employee_hierarchy eh에 가입하십시오
))
Employee_hierarchy에서 *를 선택하십시오.

이 예에서는 CTE를 사용하여 직원의 계층 구조를 구축합니다. CTE의 재귀 적 특성을 통해 복잡한 자기 연결 쿼리를 작성하지 않고 직원 트리 전체를 쉽게 가로 질러 쉽게 통과 할 수 있습니다.

저장된 절차

저장된 절차는 반복적으로 실행될 수있는 SQL 코드의 사전 컴파일 블록입니다. 네트워크 트래픽과 컴파일 시간을 줄이기 때문에 복잡한 논리를 수행하거나 성능을 향상시켜야 할 때 유용합니다.

 프로 시저 생성 get_employee_details (in emp_id int)
시작하다
    선택하다 
        e.employee_id,
        e.first_name,
        e.last_name,
        d.department_name
    에서 
        직원 e
    가입하다 
        Department_id = d.department_id의 부서 d
    어디 
        e.employee_id = emp_id;
끝;

이 예에서는 직원 세부 정보를 얻기 위해 저장된 절차를 만듭니다. 저장된 절차의 장점은 복잡한 논리를 캡슐화하고 여러 번 호출하여 코드 재사용 성과 일관성을 향상시킬 수 있다는 것입니다.

사용의 예

기본 사용

창 함수의 기본 사용은 매우 간단합니다. OVER 절을 사용하여 창을 정의하고 다양한 집계 함수를 사용하여 결과를 계산할 수 있습니다.

 선택하다 
    product_id,
    sale_date,
    Sale_amount,
    sum (sale_amount) over (sale_date에 의해 product_id order by sale_date)
에서 
    매상;

이 예에서는 각 제품의 누적 판매량을 계산합니다. 조항 PARTITION BY 그룹 데이터와 ORDER BY Windows의 순서를 정의합니다.

CTE의 기본 사용도 매우 간단합니다. WITH 키워드를 사용하여 CTE를 정의한 다음 후속 쿼리로 참조 할 수 있습니다.

 top_sellers와 함께 (
    Product_id, sum (sale_amount)을 Total_sales로 선택하십시오
    판매에서
    product_id에 의해 그룹
    Total_sales desc의 주문
    제한 10
))
top_sellers에서 *를 선택하십시오.

이 예에서는 CTE를 사용하여 판매가 가장 높은 10 개의 제품을 찾습니다. CTE는 쿼리 구조를 더 명확하고 쉽게 관리 할 수 ​​있도록합니다.

저장된 절차의 기본 사용도 매우 간단합니다. CREATE PROCEDURE 문을 사용하여 저장된 프로 시저를 정의한 다음 CALL 문을 사용하여 호출 할 수 있습니다.

 get_employee_details (1);

이 예에서는 이전에 정의 된 저장된 절차를 호출하여 직원 ID 1로 직원 세부 정보를 얻습니다.

고급 사용

창 함수의 고급 사용에는 ROWS 또는 RANGE 조항을 사용하여 창의 범위를 정의하고 전면 및 후면 행의 데이터에 액세스하기 위해 LAGLEAD 기능을 사용하는 것이 포함됩니다.

 선택하다 
    product_id,
    sale_date,
    Sale_amount,
    lag (sale_amount) Over (prevery_date의 product_id 주문에 의한 파티션), previous_sale,
    lead (sale_amount) over (sale_date의 product_id 주문에 의한 파티션) next_sale으로
에서 
    매상;

이 예에서는 LAGLEAD 기능을 사용하여 각 제품의 이전 및 다음 판매를 얻습니다. 이러한 고급 사용량은보다 복잡한 데이터 분석을 수행하는 데 도움이 될 수 있습니다.

CTE의 고급 사용에는 재귀 CTE를 사용하여 계층 적 데이터를 처리하고 복잡한 쿼리를 단순화하기 위해 여러 CTE를 사용하는 것이 포함됩니다.

 재귀 범주 _hierarchy as (
    범주 _id, parent_category_id, 0을 레벨로 선택하십시오
    카테고리에서
    여기서 parent_category_id는 null입니다
    모두
    C.category_id, c.parent_category_id, ch.level 1을 선택하십시오
    카테고리에서 c
    c.parent_category_id = ch.category_id에서 category_hierarchy ch에 가입하십시오
),)
product_categories as (
    p.product_id, ch.category_id, ch.level을 선택하십시오
    제품에서 p
    p.category_id = ch.category_id에서 category_hierarchy ch에 가입하십시오
))
Product_Categories에서 *를 선택하십시오.

이 예에서는 재귀 CTE를 사용하여 제품 범주의 계층 구조를 구축 한 다음 다른 CTE를 사용하여 제품을 해당 카테고리와 연결합니다. 이러한 고급 사용량은 복잡한 계층 적 데이터를 처리하는 데 도움이 될 수 있습니다.

저장된 절차의 고급 사용에는 복잡한 비즈니스 논리를 구현하기 위해 커서 사용, 예외 처리 및 거래 관리가 포함됩니다.

 프로 시저 작성 update_employee_salary (emp_id int, new_salary decimal (10, 2))
시작하다
    Sqlexection에 대한 Exit 핸들러를 선언하십시오
    시작하다
        롤백;
        사임;
    끝;

    트랜잭션 시작;
    직원 업데이트
    SALARY = NEW_SALARY를 설정하십시오
    여기서 Employee_id = emp_id;
    저지르다;
끝;

이 예에서는 직원 급여를 업데이트하기위한 저장된 절차를 만듭니다. 저장된 절차는 트랜잭션 관리 및 예외 처리를 사용하여 데이터 일관성 및 무결성을 보장합니다.

일반적인 오류 및 디버깅 팁

창 함수를 사용할 때 일반적인 실수는 OVER 절을 사용하는 것을 잊어 버리는 것입니다. 이로 인해 SQL 엔진이 창 함수를 올바르게 구문 분석하지 못하게됩니다.

 - 오류 예제 선택 
    Employee_id,
    급여,
    AVG (SALARY) - 조항에서 누락 
    직원;

이 오류를 피하려면 창 함수를 사용할 때 OVER 항이 항상 포함되어 있는지 확인하십시오.

CTE를 사용할 때 일반적인 실수는 CTE의 모든 필수 열을 정의하는 것을 잊어 버리는 것입니다. 이로 인해 후속 쿼리는 CTE에서 데이터를 올바르게 참조하지 못합니다.

 - top_sellers as (top_sellers as)의 오류 예제
    Product_ID를 선택하십시오 -Total_Sales 열은 판매에서 누락되었습니다
    product_id에 의해 그룹
    Total_sales desc의 주문
    제한 10
))
top_sellers에서 *를 선택하십시오.

이 오류를 피하려면 CTE를 정의 할 때 필요한 모든 열을 포함하십시오.

저장된 절차를 사용할 때 일반적인 실수는 예외를 처리하는 것을 잊는 것입니다. 이로 인해 저장된 절차가 오류가 발생할 때 트랜잭션을 올바르게 롤백하지 못할 수 있습니다.

 - 오류 예제 프로 시저 생성 update_employee_salary (emp_id int, in new_salary decimal (10, 2))
시작하다
    직원 업데이트
    SALARY = NEW_SALARY를 설정하십시오
    여기서 Employee_id = emp_id;
끝;

이 오류를 피하려면 저장된 절차에 예외 처리 및 트랜잭션 관리를 포함시켜야합니다.

성능 최적화 및 모범 사례

창 함수를 사용하는 경우 성능 최적화의 핵심 사항은 적절한 창 프레임을 선택하는 것입니다. ROWS 이나 RANGE 조항을 사용하면 쿼리 성능이 크게 향상 될 수 있습니다.

 - 최적화 예제 선택 
    product_id,
    sale_date,
    Sale_amount,
    sum (sale_amount) Over (runching_total과 같이 Unbounded Preceding과 현재 행 사이의 Sale_Date 행에 의한 Product_id 순서에 의한 파티션)
에서 
    매상;

이 예에서는 ROWS 절단을 사용하여 쿼리 성능을 향상시킬 수있는 창 프레임 워크를 정의합니다.

CTE를 사용할 때 성능 최적화의 핵심 사항은 CTE에서 복잡한 계산을 사용하지 않는 것입니다. CTE는 복잡한 계산이 포함 된 경우 쿼리 성능에 영향을 줄 수있는 임시 결과 세트입니다.

 - sales_summary as (sales_summary as)의 최적화 예제
    Product_id, sum (sale_amount)을 Total_sales로 선택하십시오
    판매에서
    product_id에 의해 그룹
))
sales_summary에서 *를 선택하십시오.

이 예에서는 쿼리 성능을 향상시키기 위해 CTE 이외의 복잡한 계산을 넣습니다.

저장 프로 시저를 사용하는 경우 성능 최적화의 핵심 사항은 저장된 절차에서 커서를 사용하지 않는 것입니다. 커서는 데이터 라인별로 처리해야하므로 성능 저하를 유발할 수 있습니다.

 - 최적화 예제 프로 시저 업데이트 update_employee_salaries ()
시작하다
    직원 업데이트
    급여 설정 = 급여 * 1.1;
끝;

이 예에서는 커서를 사용하지 않고 배치 업데이트 작업을 사용하여 성능을 향상시킵니다.

SQL 코드를 작성할 때 모범 사례에는 의미있는 별칭 사용, 코드 주석, 코드를 읽을 수 있고 유지 관리 가능하게 유지하는 것이 포함됩니다.

 - 모범 사례 예제 선택 
    e.employee_id as Emp_id, - 의미있는 별칭 사용 e.first_name, - 댓글 코드 e.last_name,
    D.DEPARTMENT_NAME- 코드 가독성과 유지 관리를 유지하십시오 
    직원 e
가입하다 
    e.department_id = d.department_id의 부서 d;

이러한 모범 사례를 따르면보다 효율적이고 유지 관리 가능한 SQL 코드를 작성할 수 있습니다.

SQL을 탐색하는 과정에서, 우리는 창 함수, CTE 및 저장 절차의 기본 및 고급 사용량을 마스터했을뿐만 아니라 일반적인 오류를 피하고 성능을 최적화하는 방법을 배웠습니다. 이 기사가 이러한 강력한 SQL 기능을 더 잘 이해하고 적용하고 데이터 분석 및 관리에서 더 큰 성공을 달성하도록 도와주기를 바랍니다.

위 내용은 SQL Deep Dive : 마스터 링 창 함수, 공통 테이블 표현식 (CTE) 및 저장 절차의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
SQL Action : 실제 예제 및 사용 사례SQL Action : 실제 예제 및 사용 사례Apr 18, 2025 am 12:13 AM

실제 애플리케이션에서 SQL은 주로 데이터 쿼리 및 분석, 데이터 통합 ​​및보고, 데이터 청소 및 전처리, 고급 사용 및 최적화에 사용되며 복잡한 쿼리를 처리하고 일반적인 오류를 피합니다. 1) 데이터 쿼리 및 분석을 사용하여 가장 많은 판매 제품을 찾을 수 있습니다. 2) 데이터 통합 ​​및보고는 가입 운영을 통해 고객 구매 보고서를 생성합니다. 3) 데이터 청소 및 전처리는 비정상적인 연령 기록을 삭제할 수 있습니다. 4) 고급 사용 및 최적화에는 창 함수 사용 및 인덱스 생성이 포함됩니다. 5) CTE 및 조인은 SQL 주입과 같은 일반적인 오류를 피하기 위해 복잡한 쿼리를 처리하는 데 사용될 수 있습니다.

SQL 및 MySQL : 핵심 차이 이해SQL 및 MySQL : 핵심 차이 이해Apr 17, 2025 am 12:03 AM

SQL은 관계형 데이터베이스를 관리하는 표준 언어이며 MySQL은 특정 데이터베이스 관리 시스템입니다. SQL은 통합 구문을 제공하며 다양한 데이터베이스에 적합합니다. MySQL은 가볍고 오픈 소스이며 안정적인 성능을 보이지만 빅 데이터 처리에는 병목 현상이 있습니다.

SQL : 초보자를위한 학습 곡선SQL : 초보자를위한 학습 곡선Apr 16, 2025 am 12:11 AM

SQL 학습 곡선은 가파르지만 연습과 핵심 개념을 이해함으로써 마스터 할 수 있습니다. 1. 기본 작업에는 선택, 삽입, 업데이트, 삭제가 포함됩니다. 2. 쿼리 실행은 분석, 최적화 및 실행의 세 단계로 나뉩니다. 3. 기본 사용법은 직원 정보 쿼리와 같은 것이며 고급 사용량은 결합 연결 테이블 사용과 같은 것입니다. 4. 일반적인 오류에는 별칭 및 SQL 주입을 사용하지 않는 것이 포함되며,이를 방지하려면 매개 변수화 쿼리가 필요합니다. 5. 필요한 열을 선택하고 코드 가독성을 유지함으로써 성능 최적화가 달성됩니다.

SQL : 명령, MySQL : 엔진SQL : 명령, MySQL : 엔진Apr 15, 2025 am 12:04 AM

SQL 명령은 MySQL에서 DQL, DDL, DML, DCL 및 TCL의 5 가지 범주로 나뉘어 데이터베이스 데이터를 정의, 운영 및 제어하는 ​​데 사용됩니다. MySQL은 어휘 분석, 구문 분석, 최적화 및 실행을 통해 SQL 명령을 처리하고 인덱스 및 쿼리 최적화기를 사용하여 성능을 향상시킵니다. 사용의 예로는 데이터 쿼리에 대한 선택 및 다중 테이블 작업에 가입하는 것이 포함됩니다. 일반적인 오류에는 구문, 논리 및 성능 문제가 포함되며 최적화 전략에는 인덱스 사용, 쿼리 최적화 및 올바른 저장 엔진 선택이 포함됩니다.

데이터 분석을위한 SQL : 비즈니스 인텔리전스를위한 고급 기술데이터 분석을위한 SQL : 비즈니스 인텔리전스를위한 고급 기술Apr 14, 2025 am 12:02 AM

SQL의 고급 쿼리 기술에는 하위 쿼리, 창 함수, CTE 및 복잡한 조인이 포함되어 복잡한 데이터 분석 요구 사항을 처리 할 수 ​​있습니다. 1) 하위 쿼리는 각 부서에서 급여가 가장 높은 직원을 찾는 데 사용됩니다. 2) 창 함수와 CTE는 직원 급여 성장 ​​동향을 분석하는 데 사용됩니다. 3) 성능 최적화 전략에는 인덱스 최적화, 쿼리 재 작성 및 파티션 테이블 사용이 포함됩니다.

MySQL : SQL의 특정 구현MySQL : SQL의 특정 구현Apr 13, 2025 am 12:02 AM

MySQL은 표준 SQL 기능 및 확장을 제공하는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) MySQL은 한계 조항을 작성, 삽입, 업데이트, 삭제 및 확장과 같은 표준 SQL 작업을 지원합니다. 2) Innodb 및 Myisam과 같은 스토리지 엔진을 사용하여 다양한 시나리오에 적합합니다. 3) 사용자는 테이블 작성, 데이터 삽입 및 저장 프로 시저를 사용하는 것과 같은 고급 기능을 통해 MySQL을 효율적으로 사용할 수 있습니다.

SQL : 모든 사람이 데이터 관리에 액세스 할 수 있도록합니다SQL : 모든 사람이 데이터 관리에 액세스 할 수 있도록합니다Apr 12, 2025 am 12:14 AM

sqlmakesdatamanagementaCcessibletoallbyprovingasimpleyetpooltooltoolforqueryinganddatabases.1) itworkswithrelationalDatabases.2) sql'sstrengthliesinfiltering, andjoiningdata, andjoiningdata, andjoiningdata

SQL 인덱싱 전략 : 쿼리 성능 향상 순서SQL 인덱싱 전략 : 쿼리 성능 향상 순서Apr 11, 2025 am 12:04 AM

SQL 인덱스는 영리한 설계를 통해 쿼리 성능을 크게 향상시킬 수 있습니다. 1. B- 트리, 해시 또는 전문 지수와 같은 적절한 인덱스 유형을 선택하십시오. 2. 복합 인덱스를 사용하여 멀티 필드 쿼리를 최적화하십시오. 3. 데이터 유지 보수 오버 헤드를 줄이려면 과도한 인덱스를 피하십시오. 4. 불필요한 인덱스 재건 및 제거를 포함하여 정기적으로 인덱스를 유지합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기