[SQL] 때 SQL 테이블 별칭을 사용하는
SQL때 SQL 테이블 별칭을 사용하는
나는 사람들이 테이블 별칭을 사용하는 방법을 알고 싶소. 난 항상 일하는 다른 개발자 테이블 별칭을 사용하고, 항상 A, B, C 등의 별칭을 사용
다음은 그 예이다 :
SELECT a.TripNum, b.SegmentNum, b.StopNum, b.ArrivalTime
FROM Trip a, Segment b
WHERE a.TripNum = b.TripNum
나는 그들에 동의하고, 테이블 별칭이 더 아껴서 사용해야한다고 생각합니다.
나는 쿼리에 두 번 같은 테이블을 포함 할 때 사용해야한다고 생각, 또는 테이블 이름이 매우 길고 읽기 쿼리를 쉽게 할 것이다 쿼리에 짧은 이름을 사용하는 경우.
또한 별명이 설명하는 이름보다는 편지 있어야한다고 생각합니다. 위의 예에서, 만약 내가 여행의 테이블 t를 사용하여 세그먼트 테이블이야 할 일 편지 테이블 별칭을 사용하는 데 필요한 느꼈다.
해결법
-
==============================
1.테이블 별칭을 사용하는 두 가지 이유가 있습니다.
테이블 별칭을 사용하는 두 가지 이유가 있습니다.
첫 번째는 화장품이다. 명령문은 쓰기 쉽고, 테이블 별칭을 사용하는 경우 읽기 아마도 쉽다.
두 번째는 더 실질적인이다. 테이블이 더 FROM 절에 두 번 이상 나타나는 경우, 당신은 별개을 유지하기 위해 테이블 별칭이 필요합니다. 테이블이 외부 키를 포함하고 경우에 일반적인 자기 조인입니다 참조 그 같은 테이블의 기본 키.
두 가지 예하십시오 supervisorID 열을 포함하는 직원 테이블이 참조 감독자의 직원 ID.
두번째 부품 폭발이다. ComponentPartID, AssemblyPartID 및 수량 : 종종,이 세 개의 열이 별도의 테이블에서 구현됩니다. 이 경우, 어떤 자기 조인이되지 않습니다,하지만 종종 세 가지 방법이 테이블 및 부품의 테이블에 서로 다른 두 참조 사이의 결합이있을 것이다.
그것은으로 얻을 수있는 좋은 습관입니다.
-
==============================
2.내가 입력을 저장하는 데 사용할. 그러나, 나는 항상 기능과 유사한 문자를 사용합니다. 따라서, 귀하의 예제에서, 나는 입력합니다 :
내가 입력을 저장하는 데 사용할. 그러나, 나는 항상 기능과 유사한 문자를 사용합니다. 따라서, 귀하의 예제에서, 나는 입력합니다 :
SELECT t.TripNum, s.SegmentNum, s.StopNum, s.ArrivalTime FROM Trip t, Segment s WHERE t.TripNum = s.TripNum
그건 그냥 나를 위해, 쉽게 읽을 수 있습니다.
-
==============================
3.일반적으로 나는 항상 보통 있기 때문에 여러 내 저장 프로 시저에가는 조인을 사용합니다. 그것은 또한 CodeSmith 같은 코드 생성 도구를 사용하면 쉽게 당신을 위해 자동으로 별칭 이름을 생성해야 할 수 있습니다.
일반적으로 나는 항상 보통 있기 때문에 여러 내 저장 프로 시저에가는 조인을 사용합니다. 그것은 또한 CodeSmith 같은 코드 생성 도구를 사용하면 쉽게 당신을 위해 자동으로 별칭 이름을 생성해야 할 수 있습니다.
나는 문자 A 또는 B로 시작하는 여러 테이블을 지닐 수 있으므로, A와 B와 같은 단일 문자 멀리하려고합니다. 나는 연락 테이블에 조인 할 때이 고객 테이블의 별칭이 될 것입니다 ... 예를 CustomerContact를 들어, 더 이상 접근, 별칭 테이블과 참조 된 외부 키의 연결과 함께 할 것입니다.
내 저장 프로 시저의 대부분이 코드 CodeSmith 통해 생성되는에 내가 더 이상 이름을 신경 쓰지 않는 다른 이유는, 때문이다. 나는 손으로 타이핑에게 나 자신을 구축 할 수있는 몇 가지를 신경 쓰지 않는다.
현재 예제를 사용하여, 내가 뭔가를 같이 할 것입니다 :
SELECT TripNum, TripSegment.SegmentNum, TripSegment.StopNum, TripSegment.ArrivalTime FROM Trip, Segment TripSegment WHERE TripNum = TripSegment.TripNum
-
==============================
4.나는 이미 몇 년 오래된 논쟁에 추가 할 수 있습니까?
나는 이미 몇 년 오래된 논쟁에 추가 할 수 있습니까?
아무도 언급하지 않았다 또 다른 이유가있다. 특정 데이터베이스의 SQL 파서는 별칭으로 더 잘 작동합니다. 오라클은 이후 버전이 변경된 경우 나는 기억하지 수 있지만 별칭에 왔을 때, 데이터베이스의 열을 고개를 기억했다. 그것은 이미 문에서 발생 된 경우에도, 테이블 이름에 왔을 때, 열에 대한 데이터베이스를-확인을 다시. 빠른 특히 긴 SQL 문장의 구문 분석에 허용 별칭을 사용 그래서. 나는 다른 데이터베이스 구문 분석 시간에이 작업을 수행 할 경우이 여전히 경우인지 확인 누군가가 알고있는 나는, 그리고 그것을 변경 한 경우는 변경할 때.
-
==============================
5.나는 항상 이유를 사용 :
나는 항상 이유를 사용 :
이 예제를 생각해 봅시다 :
select col1, col2 from tab1 join tab2 on tab1.col3 = tab2.col3
이제, 나중에 몇 개월을 상상, 당신은 TAB2에 'COL1'라는 이름의 열을 추가하기로 결정. 데이터베이스는 자동으로 당신이 그렇게 할 수 있지만, 때문에 tab1.col1와 tab2.col1 사이의 모호함의 위의 쿼리를 실행할 때 응용 프로그램이 중단됩니다.
그러나, 나는 이름에 당신과 동의 : A, B, C는 괜찮지 만 t s는 당신의 예에 훨씬 더 좋을 것이다. 내가 두 번 이상 같은 테이블이있을 때, 나는이 T1, T2를 사용합니다 ... 또는 S1, S2, S3 ...
-
==============================
6.간단한 쿼리에서 나는 별칭을 사용하지 마십시오. 여러 테이블과 쿼리에서 나는 항상 그들을 때문에 사용
간단한 쿼리에서 나는 별칭을 사용하지 마십시오. 여러 테이블과 쿼리에서 나는 항상 그들을 때문에 사용
그래서 대신에 예를 들면 :
SELECT SUM(a.VALUE) FROM Domesticvalues a, Foreignvalues b WHERE a.Value>b.Value AND a.Something ...
나는 쓴다:
select SUM(DVAL.Value) from DomesticValues DVAL, ForeignValues FVAL where DVAL.Value > FVAL.Value and DVAL.Something ...
-
==============================
7.난 당신이 가능한 한 자주로 사용한다고 생각하지만 난 그 t & S A와 B보다 더 엔티티를 나타냅니다 동의.
난 당신이 가능한 한 자주로 사용한다고 생각하지만 난 그 t & S A와 B보다 더 엔티티를 나타냅니다 동의.
이것은 다른 모든 것들처럼, 환경 설정으로 요약된다. 나는 각 개발자가 같은 방식으로 별명을 사용 할 때와 동일한 규칙을 다음 당신의 저장 프로 시저에 따라 달라질 수 있음을 좋아한다.
이동은 같은 페이지에서 얻을 동료를 설득하거나 모든 쓸모없는 것입니다. 대안은 먼저 테이블로 테이블 얼룩말을 가질 수와 같은이 별명입니다. 그건 그냥 귀여운 것입니다.
-
==============================
8.그들이 필드에서오고있는 테이블을 구별 할 필요가있을 때 난 단지 그들을 사용
그들이 필드에서오고있는 테이블을 구별 할 필요가있을 때 난 단지 그들을 사용
select PartNumber, I.InventoryTypeId, InventoryTypeDescription from dbo.Inventory I inner join dbo.InventoryType IT on IT.InventoryTypeId = I.InventoryTypeId
두 테이블 위의 예에서 InventoryTypeId 필드를 가지고 있지만, 다른 필드 이름은 고유합니다.
코드가 더 의미가 있도록 항상 이름으로 테이블에 대한 약어를 사용 - 다른 개발자들에게 그들이 자신의 지역 변수 A, 등 B, C를, 이름을 경우!
유일한 예외는 SQL 구문은 테이블 별칭을 필요로하는 드문 경우이지만,이 참조되지 않으며, 예를 들면,
select * from ( select field1, field2, sum(field3) as total from someothertable ) X
상기에서, SQL 구문은 부속 선택에 대한 테이블 별칭을 필요로하지만, 내가 게으른 사용 X 또는 뭔가를 얻을 수 있도록 어디서든 참조되지 않습니다.
-
==============================
9.좀 더 선호하는 것보다 그것을 아무것도 찾을 수 없습니다. 위 특히 긴 테이블 / 뷰 이름 입력 저장 별명을 언급 한 바와 같이.
좀 더 선호하는 것보다 그것을 아무것도 찾을 수 없습니다. 위 특히 긴 테이블 / 뷰 이름 입력 저장 별명을 언급 한 바와 같이.
-
==============================
10.전체 이름을 사용하면 특히 큰 쿼리 나 주문 / 제품을 위해, 어렵게 읽을 수 있습니다 / OrderProduct scenari0
전체 이름을 사용하면 특히 큰 쿼리 나 주문 / 제품을 위해, 어렵게 읽을 수 있습니다 / OrderProduct scenari0
나는 T와 S를 사용하십시오. 또는 O / P / 연산
당신이 SCHEMABINDING을 사용하는 경우 다음 열은 자격을 갖춘 어쨌든해야합니다
당신이 기본 테이블에 열을 추가 한 다음 자격 쿼리에 중복의 가능성이 줄어 듭니다 (예는 "코멘트"열 용)
이 때문에 자격, 그것은 항상 사용하는 별칭에 의미가 있습니다.
a와 b를 사용하는 것은 기괴한 표준에 맹종이다.
-
==============================
11.내가 배운 한 가지는 특히 복잡한 쿼리와 그; 당신이 모든 필드 참조의 규정 자로 별칭을 사용하는 경우 6 개월 후 문제를 해결하는 것이 훨씬 간단하다. 그럼 당신은 필드에서 온 것을 테이블 기억하려고하지 않습니다.
내가 배운 한 가지는 특히 복잡한 쿼리와 그; 당신이 모든 필드 참조의 규정 자로 별칭을 사용하는 경우 6 개월 후 문제를 해결하는 것이 훨씬 간단하다. 그럼 당신은 필드에서 온 것을 테이블 기억하려고하지 않습니다.
나는 테이블 별명 경우 쉽게 읽을 찾을 수 있도록 우리는 몇 가지 터무니없이 긴 테이블 이름을 가지고하는 경향이있다. 그리고 당신이 그렇게 습관에있는, 파생 테이블 또는 자체 조인을 사용하는 경우 당신이 그것을 수행해야합니다 물론 좋은 아이디어이다. 나는 우리의 개발자의 대부분은 그래서 대부분 즉시 알 읽는 시간 누구의 어떤 퍼그하는 또는 MMH 별칭이며, 모든 SPS의 각 테이블에 대해 같은 별칭을 사용하게 찾을 수 있습니다.
-
==============================
12.나는 항상 사용합니다. 나는 이전에 단지 하나의 테이블을 포함하는 쿼리를 사용하지만 그때 나는 깨달았다) 하나의 테이블을 포함하는 조회의 희귀하고, b)는 하나 개의 테이블이 거의 오랫동안 그 상태를 유지하지 관련된 쿼리합니다. 난 항상 처음부터에 넣어 그래서 그래서 (또는 다른 사람이) 나중에 맞게 복고풍 필요하지 않습니다. 아, 그리고 BTW : 나는 SQL-92 표준에 따라 "상관 관계 이름을"그들에게 전화 :)
나는 항상 사용합니다. 나는 이전에 단지 하나의 테이블을 포함하는 쿼리를 사용하지만 그때 나는 깨달았다) 하나의 테이블을 포함하는 조회의 희귀하고, b)는 하나 개의 테이블이 거의 오랫동안 그 상태를 유지하지 관련된 쿼리합니다. 난 항상 처음부터에 넣어 그래서 그래서 (또는 다른 사람이) 나중에 맞게 복고풍 필요하지 않습니다. 아, 그리고 BTW : 나는 SQL-92 표준에 따라 "상관 관계 이름을"그들에게 전화 :)
-
==============================
13.테이블 별칭은 네 가지해야한다 :
테이블 별칭은 네 가지해야한다 :
좋은 연습은 별명이 될 것입니다 당신이 테이블 (많은 다른 사람의 사이에서)는 Service_Request, SERVICE_PROVIDER, 사용자 및 제휴라는 이름의 한 예를 들어 "SR", "SP", "U"및 "A", 그리고 할 않도록 해당 테이블 가능한 모든 쿼리한다. 자주의 경우와 같이이 이러한 별칭은 조직에서 사용되는 약어와 일치, 경우에 특히 편리합니다. "SR"및 "SP는"서비스 요청 및 서비스 제공 업체에 대한 허용 용어가 각각되도록 경우, 별명은 위의 직관적 테이블과가 나타내는 비즈니스 오브젝트 모두에 서의 이중 페이로드를 실시하고 있습니다.
이 시스템에 명백한 결함은 "단어"많은 테이블 이름, 예를 들어 대한 어색 할 수있는 첫 번째입니다 a_long_multi_word_table_name 별명이 almwtn이나 뭐, 그것은 가능성이 있다고 당신은 그들이 같은를 생략하도록라는 이름의 테이블을하게 될 겁니다겠습니까있다. 첫 번째 결함은 지난 3 개 또는 4 글자를 취하여 같은, 당신이 좋아하지만 처리, 또는 중 당신이 가장 가장 독특한, 대리인, 또는 입력하기 쉬운 느낌의 서브 세트를 할 수 있습니다. 그것은 같은 귀찮은 아마도 단지 행운으로 보일 수도 나는 실제로 발견 한 두 번째는 없습니다. 또한 일이 같은 ACCOUNT_TYPE와 충돌하지 않도록 "에서" "ATR"에 account_transaction 별명 대신으로,뿐만 아니라 테이블에서 "단어"의 두 번째 편지를 가지고 좋아 할 수 있습니다.
물론 당신은 위의 방법을 사용하거나 아주 아주 자주를 입력 할 것이기 때문에하지, 별칭은 짧아야한다, 당신은 하나의 테이블에 대해 쿼리를 작성하고 별명을 생략하고 나면, 그 때문에 그들은 항상 사용할지 여부를 피할 나중에 중복 된 열 이름을 가진 두 번째 테이블에서 편집해야한다는 점.
-
==============================
14.별칭 테이블 이름에 대한 때 왜 위의 글에서 많은 좋은 아이디어가있다. 무엇 아무도 언급하지 않았다 것은 또한 테이너가 테이블의 범위를 이해하는 데 도움이되도록한다. 우리의 회사에서 우리는 뷰를 만들 수 없습니다. (DBA에 감사드립니다.) 그래서, 우리 쿼리 중 일부는 심지어 크리스탈 리포트의 SQL 명령의 50,000 문자 제한을 초과하는 대형된다. 쿼리가 A, B, C로 그 테이블을 별칭 및 그 하위 쿼리가 하나 각각의 사용에 동일한 별칭에서 같은, 여러 하위 쿼리를 수행 할 때, 읽기되고있는 쿼리의 수준을 실수로 쉽게 하나입니다. 충분한 시간이 경과 한 경우에도 원래의 개발자를 혼동 할 수 있습니다. 쿼리의 각 수준에서 고유 한 별칭을 사용하면 범위가 명확 남아 있기 때문에 쉽게 읽을 수 있습니다.
별칭 테이블 이름에 대한 때 왜 위의 글에서 많은 좋은 아이디어가있다. 무엇 아무도 언급하지 않았다 것은 또한 테이너가 테이블의 범위를 이해하는 데 도움이되도록한다. 우리의 회사에서 우리는 뷰를 만들 수 없습니다. (DBA에 감사드립니다.) 그래서, 우리 쿼리 중 일부는 심지어 크리스탈 리포트의 SQL 명령의 50,000 문자 제한을 초과하는 대형된다. 쿼리가 A, B, C로 그 테이블을 별칭 및 그 하위 쿼리가 하나 각각의 사용에 동일한 별칭에서 같은, 여러 하위 쿼리를 수행 할 때, 읽기되고있는 쿼리의 수준을 실수로 쉽게 하나입니다. 충분한 시간이 경과 한 경우에도 원래의 개발자를 혼동 할 수 있습니다. 쿼리의 각 수준에서 고유 한 별칭을 사용하면 범위가 명확 남아 있기 때문에 쉽게 읽을 수 있습니다.
-
==============================
15.난 항상 완전히 내 테이블을 규정하기 때문에, 나는 조인 된 테이블이 관련 될 때 필드를 선택한 것에 대해 짧은 이름을 제공하기 위해 별칭을 사용합니다. 나는 그것을 따를 내 코드는 쉽게 생각합니다.
난 항상 완전히 내 테이블을 규정하기 때문에, 나는 조인 된 테이블이 관련 될 때 필드를 선택한 것에 대해 짧은 이름을 제공하기 위해 별칭을 사용합니다. 나는 그것을 따를 내 코드는 쉽게 생각합니다.
하나의 소스를 질의 거래 경우 -에는 조인 - 그럼 내가 별명을 사용하지 않습니다.
개인적인 취향의 문제.
-
==============================
16.항상. 그것은 습관합니다.
항상. 그것은 습관합니다.
from https://stackoverflow.com/questions/198196/when-to-use-sql-table-alias by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 보관 JSON 데이터베이스 대에 각 키에 대한 새 열을 가진 (0) | 2020.03.25 |
---|---|
[SQL] MySQL은 CHECK 제약 조건이 작동하지 않습니다 (0) | 2020.03.25 |
[SQL] SCOPE_IDENTITY () 사용과 중첩 된 대량 삽입을 수행 할 수있는 가장 빠른 방법은? (0) | 2020.03.25 |
[SQL] 어떻게 PDO와 MySQL의 기능을 대체하는? (0) | 2020.03.24 |
[SQL] 마이크로 소프트 제트는 와일드 카드 : 별표 또는 백분율 기호를? (0) | 2020.03.24 |