SQL에 서브 쿼리가 필요합니까?
관계형 데이터베이스에 대해 구조화 된 쿼리 언어의 충분히 일반화 된 구현을 상상해보십시오. 표준 SQL SELECT
문의 구조 는 실제로 이것이 의미가 있기 때문에 매우 중요하기 때문에 관계형 대수에 직접 호소하지는 않지만 표현식 형식에 적절한 제한을 두어 이러한 용어로 프레임을 구성 할 수 있습니다.
중 SQL SELECT
쿼리는 일반적으로 투영합니다 (구성 SELECT
부품)의 몇 개의 JOIN
동작합니다 ( JOIN
일부), 몇 개의 SELECTION
동작 (SQL에서, WHERE
절), 그리고 설정 와이즈 (연산 UNION
, EXCEPT
, INTERSECT
등), 다른 이어 SQL SELECT
쿼리
결합되는 테이블은 계산 된 계산 결과 일 수 있습니다. 다시 말해, 다음과 같은 진술을 할 수 있습니다.
SELECT t1.name, t2.address
FROM table1 AS t1
JOIN (SELECT id, address
FROM table2 AS t3
WHERE t3.id = t1.id) AS t2
WHERE t1.salary > 50,000;
계산 된 테이블을 SQL 쿼리의 일부로 하위 쿼리라고합니다. 위의 예에서 두 번째 (들여 쓰기) SELECT
는 하위 쿼리입니다.
하위 쿼리를 사용하지 않는 방식으로 모든 SQL 쿼리를 작성할 수 있습니까? 위의 예는 다음과 같습니다.
SELECT t1.name, t2.address
FROM table1 AS t1
JOIN table2 AS t2
ON t1.id = t2.id
WHERE t1.salary > 50,000;
이 예제는 다소 의심 스럽거나 사소한 것이지만 동등한 표현을 복구하기 위해 훨씬 더 많은 노력이 필요할 수 있습니다. 즉, 모든 SQL 쿼리에 대한 경우입니다 서브 쿼리와 쿼리의 존재 부질없는을하도록 와 동일한 기본 테이블에 대한 동일한 결과를 보장됩니다? SQL 쿼리를 다음 형식으로 제한하겠습니다.
SELECT <attribute>,
...,
<attribute>
FROM <a table, not a subquery>
JOIN <a table, not a subquery>
...
JOIN <a table, not a subquery>
WHERE <condition>
AND <condition>
...
AND <condition>
UNION
-or-
EXCEPT
-or-
<similar>
SELECT ...
등등. 왼쪽 및 오른쪽 외부 조인이 많이 추가되지는 않는다고 생각하지만 실수하면 언제든지 지적하십시오 ... 어쨌든 공정한 게임입니다. 집합 연산이 진행되는 한, 조합, 차이, 대칭 적 차이, 교차점 등 도움이되는 모든 것이 괜찮습니다. 모든 SQL 쿼리를 줄일 수있는 알려진 형식이 있습니까? 이 중 하위 쿼리를 제거하는 것이 있습니까? 또는 하위 쿼리가없는 동등한 쿼리가없는 인스턴스가 있습니까? 참조는 감사합니다 ... 또는 그들이 요구하거나 필요하지 않다는 증거 (증거에 의한)는 환상적입니다. 고마워, 그리고 이것이 내가 고통스럽게 무지한 유명한 (또는 사소한) 결과라면 죄송합니다.
select count(*) from (select id from sometable group by id having count(*)>1) d
입니다. 그것이 포함되어 있기 때문에 group by
나는 이것을 대답으로 넣지 않았습니다.
ON
절은 JOIN
s에 필요 하지만 쉼표로만 크로스 제품을 얻을 수 있습니다.