표에 SELECT 1이 있는 이유는 무엇입니까?
가상 SQL을 발견했습니다. 원래 의도가 무엇인지 잘 모르겠습니다. 다음과 같습니다.
SELECT COUNT (*)
INTO miss
FROM billing b
WHERE b.network= network1
and NOT EXISTS (SELECT 1 from vas NV WHERE NV.network =
b.network);
선택 1이 있고 없는 이유는 무엇입니까?
사용 시EXISTS
키워드 하위 선택 문이 있어야 하고 행의 존재만 확인되며 행의 내용은 중요하지 않습니다. SELECT
반환되는 열 내부의 내용을 제어하는 키워드입니다. SELECT
잉1
또는NV.network
같은 수의 행을 반환합니다.
따라서 원하는 것을 선택할 수 있으며, 다음을 포함하는 표준 방법을 선택할 수 있습니다.SELECT NULL
또는SELECT 1
.
질의에 대한 대안은 다음과 같습니다.
SELECT count(*) INTO miss
FROM billing b
LEFT JOIN vas NV ON NV.network = b.network
WHERE b.network = network1
AND NV.network IS NULL
(왼쪽 조인이 오른쪽 열을 채웁니다.)NULL
값은 다음과 같습니다.ON
조건을 일치시킬 수 없습니다.
SELECT 1 from vas NV WHERE NV.network = b.network
이 쿼리가 행을 반환하면 NV 테이블에 청구 테이블의 레코드와 일치하는 레코드가 있음을 의미합니다.
NOT REVERS는 NV 테이블의 레코드가 청구 테이블의 레코드와 일치하지 않을 경우 이를 무효화하여 WHERE 절을 충족합니다.
존재 대 IN(또는 존재하지 않음 대 존재하지 않음)의 사용에 대한 훌륭한 AskTom Q&A가 있습니다.
http://asktom.oracle.com/pls/asktom/f?p=100:11:1371782877074057 ::::P11_QUESTION_ID:953229842074
기본적으로 EXISTES를 사용하면 하위 선택에서 행의 존재만 확인하고 일치하는 모든 행(IN)은 확인하지 않습니다.따라서 존재하거나 존재하지 않음을 사용할 때 특정 값을 실제로 선택할 필요가 없으므로 자리 표시자(이 경우 "1")를 선택하면 충분합니다.
특정 SQL 문에서 NOT EXISTS 절은 기본 SELECT가 VAS 테이블에 해당하는 행이 없는 행만 반환하도록 합니다.
이 코드는 주로 성능 관점에서 작성된 것입니다.
나는 내부 질의에 대해서만 언급하고 있습니다.사용자에 대한 설명이 필요했기 때문입니다.내가 사용한 모든 SQL은 위에서 사용자가 사용한 실제 쿼리에 삽입되어야 합니다.
and NOT EXISTS (SELECT 1 from vas NV WHERE NV.network =
b.network);
내부 쿼리 설명 일반적으로 사람들이 입력할 때 사용합니다.select NV.netword
그러나 이는 데이터가 존재하지 않는지 확인하는 데 사용되는 데이터를 반환합니다.따라서 내부 쿼리에서 반환되는 모든 항목은 상위 쿼리에서도 확인되지 않는 것이 이상적입니다.설명 계획에서 바이트 수를 줄이기 위해 다음을 사용합니다.select 1
최소 바이트 비용을 가지며, 이를 통해 쿼리 비용을 절감할 수 있습니다.
차이점을 보려면 Oracle sql developer를 다운로드하여 설명 계획 창에서 쿼리를 모두 실행하고 각 쿼리에 대한 바이트 열을 확인하는 것이 좋습니다.
SELECT nv.network from vas NV WHERE NV.network = b.network
// cost will be depended on the value nv.network contain and that is selected in the where condition
하는 동안에
SELECT 1 from vas NV WHERE NV.network = b.network
// cost will be independent of the column and cost lesser bytes selected and lesser cost.
존재하지 않습니다. 다른 답변으로 확인할 수 있습니다.
언급URL : https://stackoverflow.com/questions/7633086/why-is-there-a-select-1-from-table
'programing' 카테고리의 다른 글
c에서 구조 요소의 간격띄우기 찾기 (0) | 2023.06.18 |
---|---|
SQL 쿼리를 사용하여 Oracle 스키마 크기를 표시하는 방법은 무엇입니까? (0) | 2023.06.18 |
최소 두 개의 날짜를 선택합니다. (0) | 2023.06.18 |
다중 처리 - 파이프 대 대기열 (0) | 2023.06.18 |
Firebase - 암호 재설정 랜딩 페이지 사용자 정의 (0) | 2023.06.18 |