이 기사에서는 SQL 서버에 대한 관련 지식을 제공합니다. 주로 CROSS APPLY 및 OUTER APPLY를 사용하여 연결 쿼리를 구현하는 방법을 소개합니다. 샘플 코드를 통해 자세히 소개하겠습니다. 모두를 돕습니다.
추천 학습: "SQL Tutorial"
CROSS APPLY 및 OUTER APPLY가 수행할 수 있는 작업:
왼쪽 테이블의 하나의 레코드가 오른쪽 테이블의 여러 레코드와 연결되면 하나를 제어해야 합니다. 오른쪽 테이블에 하나 이상의 레코드가 있습니다. 레코드가 왼쪽 테이블과 일치합니다.
Student(학생 테이블)와 Score(점수 테이블) 두 개의 테이블이 있습니다. 데이터는 다음과 같습니다.
ROSS APPLY는 "교차 애플리케이션"을 의미합니다. 왼쪽 테이블 , , 그리고 오른쪽 테이블의 각 레코드가 왼쪽 테이블의 현재 레코드와 일치됩니다. 일치에 성공하면 왼쪽 테이블과 오른쪽 테이블의 레코드가 하나의 레코드로 병합되어 출력되고, 일치에 실패하면 왼쪽 테이블과 오른쪽 테이블의 레코드가 삭제됩니다. (INNER JOIN과 유사)
각 학생의 마지막 두 시험 점수를 쿼리합니다.
SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1 CROSS APPLY ( SELECT TOP 2 * FROM Score AS T WHERE T1.StudentNo = T.StudentNo ORDER BY T.ExamDate DESC ) AS T2
결과:
OUTER APPLY는 "외부 응용 프로그램"을 의미하며, 이는 CROSS APPLY의 원칙과 일치합니다. 단, 일치에 실패하면 왼쪽 테이블과 오른쪽 테이블도 일치합니다. 하나의 레코드 출력으로 병합되지만 오른쪽 테이블의 출력 필드는 null입니다. (LEFT OUTER JOIN과 유사)
각 학생의 최근 두 시험 점수를 쿼리하고, 시험에 응시하지 않은 학생의 점수를 null로 채움
SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1 OUTER APPLY ( SELECT TOP 2 * FROM Score AS T WHERE T1.StudentNo = T.StudentNo ORDER BY T.ExamDate DESC ) AS T2
결과:
다음과 같은 테이블이 있습니다.
단 하나의 필드 번호가 있는 매우 간단한 테이블입니다. 이 필드의 int 숫자를 2진수 8진수 및 16진수 값으로 변환하고 싶습니다. 기본 변환을 위해 미리 만들어진 테이블 반환 함수가 있습니다.
SELECT * FROM #T a CROSS APPLY [dbo].[F_TConversion](a.num)
요약: 쿼리 결과 집합이 필드 값을 처리하기 위해 테이블 반환 함수를 사용해야 하는 경우 CROSS APPLY~
학생 테이블이 있습니다. , 이름, 과목, 점수의 세 가지 필드는 다음과 같습니다.
중국어 1위, 수학 2위, 영어 3위의 이름, 과목, 점수를 보고 싶습니다. . Cross Apply를 이용한 구현 방법은 다음과 같습니다.
SELECT b.* FROM ( select Subject='Chiness',num=1 union all select 'Math',2 union all select 'English',3) a cross apply (select top(a.num) * from Students where Subject=a.Subject ) b
추천 학습: "SQL Tutorial"
위 내용은 SQL Server는 CROSS APPLY 및 OUTER APPLY를 사용하여 연결 쿼리를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!