가장 큰 차이점은 조인에 존재하지 않는 것과 존재하지 않는 것입니다 SELECT *
.
첫 번째 예에서, 당신은에서 모든 열을 얻을 모두 A
와 B
두 번째 예를 들어, 당신은 만 열을 얻을 수있는 반면, A
.
SQL Server에서 두 번째 변형은 매우 간단한 구성 예에서 약간 더 빠릅니다.
두 개의 샘플 테이블을 작성하십시오.
CREATE TABLE dbo.A
(
A_ID INT NOT NULL
PRIMARY KEY CLUSTERED
IDENTITY(1,1)
);
CREATE TABLE dbo.B
(
B_ID INT NOT NULL
PRIMARY KEY CLUSTERED
IDENTITY(1,1)
);
GO
각 테이블에 10,000 개의 행을 삽입하십시오.
INSERT INTO dbo.A DEFAULT VALUES;
GO 10000
INSERT INTO dbo.B DEFAULT VALUES;
GO 10000
두 번째 테이블에서 5 번째 행을 모두 제거하십시오.
DELETE
FROM dbo.B
WHERE B_ID % 5 = 1;
SELECT COUNT(*) -- shows 10,000
FROM dbo.A;
SELECT COUNT(*) -- shows 8,000
FROM dbo.B;
두 가지 테스트 SELECT
문 변형을 수행하십시오 .
SELECT *
FROM dbo.A
LEFT JOIN dbo.B ON A.A_ID = B.B_ID
WHERE B.B_ID IS NULL;
SELECT *
FROM dbo.A
WHERE NOT EXISTS (SELECT 1
FROM dbo.B
WHERE b.B_ID = a.A_ID);
실행 계획 :
두 번째 변형은 왼쪽 반 세미 결합 연산자를 사용할 수 있으므로 필터 작업을 수행 할 필요가 없습니다.
WHERE A.idx NOT IN (...)
입니다 하지 동일 인해의 3가 행동NULL
(즉,NULL
동일하지 않습니다NULL
당신이 때문에 경우) (도 불평등 한 어떤NULL
에서tableB
예기치 않은 결과를 얻을 수 있습니다!)