열 정의의 시작 또는 끝에 열 별명을 넣는 것 사이에 차이점이 있습니까?


12

나는 항상 다음과 같이 열 별칭을보고 썼습니다.

SELECT 1 as ColumnName

하지만 오늘은

SELECT ColumnName = 1

이 두 쿼리를 실행하는 방법에 차이가 있습니까? 아니면 어떤 DBA에 어떤 표준을 사용해야합니까?

개인적으로는 2 읽기 / (좋은 예를 더 이상 열 정의를 유지하기 쉬울 것 같아 여기 에서 이 문서 내가하면 안되는 이유가있는 경우), 그러나 오늘 너무 궁금 이전에 사용 2 구문을 본 적이 없어 그것을 사용합니다.


2
주석 앨리어싱의 할당 형식은 이식 가능하지 않으므로 파생 열 작업을 많이 수행 할 때 내용을 읽을 수 있지만 나중에 다른 DBMS로 변환해야하는 것은 성 가실 수 있습니다.
Cade Roux

@Cade Celko는 항상 특정 것들에 대해 그 주장을합니다. SQL Server 코드베이스를 Oracle 또는 PG 또는 MySQL로 변환 해야하는 경우 별칭 구성이 가장 걱정됩니다. Celko는 달리, 나는 피에 관심이 없다, 때문에 모든 경우에 독점적 인 기능을 우리는 이제까지 다른 RDBMS에 우리의 전체 아키텍처를 이동합니다. 얼마나 자주 교실 밖에서 일어나는지 궁금합니다.
Aaron Bertrand

@AaronBertrand 나는 대량 변환에 동의합니다. 나는 많은 것들을 Teradata로 변환했으며 이것이 가장 적은 문제입니다. 더 자주 발생하는 일은 전체 원시 테이블 데이터를 내 SQL Server로 가져 와서 뷰 또는 쿼리 또는 분석을 위해 수행 한 작업을 수행 한 다음 소스에 대한 쿼리 또는 프로세스를 작성하는 것입니다. SSIS에서 호출하거나 시스템 전체에서 원하는 데이터를 정확하게 얻을 수있는 시스템 방언. 이 경우 의식적으로 매우 일반적인 ANSI 스타일 SQL을 작성합니다. 그리고 나는 여전히 날짜 함수와 같은 것들을 바꿔야합니다.
Cade Roux

답변:


17

두 가지 유형의 앨리어싱 (와 as반대 =) 의 기본 기능에는 차이가 없습니다 . 요약하면 가독성과 유지 관리 성이라는 것입니다.

내 의견으로 는 전자 ( <Expression> as <Alias>)는 자명하기 때문에 훨씬 더 읽기 쉽다. 당신이 SELECT ColumnName = 1생각할 때 , 길고 피곤한 밤에 변수를 설정하는 것으로 착각하기가 매우 쉽습니다. 당신은 그것 SELECT @ColumnName = 1과는 완전히 다른 기능이라고 착각 할 수 있습니다 . 따라서 쿼리 "더블 룩"의 가능성을 피하거나 심지어 이해 / 코딩의 오류를 피하기 위해 SELECT 1 as ColumnName100 % 시간을 사용합니다.

개인적 선호도, (자신과 팀 내에서) 일관성 은 왕 입니다. 가장 쉬운 것을 찾으면 항상 함께하십시오. 누군가 문제 해결 / 검토 / 유지 관리 코드를 전환하는 것보다 더 실망스러운 것은 없습니다.

언급되지 않은 세 번째 방법은을 사용하는 것 <Expression> <Alias>입니다. 다시 말해 as키워드가 없는 두 번째 방법 입니다. 나는 이것이 =상징 만큼 나쁘다고 생각합니다 . 무엇을 얻을 때 가독성이 부족합니까? 세 개의 추가 문자 ( as및 공백)를 입력하지 않습니다 . 그럴 가치가 없어.

과장을 위해 다음과 같은 쿼리를 살펴보십시오.

use AdventureWorks2012;
go

