목차
상관 된 하위 쿼리를 사용하여 존재합니다
성능 고려 사항
데이터 베이스 SQL SQL에서 상관 관계 서브 쿼리를 사용하는 방법

SQL에서 상관 관계 서브 쿼리를 사용하는 방법

Aug 18, 2025 am 10:17 AM

상관 관계 서브 쿼리는 외부 쿼리에 의존하는 SQL 서브 쿼리이며 행당 한 번 실행하고 외부 쿼리 열을 참조합니다. 2. 그것은 부서의 평균 급여를 초과하는 직원을 찾는 것과 같은 행 별 비교에 사용됩니다. 3. 구문에는 두 쿼리에서 부서 _id를 상관시키는 것처럼 외부 쿼리의 열을 참조하는 내부 쿼리가 포함됩니다. 4. 상관 된 하위 쿼리는 직원이없는 부서 식별과 같은 관련 기록을 확인하기 위해 존재하거나 존재하지 않는 경우에도 효과적입니다. 5. 반복적 인 실행으로 인해 대규모 데이터 세트에서 느려질 수 있으므로 Department_ID와 같은 상관 된 열을 색인화하는 것이 중요합니다. 6. 성능을 결합 또는 창 함수로 교체하여 성능을 향상시킬 수 있으며, 이는 결과를보다 효율적으로 계산합니다. 7. 최적의 쿼리 실행을 보장하기 위해 항상 인덱스가 있거나없는 대안 및 테스트 성능을 평가하십시오.

SQL에서 상관 관계 서브 쿼리를 사용하는 방법

SQL의 상관 관계 서브 쿼리는 해당 값의 외부 쿼리에 의존하는 하위 쿼리입니다. 외부 쿼리로 처리 된 각 행에 대해 한 번 실행되므로 행으로 비교 또는 조회에 유용합니다. 독립적으로 실행되는 일반 하위 Queries와 달리 상관 된 하위 쿼리는 반복적으로 평가되며 (행당 최대) 외부 쿼리에서 열을 참조 할 수 있습니다.

상관 관계 하위 쿼리를 효과적으로 사용하는 방법은 다음과 같습니다.


상관 관계 서브 쿼리를 사용하는시기

상관 된 하위 쿼리는 기본 쿼리의 값을 관련 데이터 세트의 집계 또는 특정 조건과 비교해야 할 때 이상적입니다. 일반적인 사용 사례는 다음과 같습니다.

  • 값이 그룹의 평균 위 또는 아래에있는 레코드를 찾습니다.
  • 관련 레코드가 일치하지 않는 행을 식별합니다 (예 : 프로젝트가없는 직원).
  • 각 행을 다른 테이블에서 동적으로 계산 된 값과 비교합니다.

기본 구문 및 예제

주요 기능은 내부 쿼리가 외부 쿼리에서 열을 참조한다는 것입니다.

 outer_column을 선택하십시오
표 1 T1에서
여기서 조건 = (
    Agregate_function (t2.column)을 선택하십시오.
    표 2 T2에서
    여기서 t2.related_id = t1.id
);

예 : 부서의 평균 급여보다 더 많은 직원을 찾으십시오.

두 테이블을 가정하십시오.

  • employees : ID, 이름, 급여, Department_ID
  • departments : ID, 이름
 e.Name, e.salary, e.department_id를 선택하십시오
직원으로부터 e
여기서 e.salary> (
    선택 AVG (E2.Salary)
    직원으로부터 E2
    여기서 e2.department_id = e.department_id
);

이 쿼리에서 :

  • 외부 쿼리는 각 직원을 선택합니다.
  • 하위 퀘스트는 해당 직원 부서의 평균 급여를 계산합니다.
  • 하위 쿼리는 외부 쿼리에서 e.department_id 사용하여 직원 당 한 번 실행됩니다.

상관 된 하위 쿼리를 사용하여 존재합니다

가장 효율적인 용도 중 하나는 관련 레코드를 테스트하는 EXISTS 입니다.

예 : 직원이없는 부서를 찾으십시오

 D.Name을 선택하십시오
부서에서 d
존재하지 않는 곳 (
    선택 1
    직원으로부터 e
    여기서 e.department_id = d.id
);

이것은 각 부서를 점검하고 일치하는 직원이없는 경우에만 반환합니다. 하위 퀘스트는 d.id 통해 상관됩니다.

왜 사용이 EXISTS ?

  • 한 번의 경기가 발견 되 자마자 중지됩니다 (효율적).
  • 부울 조건에 이상적입니다 (존재/존재하지 않음).

성능 고려 사항

강력하지만 상관 관계가있는 하위 쿼리는 행당 한 번 실행할 수 있으므로 느리게 할 수 있습니다. 최적화 :

  • 상관 관계 (예 : department_id )에 사용 된 열에서 적절한 인덱싱을 확인하십시오.
  • 가능한 경우 JOIN S 또는 창 함수로 다시 쓰기를 고려하십시오.

창 함수를 사용하는 대안 (종종 더 빠른) :

 이름, 급여, Department_id를 선택하십시오
에서 (
    선택 이름, 급여, 부서 _id,
           avg_dept_salary로 avg (Salary) Over (Decration_ID에 의한 파티션)
    직원들로부터
) e
급여> AVG_DEPT_SALARY;

이것은 반복되는 하위 쿼리를 피하고 일반적으로 대형 데이터 세트에서 더 잘 수행합니다.


