2010-01-13 5 views
7

sql에서 별칭에 관한 의심과 질문이 있습니다. 동일한 쿼리에서 별칭을 사용하려면 사용할 수 있습니다. 예를 들어 : 쿼리에서 별칭 사용 및 사용

select (a/b) as temp , temp/5 from xyz 

어떤 식 으로든이 가능 열 a와 b로 테이블 이름 XYZ을 고려?

답변

8

쿼리의 식에 식별자를 부여한 다음 해당 식별자를 쿼리의 다른 부분에서 다시 사용하는 것에 대해 이야기하고 있습니까?

거의 모든 SQL 환경이 제한되는 Microsoft SQL Server에서는 불가능합니다. 하지만 다음과 같이 할 수 있습니다.

SELECT temp, temp/5 
FROM (
    SELECT (a/b) AS temp 
    FROM xyz 
) AS T1 

분명히 그 예가 특히 유용하지는 않지만, 여러 장소에서 표현식을 사용했다면 더 유용 할 수 있습니다. 표현식이 길어서 GROUP BY 절을 사용하면 표현식을 다시 표현해야하므로 표현식이 길면 쉽게 그룹화 할 수 있습니다.

MSSQL에서 쿼리가 아닌 테이블 스키마에 지정된 계산 된 열을 만들 수도 있습니다.

+0

+1. 좋은 지적. – Guru

-1

W3Schools "SQL Alias"이 도움이 될 수 있습니다. 쿼리에 더 별칭을 사용하여 당신이 할 수 있습니다 사용중인 데이터베이스에 따라 관련하여

SELECT po.OrderID, p.LastName, p.FirstName 
FROM Persons AS p, 
Product_Orders AS po 
WHERE p.LastName='Hansen' AND p.FirstName='Ola' 

: 여기

은 자신의 튜토리얼에서 예이다.

2

동일한 SELECT 절에서 SQL 제품이 표준 SQL-92 엔트리 레벨과 호환된다고 가정 할 수 없습니다.

SELECT 절에있는 표현식 (및 해당 상관 관계 이름)은 '한 번에'존재합니다. 당신이 바라는 것처럼 보이는 왼쪽에서 오른쪽으로의 평가는 없습니다.

여기 @Josh Einstein의 답변에 따라 해결 방법으로 파생 테이블을 사용할 수 있습니다. 'temp'보다 의미있는 이름을 사용하고 temp/5 표현을 제공하면됩니다. 상속받을 사람을 염두에 두십시오. 암호).

게시 한 코드는 MS Access 데이터베이스 엔진에서 작동하며 두 번째 표현식에 Expr1과 같은 의미없는 상관 관계 이름을 지정하지만 실제 SQL 제품은 아닙니다.

5

Oracle with 문도 사용할 수 있습니다. 다른 DB에서도 비슷한 문장을 사용할 수 있습니다. 다음은 오라클에 사용되는 것입니다.

with t 
as (select a/b as temp 
from xyz) 
select temp, temp/5 
from t 
/

the WITH statement 한 번만 평가 및 후속 문에서 사용되기 때문에이 여러 중첩 된 쿼리를 포함하는 복잡한 쿼리를 가질 경우 특히 성능 이점이있다.

1

가능한 것 같아요 그것 :

SELECT (A/B) as temp, (temp/5) 
FROM xyz, 
(SELECT numerator_field as A, Denominator_field as B FROM xyz), 
(SELECT (numerator_field/denominator_field) as temp FROM xyz); 
관련 문제