[SQL] 거래-SQL 속기는 조인 구문을?
SQL거래-SQL 속기는 조인 구문을?
레거시 코드에서 작업 할 때 나는 당신이 왼쪽으로 할 수있는, 몇 번을 발견하고 오른쪽 외부은을 사용하여 SQL 조인
=*
속기의 종류로 "오른쪽 외부 조인"과
*=
속기의 종류로이 같은 문장에서 "왼쪽 외부 조인"
select table1.firstname, table2.lastname
from table1, table2
where table1.id *= table2.id
저는 조인의 다른 종류의 두 같은 다른 사업자가 있다고 생각,하지만 난 그것에 대해 좋은 완전한 문서를 찾을 수 없어. 그래서 만약 당신이 문서에 어떤 좋은 링크를 알 수 있습니까?
나는 personaly 그래서 속기 버전을 사용하는 이점이있다, 난이 연산자를 사용하여 본 SQL 문은 철자 구문을 사용하는 경우보다 파악하기가 더 어렵다 생각?
해결법
-
==============================
1.= * 및 * = 현재 SQL 표준에 불평하지, 난이 연산자는 곧 당신은 항상 조인 구문을 표준을 사용해야 더 이상 사용되지 않습니다 생각합니다. 당신이 혼란하고 필요로하는 언급 다른 사업자 나 데이터베이스 개체에이를 볼 때 내가 싫증이 나다, 멀리 이동합니다.
= * 및 * = 현재 SQL 표준에 불평하지, 난이 연산자는 곧 당신은 항상 조인 구문을 표준을 사용해야 더 이상 사용되지 않습니다 생각합니다. 당신이 혼란하고 필요로하는 언급 다른 사업자 나 데이터베이스 개체에이를 볼 때 내가 싫증이 나다, 멀리 이동합니다.
-
==============================
2.절은 절을 가입 같은 곳 전체를 해석하기 때문에이 의도하지 않은 결과를 가지고 이유입니다. 예:
절은 절을 가입 같은 곳 전체를 해석하기 때문에이 의도하지 않은 결과를 가지고 이유입니다. 예:
선택 1 :
select * from table a left join table b on a.id=b.id where b.name = "hello world"
VS
선택 2 :
select * from table a left join table b on a.id=b.id and b.name = "hello world"
이 두 선택은 다른 결과를 반환합니다. 때이 같은 명령문을 작성 :
select * from tablea,tableb where tablea.id *= tableb.id and b.name="hello world"
나는 대부분의 사람들이 선택 1의 결과를 원하십니까 것이라고 기대 ...하지만 당신은 실제로 선택 2에서 결과를 얻을 수 있습니다.
-
==============================
3.당신은 SQL 서버를 사용하는 경우, 어떤 상황에서도 지금까지 그 구문을 사용하지 않습니다. 이 잘못된 결과가 제대로 외부로 가입 때때로 SQL 서버 해석으로 반환 될 때 시간은과 교차 가입으로 때로는 그 구문 해석합니다. 두 가지의 결과 집합이 크게 다르기 때문에, 혹시이 구문을 사용 롭 결과를 의존 할 수 없다. 또한, SQL 서버 2008도 sysntax을 수 SQL 서버의 마지막 버전입니다.
당신은 SQL 서버를 사용하는 경우, 어떤 상황에서도 지금까지 그 구문을 사용하지 않습니다. 이 잘못된 결과가 제대로 외부로 가입 때때로 SQL 서버 해석으로 반환 될 때 시간은과 교차 가입으로 때로는 그 구문 해석합니다. 두 가지의 결과 집합이 크게 다르기 때문에, 혹시이 구문을 사용 롭 결과를 의존 할 수 없다. 또한, SQL 서버 2008도 sysntax을 수 SQL 서버의 마지막 버전입니다.
-
==============================
4.그들은 다른 RDBMS와 심지어 당신이 낮은 호환성 수준을 사용하지 않는 이상 버전과 호환 MSSQL 서버의 경우 호환되지 않기 때문에 나는 * = 또는 = (+) 구문을 사용하지 않을 것입니다. 그런 다음 어느 시점에서 MS는 단순히 alltogether에 대한 지원을 드롭 것 유효한 걱정이다.
그들은 다른 RDBMS와 심지어 당신이 낮은 호환성 수준을 사용하지 않는 이상 버전과 호환 MSSQL 서버의 경우 호환되지 않기 때문에 나는 * = 또는 = (+) 구문을 사용하지 않을 것입니다. 그런 다음 어느 시점에서 MS는 단순히 alltogether에 대한 지원을 드롭 것 유효한 걱정이다.
이 입력 (완벽 여전히 유효하고 허용한다) 동일 조인의 간단한 흐름을 jived 적은했기 때문에 그것은 나를 일부는 내 "오래된"habbits 변화에 익숙해했다 ... 나는 * = 구문을 선호
사용하는 이동 내 반대 중 하나는 JOINS 모든 입력이었고 혼란은 내가 그들을 사용하여 쿼리 예에서 발견.
내가 찾은 어떤 마술 단지 문제가 서식하고 정말 필요한 것을 알고 있었다. 'INNER'와 'OUTER'의 사용은 완전히 중복 및 불필요한 있습니다. 또한, 저는 조인 절의 끝을 구분하고 행에 각 조건을 넣어 브래킷을 사용합니다 :
FROM blah b LEFT JOIN blah2 b2 ON (b.ID = b2.ID) LEFT JOIN blah3 b3 ON (b.ID = b3.ID) ...
일부는 내가 'WHERE'말하고 인터프리터가 여전히 난 생각을 잊고 더 많은 어려움을 했어 ANSI가 실제로 ... 구문은 동일한가이 매개 변수에 가입 놓치지 쉬운 조인으로하기 때문에 최대 엉망 어렵다 가입 있다고 말했다 정의가 아니라 / 희한 결과를 찾기 어려울의 모든 종류로 이어질 수있는 검색 조건에 비해 조건을 가입 할 수 있습니다.
-
==============================
5.내 개인적인 의견은 (SQL & TSQL에서 6+ 년 후)이 기존의 스타일은 어렵게 다른 개발자가 쉽게 코드를 이해하기 위해 기존 문법에 익숙하지있게한다는 것입니다. 성능이 영향을받지 않은 경우 나는 항상 더 자세한 정보 및 설명 구문을 선호 - 당신의가 그 코드의 지원을 통과해야 할 것 때 결코 알지 못할 :)
내 개인적인 의견은 (SQL & TSQL에서 6+ 년 후)이 기존의 스타일은 어렵게 다른 개발자가 쉽게 코드를 이해하기 위해 기존 문법에 익숙하지있게한다는 것입니다. 성능이 영향을받지 않은 경우 나는 항상 더 자세한 정보 및 설명 구문을 선호 - 당신의가 그 코드의 지원을 통과해야 할 것 때 결코 알지 못할 :)
from https://stackoverflow.com/questions/557767/transact-sql-shorthand-join-syntax by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] # 1366 - 잘못된 정수 값 : MYSQL (0) | 2020.07.10 |
---|---|
[SQL] MM : HH에 DATEDIFF SS 형식 (0) | 2020.07.10 |
[SQL] 오라클에 자바에서 대량 삽입 (0) | 2020.07.10 |
[SQL] MySQL의 DELIMITER 구문 오류 (0) | 2020.07.10 |
[SQL] 파이어 버드에 UNION ALL과 ORDER BY를 결합 (0) | 2020.07.10 |