테이블에 일부 행이 있는지 확인해야 할 때마다 항상 다음과 같은 조건을 작성하는 경향이 있습니다.
SELECT a, b, c
FROM a_table
WHERE EXISTS
(SELECT * -- This is what I normally write
FROM another_table
WHERE another_table.b = a_table.b
)
다른 사람들은 다음과 같이 작성합니다.
SELECT a, b, c
FROM a_table
WHERE EXISTS
(SELECT 1 --- This nice '1' is what I have seen other people use
FROM another_table
WHERE another_table.b = a_table.b
)
조건이 NOT EXISTS
아닌 EXISTS
경우 : 경우에 LEFT JOIN
따라 추가 조건 (때로는 antijoin 이라고 함 )으로 작성할 수 있습니다 .
SELECT a, b, c
FROM a_table
LEFT JOIN another_table ON another_table.b = a_table.b
WHERE another_table.primary_key IS NULL
나는 의미가 덜 명확하다고 생각하기 때문에, 특히 명확 primary_key
하지 않은 경우 또는 기본 키 또는 조인 조건이 여러 열일 때 (열 중 하나를 쉽게 잊을 수 있음) 생각하지 않기 때문에 피하려고 합니다. 그러나 때로는 다른 사람이 작성한 코드를 유지 관리하고 있습니다.
SELECT 1
대신에 스타일 이외의 차이점 이SELECT *
있습니까?
같은 방식으로 작동하지 않는 코너 케이스가 있습니까?내가 쓴 것은 (AFAIK) 표준 SQL이지만, 데이터베이스 / 이전 버전마다 다른 점이 있습니까?
반 결합을 명시 적으로 작성하면 어떤 이점이 있습니까?
현대의 플래너 / 최적화 담당자는이를NOT EXISTS
조항 과 다르게 취급 합니까?
EXISTS (SELECT FROM ...)
.