SQL Server에서 중첩 된 select 문


387

다음은 왜 작동하지 않습니까?

SELECT name FROM (SELECT name FROM agentinformation)

SQL에 대한 이해가 잘못되었다고 생각합니다.

SELECT name FROM agentinformation

내부 select 문이 외부 SELECT 문이 쿼리하는 결과 집합을 생성하지 않습니까?

답변:


672

하위 쿼리의 별칭을 지정해야합니다.

SELECT name FROM (SELECT name FROM agentinformation) a  

또는 더 명확하게

SELECT a.name FROM (SELECT name FROM agentinformation) a  

76
당신의 별명도 어느 정도 장황해야합니다! 내가 T1, T2, T3, T4, T5, T6와 wuery에 직장에 도착하면 나는 사랑
더그의 전관

2
where외부 쿼리에 대한 절은 어디에 있습니까 ?
대령 패닉

3
@ColonelPanic : 외부 쿼리에 대한 WHERE 절은 맨 끝에 고정됩니다.
Joe Stefanelli

"그래, 난 바보 야! 고마워, 일단 허용되면 받아 들일 것이다." 아냐 그냥 무지합니다. 우리 모두처럼.
Lucio Mollinedo

2
Oracle은 select별명없이 첫 번째 항목 을 승인합니다 .
Kjetil S.

49

Joe Stefanelli 의 답변 은 이미 정확합니다.

SELECT name FROM (SELECT name FROM agentinformation) as a  

쿼리에는 하위 쿼리에 대한 별칭을 만들 때 얻을 테이블 개체가 필요하므로 하위 쿼리의 별칭을 만들어야합니다. 개념적으로 하위 쿼리 결과는 외부 쿼리로 대체됩니다. 외부 쿼리에 테이블 개체가 필요하므로 내부 쿼리의 별칭을 만들어야합니다.

하위 쿼리를 포함하는 문은 일반적으로 다음 형식 중 하나를 사용합니다.

  • WHERE 식 [NOT] IN (하위 쿼리)
  • 식 비교 _ 연산자 [ANY | ALL] (하위 쿼리)
  • 존재하지 않는 곳 (하위 쿼리)

추가 하위 쿼리 규칙하위 쿼리 유형을 확인하십시오 .

중첩 된 서브 쿼리의 더 많은 예 .

  1. IN / NOT IN –이 연산자는 내부 쿼리가 실행 된 후 내부 쿼리의 출력을 가져 와서 0 개 이상의 값이 될 수 있으며 외부 쿼리로 보냅니다. 그런 다음 외부 쿼리는 일치하는 [IN 연산자] 또는 일치하지 않는 [NOT IN 연산자] 행을 모두 가져옵니다.

  2. ANY – [> ANY 또는 ANY 연산자는 내부 쿼리에서 생성 된 값 목록을 가져 와서 목록의 최소값보다 큰 모든 값을 가져옵니다. 그만큼

예 :> ANY (100,200,300), ANY 연산자는 100보다 큰 모든 값을 가져옵니다.

  1. ALL – [> ALL 또는 ALL 연산자는 내부 쿼리에서 생성 된 값 목록을 가져 와서 목록의 최대 값보다 큰 모든 값을 가져옵니다. 그만큼

예를 들어,> ALL (100,200,300)이면 ALL 연산자는 300보다 큰 모든 값을 가져옵니다.

  1. EXISTS – EXISTS 키워드는 부울 값 [TRUE / FALSE]을 생성합니다. 이 EXISTS는 하위 쿼리에서 반환 한 행이 있는지 확인합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.