기억해야 할 핵심 요점

  • 상관 관계 서브 쿼리는 외부 쿼리에서 열을 참조합니다 .
  • 외부 쿼리의 각 행에 대해 한 번 실행됩니다.
  • 관련 데이터의 존재 / 부재를 확인하기 위해 사용 EXISTS 하거나 NOT EXISTS .
  • 시계 성능 - 큰 테이블에서는 상관 관계가있는 서브 쿼리가 느리게 될 수 있습니다.
  • 항상 인덱스 유무에 관계없이 테스트하고 JOIN S 또는 창 함수와 같은 대안을 고려하십시오.

기본적으로, 상관 된 하위 쿼리는 테이블을 가로 질러 저수준 비교를위한 유연한 도구이지만 신중하게 사용해야합니다.

위 내용은 SQL에서 상관 관계 서브 쿼리를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Stock Market GPT

Stock Market GPT

더 현명한 결정을 위한 AI 기반 투자 연구

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제

열을 SQL의 여러 값과 비교하는 방법은 무엇입니까? 열을 SQL의 여러 값과 비교하는 방법은 무엇입니까? Sep 16, 2025 am 02:12 AM

IN 연산자를 사용하여 열을 선택*Fromployeeswheredepartment_idin (1,2,3)과 같은 여러 값과 효율적으로 비교하십시오. 여러 값이 제외되면 NOTIN을 사용하지만 결과에 영향을 미치는 NULL에주의하십시오.

SQL에서 음성 검색에 Soundex 기능을 사용하는 방법은 무엇입니까? SQL에서 음성 검색에 Soundex 기능을 사용하는 방법은 무엇입니까? Sep 21, 2025 am 01:54 AM

SoundEx 함수는 텍스트를 발음을 나타내는 4 자리 코드로 변환하고 첫 번째 문자에 3 자리를 추가하고 모음과 특정 문자를 무시하며, 유사한 발음을 가진 자음을 동일한 숫자로 맵핑하여 발음 기반 검색을 실현합니다. 예를 들어, Smith와 Smythe는 모두 S530을 생성하고 유사한 발음을 가진 이름은 Wheresoundex (last_name) = soundex ( 'Smith')를 통해 찾을 수 있습니다. 차이 함수와 결합하여 유사성 점수 0에서 4의 유사성 점수를 반환하고, 발음 닫기 결과를 필터링 할 수 있으며, 이는 철자 차이를 다루는 데 적합하지만 영어 이외의 이름에 영향을 미치며 성능 최적화에주의를 기울여야합니다.

SQL의 테이블 또는 열에 주석을 추가하는 방법은 무엇입니까? SQL의 테이블 또는 열에 주석을 추가하는 방법은 무엇입니까? Sep 21, 2025 am 05:22 AM

UseCommentOncolumnoraltertablewithCommentTodocumentTables 및 ColumnsInsql; syntaxvariesBydbms - postgresqlandoracleUsecommenton, mysqlusescommentincreate/alterstatements 및 andcommentscanbeviewedviasystemtablikedinformation_schema, rantsuppport.

SQL의 서브 쿼리와 CTE의 차이점은 무엇입니까? SQL의 서브 쿼리와 CTE의 차이점은 무엇입니까? Sep 16, 2025 am 07:47 AM

하위 쿼리는 다른 쿼리에 중첩 된 쿼리입니다. 그들은 간단한 일회성 계산에 적합하며, 선택,에서 또는 시점에 위치 할 수 있습니다. 2. CTE는 복잡한 쿼리의 가독성을 향상시키고 재귀 및 다중 참조를 지원하기 위해 조항으로 정의됩니다. 3. 하위 쿼리는 단일 사용에 적합하며 CTE는 명확한 구조, 재사용 또는 재귀가 필요한 시나리오에 더 적합합니다.

SQL에서 마지막 삽입 ID를 얻는 방법은 무엇입니까? SQL에서 마지막 삽입 ID를 얻는 방법은 무엇입니까? Sep 20, 2025 am 04:40 AM

TogetThelastInsertedid, usedatabase-specificftions : mysqluseslast_insert_id (), postgresqlusesreturningclause, sqlserverusesscope_identity () oroutput, andsqliteuseslast_insert_rowid (); 항상 callcrightrightterafttoccuracy.

SQL 테이블에서 고아 기록을 찾는 방법은 무엇입니까? SQL 테이블에서 고아 기록을 찾는 방법은 무엇입니까? Sep 17, 2025 am 04:51 AM

tofindorphaneDrecords, usealeftjoinornoTexoTexistStoIndItifyHildRecordsWithOutmatchingParentRecords.forexample, selecto, formorderSoleftJoincustomerscono.customer_id = c.customer_idwherec.customer_idullesturnsorderdonon-allinternon-allernon-allernon-allernon-allernon-allistomer

SQL에서 데이터베이스의 이름을 바꾸는 방법 SQL에서 데이터베이스의 이름을 바꾸는 방법 Sep 17, 2025 am 06:11 AM

insqlserver, insqlserver, usealterdatabasewithmodifynifyjectingsingsetingsingsingsingsingsingsingsingsingsingsingsingsingsingsingsingsingle-usermode; inmysql, nodirectrenameisavailable, socreateanewdatabase, copydataviamysqldumporrenametable, thendroptheoldone; Inpostgresgresgresgresgresgresgresgresgresgresgresggresgresgresgresgresgres

SQL로 최소값을 찾는 방법은 무엇입니까? SQL로 최소값을 찾는 방법은 무엇입니까? Sep 21, 2025 am 01:40 AM

themin () functionlerievesthesmallestvaluefromaspecifiedcolumn.useitinaSelectStatementwhowerGroupByClaUsestOfilterorGroupData, SuchASFindingThelowestSalary, 초기, OrfirstalPhabeticalName.

See all articles