select
    [New Name] = Name,
    NewDepId = DepartmentID,
    GroupName as GName,
    ModifiedDate MyModDate
from HumanResources.Department;

검토하고 싶은 코드가 아닙니다.


5
항상 "as"키워드를 제외시키는 마지막 항목을 보게됩니다. 많은 코드를 볼 때 읽을 필요는 없지만 읽기가 쉽지 않습니다.

10

개인적으로 저는 alias = expression읽고 이해하기가 더 쉽습니다. SELECT긴 표현식이 있는 명령문의 문제를 해결할 때 다른 방법이 아닌 열 이름을 통해 표현식을 찾고 싶기 때문입니다. 응용 프로그램에서 alias2다음 과 같은 표현을 찾으십시오 .

SELECT
  alias1 = (long expression with aggregates and multiple column references),
  (long expression with aggregates and multiple column references AS alias2
FROM ...

그것이 내 취향입니다. 당신과 다를 수 있습니다. 주관적 / 미각을 제외하고 하나 또는 다른 것을 사용하는 것의 진정한 이점은 없습니다. 중요한 것은 한 가지 방법을 선택하고 일관되게 수행하는 것입니다 (동전을 뒤집지 않는 한 다른 방법을 좋아하는 사람과 맞서면 선택을 변호 할 수 있음). 그러나 DBA 코드를 나처럼 까다롭게 작성하는 경우 다시 작성할 수 있도록 준비하십시오. :-)

나는 이것에 대해 블로그했습니다 .

내가 더 강하게 느끼는 한 가지는 별칭 이름 주위에 작은 따옴표를 사용하는 것입니다.

column AS 'alias'
'alias' = column

하나의 양식은 더 이상 사용되지 않지만 두 가지 모두 읽기가 매우 어렵습니다. 많은 초보자는 별칭을 문자열 리터럴로 잘못 생각합니다. 같은 이유로, 나는 큰 따옴표 ( "alias") 의 사용을 절대적으로 비난합니다 . 예약어이거나 별칭을 잘못 선택하거나 형식화하여 별칭을 이스케이프해야하는 경우을 사용하십시오 [square brackets].


2
따옴표 측면에 완전히 동의하십시오. 긴 표현은 개인적으로 캐리지 리턴과 줄 바꿈을 사용 as <Alias>하고 열 정의의 마지막 줄에 넣는 것 입니다. 그러나 분명히 동의합니다. 커피를 좋아하는 것처럼 개인적입니다.
토마스 스트링거

@ThomasStringer는 캐리지가 표현식을 반환한다는 것을 알았습니다. 라인이 시작합니다 경우에 AS Alias그것은 AS내가 특정 테이블 이름을 수직 스캔있을 때 매우 유용하지 않습니다. 쉼표를 넣을 위치에 동의하지 않을 것입니다. :-)
Aaron Bertrand

SSMS에서 눈에 띄는 빨간색으로 만들었 기 때문에 열 별칭 주위에 작은 따옴표를 한 번 사용해 보았습니다. 그러나 따옴표 키를 너무 빨리 입력하면 성가심이 너무 빨라져 게으른 방법으로 되돌아갔습니다. 또한 쿼리에 문자열이있을 때 의도 된 목적으로 잘 작동하지 않았습니다. 아마도 AS우리가 지금 사용 하고 있기 때문에 아마도 고수 할 것입니다 (보통 줄 바꾸기 AS ColumnName를 대략 하기 전에 줄 바꿈을 추가 합니다). 그러나 =더 긴 열 정의에서는 훨씬 더 읽기 쉽습니다.
Rachel

2
@AaronBertrand 쉼표를 맨 먼저 놓는 것에 대한 나의 주장은 특히 다중 행 열 정의에서 열 정의가 시작되는 위치를 더 쉽게 식별 할 수 있다는 것입니다.
Rachel

1
@AaronBertrand 나는 일반적으로 현명하게 들여 쓰기 된 코드를 사용하지 않는다>. <
Rachel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.