복붙노트

[SQL] 왜 SQL ANSI-92 표준은 더 나은 ANSI-89을 통해 채택되지 않는 이유는 무엇입니까?

SQL

왜 SQL ANSI-92 표준은 더 나은 ANSI-89을 통해 채택되지 않는 이유는 무엇입니까?

나는에서 일한 모든 회사에서, 나는 사람들이 여전히 ANSI-89 표준에 자신의 SQL 쿼리를 작성하는 것을 발견했다 :

select a.id, b.id, b.address_1
from person a, address b
where a.id = b.id

오히려 ANSI-92 표준에 비해 :

select a.id, b.id, b.address_1
from person a
inner join address b
on a.id = b.id

이 같은 매우 간단한 쿼리의 경우, 가독성에 큰 차이가 아니지만, 대형 쿼리 내 테이블을 목록으로 그룹화 기준을 가입있는 것은 내가이 문제가있을 수 있습니다 어디 훨씬 더 쉽게 볼 수 있습니다 것을 발견 내 가입하고, 내가 내 모든 필터링 내 WHERE 절 유지하자. 나는 그 외부 오라클에서 (+) 구문보다 훨씬 직관적 조인 느낌이 언급 할 필요가 없을 것입니다.

나는 사람들에게 ANSI-92을 전도하려고으로, ANSI-89을 통해 ANSI-92을 사용하여 어떤 구체적인 성능 이점이 있습니까? 난 내 자신에 그것을 시도,하지만 우리가 여기 오라클의 설정은 우리가 계획을 EXPLAIN 사용하는 것을 허용하지 않습니다 - 자신의 코드를 최적화하기 위해 시도하는 사람들이 싶지 않을 것이다, 나중에 것?

해결법

  1. ==============================

    1.피터 Gulutzan와 트루디 Pelzer는에 의해 "SQL 성능 튜닝"에 따르면, 그들은 테스트 6-8 RDBMS 브랜드로, SQL-92 스타일의 조인에 비해 최적화 또는 SQL-89의 성능에는 차이가 없었다. 하나는 사람이 읽을 수있는 구문은 차이가 없습니다 그래서 대부분의 RDBMS 엔진 최적화 또는 쿼리를 실행하기 전에 내부 표현으로 구문을 변환 있다고 가정 할 수 있습니다.

    피터 Gulutzan와 트루디 Pelzer는에 의해 "SQL 성능 튜닝"에 따르면, 그들은 테스트 6-8 RDBMS 브랜드로, SQL-92 스타일의 조인에 비해 최적화 또는 SQL-89의 성능에는 차이가 없었다. 하나는 사람이 읽을 수있는 구문은 차이가 없습니다 그래서 대부분의 RDBMS 엔진 최적화 또는 쿼리를 실행하기 전에 내부 표현으로 구문을 변환 있다고 가정 할 수 있습니다.

    나는 또한 SQL-92 구문을 전도하려고합니다. 그것은, 그것은 시간이 사람들에 관하여 승인 된 16 년 후를 사용하기 시작! 그리고 SQL 데이터베이스의 모든 브랜드는 이제 너무 비표준 (+) 오라클 구문이나 * = 마이크로 소프트 /베이스 구문을 계속 사용할 이유가 없다, 그것은을 지원합니다.

    는 SQL-89 습관의 개발자 커뮤니티를 깰 열심히 이유에 관해서는, 나는 단지 사람들 코드를 복사 &에 의해 프로그래머의 큰 "피라미드의 기본"이 있다고 가정 할 수있다 붙여, 책, 잡지 기사에서 고대의 예를 사용하여, 또는 다른 코드베이스, 그리고이 사람들은 추상적으로 새로운 문법을 배울 수 없습니다. 어떤 사람들 패턴 일치하고, 어떤 사람들은 기계적으로 배운다.

    나는 점차적으로하지만, 나는 예전보다 더 자주 SQL-92 구문을 사용하는 사람들을보고하고있다. 나는 1994 년부터 온라인 SQL의 질문에 대답했습니다.

  2. ==============================

    2.그럼 ANSI092 표준은 꽤 가증스러운 구문이 포함되어 있습니다. 하나와 USING 절은 또 다른 천연 조인. 이럴 테이블에 열을 추가 코드를 중단하지 않아야하지만, 자연은 가장 지독한 방식으로 바꿈 가입하세요. 휴식 시간에 "최고"방법은 컴파일 오류입니다. 당신이 * 곳을 선택하는 경우 예를 들어, 컬럼의 추가는 컴파일 실패 할 수 있습니다. 실패 다음 가장 좋은 방법은 런타임 오류 일 것이다. 사용자가 볼 수 있기 때문에 더 나쁜,하지만 여전히 당신에게 당신이 뭔가를 파괴했다고 멋진 경고를 준다. 자연 조인 당신이 ANSI92 및 쓰기 쿼리를 사용하는 경우는 컴파일시에 파괴되지 않고는 실행시에 중단되지 않습니다 쿼리가 갑자기 잘못된 결과를 생산하기 시작합니다. 버그 이러한 유형의 교활한 있습니다. 보고서가 잘못 잠재적 재정 공개는 올바르지 않습니다.

    그럼 ANSI092 표준은 꽤 가증스러운 구문이 포함되어 있습니다. 하나와 USING 절은 또 다른 천연 조인. 이럴 테이블에 열을 추가 코드를 중단하지 않아야하지만, 자연은 가장 지독한 방식으로 바꿈 가입하세요. 휴식 시간에 "최고"방법은 컴파일 오류입니다. 당신이 * 곳을 선택하는 경우 예를 들어, 컬럼의 추가는 컴파일 실패 할 수 있습니다. 실패 다음 가장 좋은 방법은 런타임 오류 일 것이다. 사용자가 볼 수 있기 때문에 더 나쁜,하지만 여전히 당신에게 당신이 뭔가를 파괴했다고 멋진 경고를 준다. 자연 조인 당신이 ANSI92 및 쓰기 쿼리를 사용하는 경우는 컴파일시에 파괴되지 않고는 실행시에 중단되지 않습니다 쿼리가 갑자기 잘못된 결과를 생산하기 시작합니다. 버그 이러한 유형의 교활한 있습니다. 보고서가 잘못 잠재적 재정 공개는 올바르지 않습니다.

    자연에 익숙하지 않은 사람들을 위해 결합합니다. 그들은 두 테이블에 존재하는 모든 열 이름에 두 테이블을 조인. 어떤 당신이 4 열 키와 당신을 입력하는있는 거 병이있을 때 정말 멋지다. 문제는 표 1은 기존의 열 이름 설명이있는 경우에 와서 당신이, 오, 나도 몰라, 음, 설명, 같은 무해한 뭔가라는 이름의 표 2에 새 열을 추가하고 지금은 VARCHAR2에있는 두 개의 테이블을 조인하고 (1000) 필드 자유 형식입니다.

    USING 절은 상술 한 문제점에 더하여 총 모호성을 초래할 수있다. 다른 SO 포스트에서, 사람이 ANSI-92 SQL을 보여주고 그것을 읽고 도움을 요청했다.

    SELECT c.* 
    FROM companies AS c 
    JOIN users AS u USING(companyid) 
    JOIN jobs AS j USING(userid) 
    JOIN useraccounts AS us USING(userid) 
    WHERE j.jobid = 123
    

    이것은 완전히 모호합니다. 둘 다 회사 및 사용자 테이블에 사용자 ID 열을 넣고 아무 불만이 없다. 회사의 사용자 ID 열은 해당 행을 수정할 수있는 마지막 사람의 ID는 무엇입니까면?

    이러한 모호함이 필요했다 이유 심각 해요, 캔 사람이 설명? 이유는 바로 표준에 내장되어?

    나는 빌 코딩을 통해이 방법을 복사 / 붙여 넣기 개발자의 큰 기반이 있음을 올바른 생각합니다. 사실, 나는 그것이 ANSI-92에 올 때 나는 어떤 하나의이야 인정 할 수 있습니다. 내가 본 여러 보였다 모든 예는 괄호 안에 중첩 된 조인. 정직, 차종은 SQL의 테이블을 따기 어려운 최고의 것을. 그러나 다음 SQL92의 evangilist는 실제로 조인 순서를 강제 설명했다. 더 나은 특히 복사 / paster 최적화에 남은 시간의 95 %의 작업 - 예수 ... 모든 복사는 지금 실제로 조인 순서를 강요 본 적이 pasters.

    그가 말할 때 Tomalak은 바로 그것을 가지고

    그것은 나에게 무언가를주고 있고 나는 거꾸로 표시되지 않습니다. 거꾸로가있는 경우에, 네거티브는 무시하기에 너무 큰 골칫거리입니다.

  3. ==============================

    3.몇 가지 이유가 마음에 와서 :

    몇 가지 이유가 마음에 와서 :

    나의 부분을 위해, 나는이 SQL-92 구문으로 조인을 모두 수행, 어디 내가 할 수있는 내가 코드를 변환합니다. 그것은을 할 수있는 청소기, 읽기 쉽고 강력한 방법입니다. 그들은 쿼리 결과를 변경하지 않으면 서 더 입력 작업의 관점에서 그들에게 상처를 생각하면하지만, 누군가가 새로운 스타일을 사용하도록 설득하기 어렵다.

  4. ==============================

    4.자연에 응답하여 상기 가입 후 사용.

    자연에 응답하여 상기 가입 후 사용.

    만약 당신이 다음을 사용할 필요가 볼 것입니다 왜 - 그들은 ANSI-89에서 사용할 수 없었던 나는 단지 바로 가기로 볼 수있는 바와 같이 ANSI-92 추가되었다.

    나는이 기회에 가입하고 항상 테이블 / 별칭 및 ID를 지정합니다 떠나지 않을 것입니다.

    나를 위해, 갈 수있는 유일한 방법은 ANSI-92입니다. 그것은 더 자세한이며, 구문은 ANSI-89 추종자 좋아 아니지만 깔끔하게 당신이 당신의 필터링에서 JOINS 분리합니다.

  5. ==============================

    5.첫째 날은 SQL Server의 외부 올바른 결과를 모든 시간을 제공하지 않습니다 구문 (* =)에 가입 가정 해 봅시다. 그것은 십자가에 가입하고 아닌 외부 조인 것으로 해석하는 경우가 있습니다. 그래서 바로 사용을 중지하는 좋은 이유가있다. 그리고 외부 구문이 사용되지 않는 기능입니다 가입하고 당신은 여전히 ​​내부 조인 할 수 있습니다 SQL 서버 2008 이후 SQL 서버의 다음 버전에서되지 않습니다하지만 왜 것 누구의 희망이 땅에서? 그들은 불분명 훨씬 더 힘들어 유지. 당신은 쉽게 가입의 일부이며 무엇을 정말 where 절 모르겠어요.

    첫째 날은 SQL Server의 외부 올바른 결과를 모든 시간을 제공하지 않습니다 구문 (* =)에 가입 가정 해 봅시다. 그것은 십자가에 가입하고 아닌 외부 조인 것으로 해석하는 경우가 있습니다. 그래서 바로 사용을 중지하는 좋은 이유가있다. 그리고 외부 구문이 사용되지 않는 기능입니다 가입하고 당신은 여전히 ​​내부 조인 할 수 있습니다 SQL 서버 2008 이후 SQL 서버의 다음 버전에서되지 않습니다하지만 왜 것 누구의 희망이 땅에서? 그들은 불분명 훨씬 더 힘들어 유지. 당신은 쉽게 가입의 일부이며 무엇을 정말 where 절 모르겠어요.

    난 당신이 오래된 구문을 사용해서는 안 믿는 이유 중 하나는 이해 조인과 그들이 어떻게하고하지 않는 것은 SQL 코드를 작성합니다 사람을위한 중요한 단계입니다. 이해가 잘 결합하지 않고 당신은 어떤 SQL 코드를 작성하지 않아야합니다. 당신이 그들을 잘 이해한다면, 당신은 아마 ANSI-92 구문이 명확하고 유지하기 쉽다는 것을 결론에 도달 할 것이다. 나는 이전 구문에 우선으로 ANSI-92 구문을 사용하지 않은 SQL 전문가를 만난 적이.

    I에 도달하거나 이전 코드를 사용하는 사람 처리 한 대부분의 사람들은 진정으로 조인 이해하지 않고 데이터베이스를 쿼리 할 때 이렇게 곤경에 얻을. 이것은 내 개인적인 경험이다 그래서 나는 항상 사실 말하는 게 아니에요. 그러나 데이터 전문가로, 믿을 수없는 세월이 흘러이 정크 너무 많은 문제를 해결 했어.

  6. ==============================

    6.나는 학교에서 ANSI-89을 가르치고 몇 년 동안 업계에서 일했다. 그럼 난 8 년 동안 DBMS의 멋진 세상을 떠났다. 그러나 내가 다시 와서이 새로운 ANSI 92 물건을 가르쳐되고 있었다. 나는이 구문에 가입하고 지금은 실제로 SQL를 가르치고 나는 새가 구문에 가입하는 것이 좋습니다 배웠습니다.

    나는 학교에서 ANSI-89을 가르치고 몇 년 동안 업계에서 일했다. 그럼 난 8 년 동안 DBMS의 멋진 세상을 떠났다. 그러나 내가 다시 와서이 새로운 ANSI 92 물건을 가르쳐되고 있었다. 나는이 구문에 가입하고 지금은 실제로 SQL를 가르치고 나는 새가 구문에 가입하는 것이 좋습니다 배웠습니다.

    그러나 내가 볼 수있는 단점은 상관 하위 쿼리가 ANSI 92 조인의 빛에서 이해하지 않는 것입니다. 정보는 상관 하위 쿼리가 모든 권리와 일관성을 보였다 WHERE에서 "참여"어디에와에 포함 된 조인합니다. ANSI에서 92 표 기준을 가입하는 것은 "참여"입니다 WHERE 및 하위 쿼리에없는 구문은 일관성이 보인다. 반면에,이 불일치 "수정"을 시도하는 것은 아마 더 나쁘게 만들 것입니다.

  7. ==============================

    7.내가 확실히 답을 알고하지 않습니다 .. 이것은 종교 전쟁 (맥 PC 또는 다른 사람보다 낮은 정도이기는하지만)입니다

    내가 확실히 답을 알고하지 않습니다 .. 이것은 종교 전쟁 (맥 PC 또는 다른 사람보다 낮은 정도이기는하지만)입니다

    추측은 그 때까지 비교적 최근에, 오라클, (그리고 어쩌면 다른 공급 업체뿐만 아니라) 회사에서 일하는의 DBA / DB 개발자를위한 (나는 그것이 오라클 V9의 생각, 또는 그 부근) 등의 ANSI-92 표준을 채택하지 않았다 아직이 버전을 사용하고있는 서버에서 호환성을 이러한 버전 (또는 원하는 코드를 사용하고, 그들은 기존의 표준에 충실했다 ...

    새로운 구문이 훨씬 더 읽을 가입 있기 때문에, 정말 부끄러운하고, 이전 구문은 몇 가지 잘 문서화 된 시나리오에서 잘못된 (잘못된) 결과를 생성합니다.

  8. ==============================

    8.관성과 실용성.

    관성과 실용성.

    ANSI-92 SQL은 터치 입력과 같다. 이론적 인 방법으로이 모든 것을 잘 언젠가는 할 수 있지만 지금은 네 손가락으로 키를보고 더 빠르게 입력 할 수 있습니다. 나는 지금까지 지불 오프가 될 것이라는 보장과 함께, 앞으로 이동하기 위해 뒤로 이동해야합니다.

    쓰기 SQL 내 일의 10 %에 관한 것입니다. 내가 ANSI-89 SQL 해결할 수없는 문제를 해결하기 위해 ANSI-92 SQL이 필요한 경우, 나는 그것을 사용할 것이다. (나는 사실, 액세스에 사용합니다.) 내가 훨씬 더 빨리 기존 문제를 해결하는 데 도움이되는 것 그 모든 시간을 사용하는 경우, 나는 그것을 흡수 할 수있는 시간을 보낼 것입니다. 그러나 나는 이제까지 구문에 대해 생각하지 않고 ANSI-89 SQL을 채찍질 할 수 있습니다. 나는 문제를 해결하기 위해 돈을받을 - SQL 구문에 대한 생각은 내 시간과 내 고용주의 돈을 낭비입니다.

    언젠가, 젊은 메뚜기, 당신은 SQL3를 사용하여 (또는 무엇이든)해야한다고 징징 젊은이들에 대해 ANSI-92 SQL 구문의 사용을 방어 할 수 있습니다. 그리고 당신은 이해하게 될 것입니다. :-)

  9. ==============================

    9.나는 92 조인 구문을 SQL을 지원하지 않았다 원래 SQL 서버 6.5를 위해 작성된 쿼리, 즉했다

    나는 92 조인 구문을 SQL을 지원하지 않았다 원래 SQL 서버 6.5를 위해 작성된 쿼리, 즉했다

    select foo.baz
    from foo
      left outer join bar
      on foo.a = bar.a
    

    대신으로 작성되었습니다

    select foo.baz
    from foo, bar
    where foo.a *= bar.a
    

    쿼리는 잠시 동안 주변에 있었고, 관련 데이터는 완료 90 초 접경, 너무 느린 실행 쿼리를 만들기 위해 축적했다. 이 문제가 발생한 시간, 우리는 SQL 서버 7으로 업그레이드했다.

    인덱스 및 기타 부활절-부추 기지에 대한 일 처리 후, 나는이 SQL 92 준수하도록 조인 구문을 변경했습니다. 쿼리 시간 3 초에 떨어졌다.

    전환하는 좋은 이유가있다.

    여기에서 재 게시.

  10. ==============================

    10.나는 하루 종일 SQL을하지 않는다 (때마다 삽입 내가 필요 ... - P를 모두 구문을 이해하기 위해 충분한 SQL을 알고, 평균 개발자의 관점에서 대답하지만, 여전히 정확한 구문을 인터넷 검색을 할 수 있습니다 단지 때때로 몇 가지 문제를 해결.)

    나는 하루 종일 SQL을하지 않는다 (때마다 삽입 내가 필요 ... - P를 모두 구문을 이해하기 위해 충분한 SQL을 알고, 평균 개발자의 관점에서 대답하지만, 여전히 정확한 구문을 인터넷 검색을 할 수 있습니다 단지 때때로 몇 가지 문제를 해결.)

    음, 사실, 나는 두 테이블 사이에 명백한 계층 구조를 만드는 없습니다, 첫 번째 양식이보다 직관적 찾을 수 있습니다. 사실은 아마 도움이되지 않습니다, 첫 번째 양식을 보여주는 가능성이 오래된 책 SQL을 배운 ... ;-) 그리고 첫 번째 참조 나는 이전 형태 (다음 두 번째 설명) 첫 번째 (나를 위해 반환 주로 프랑스어 답변을 ...) 쇼 구글의 SQL SELECT 검색에서 찾을 수 있습니다.

    그냥 "왜"질문에 대한 몇 가지 힌트를 제공합니다 ... ^ _ ^ 나는이 주제에 대한 좋은, 현대 책 (DB의 무신론자)을 읽어야합니다. 경우 누군가가 제안을 가지고 ...

  11. ==============================

    11.저것 오래된 VAX 시스템 - 나는 모든 학교 그러나 우리는 우리의 과정의 SQL 모듈을하고 있던 내 대학에서 말할 수 없다, 그들은 ANSI-92를 가르쳐주지 않았다, 그들은 ANSI-89을 가르쳤다! 나는 SQL 코드로 파고 다음 쿼리 디자이너를 사용하여 일부 쿼리를 내장 한 액세스에 주위 파고 시작할 때까지 나는 ANSI-92에 노출되지 않았다. 나는 그것이이 완료 된 방법을 몰랐다 실현 조인 또는 구문의 의미는 나는 그것을 이해할 수 있도록 더 깊이 파고 시작했다.

    저것 오래된 VAX 시스템 - 나는 모든 학교 그러나 우리는 우리의 과정의 SQL 모듈을하고 있던 내 대학에서 말할 수 없다, 그들은 ANSI-92를 가르쳐주지 않았다, 그들은 ANSI-89을 가르쳤다! 나는 SQL 코드로 파고 다음 쿼리 디자이너를 사용하여 일부 쿼리를 내장 한 액세스에 주위 파고 시작할 때까지 나는 ANSI-92에 노출되지 않았다. 나는 그것이이 완료 된 방법을 몰랐다 실현 조인 또는 구문의 의미는 나는 그것을 이해할 수 있도록 더 깊이 파고 시작했다.

    사용 가능한 문서는 사람들이 자신의 작업을 완수하기 위해 필요한 것보다 더 배우고 노력하지 않는 그들이 알고 무엇을 많은 경우에 스틱 경향, 그리고 많은 경우에 정확하게 직관적 아님을 감안할 때, 그것은이다 채택이 너무 오래 걸리는 이유를 쉽게 알 수.

    물론, 거기에 수리를 좋아하는 기술 전도자하고 이해하고는 "새로운"원칙을 채택하고 나머지는 변환하려고하는 유형 경향이있다.

    이상하게도, 프로그래머의 많은 학교와 정지 발전 나올 것을 나에게 보인다; 이 그들이 배운 것입니다 때문에, 이것은 어떻게하는지입니다 생각. 그것은 당신이 그 학교는 당신에게 기초를 가르치고 나머지는 당신에게 자신을 배울 수있는 충분한 이해를 제공하고 정말 거의 알아야 할 무엇의 표면에 긁힌 것을 의미했다 실현하는 것이 당신이 당신의 방향 등을 벗을 때까지이 아니다; 지금은 그 길을 계속하기 당신의 일이다.

    물론, 내 경험을 바탕으로 단지 내 의견이다.

  12. ==============================

    12.1) 표준 방법 OUTER가 가입 쓸 대 * = 또는 (+) =

    1) 표준 방법 OUTER가 가입 쓸 대 * = 또는 (+) =

    2)는 가입 NATURAL

    3)보다 최적으로는, 데이터베이스 엔진에서 ANSI-92 경향 의존한다.

    4) 수동 최적화 :

    하자 말 우리는 다음 구문을 가지고 (ANSI-89) :

    (1)select * from TABLE_OFFICES to,BIG_TABLE_USERS btu
    where to.iduser=tbu.iduser and to.idoffice=1
    

    다음과 같이 작성 될 수있다 :

    (2)select * from TABLE_OFFICES to
    inner join BIG_TABLE_USERS btu on to.iduser=tbu.iduser
    where to.idoffice=1
    

    그러나 또한 :

    (3)select * from TABLE_OFFICES to
    inner join BIG_TABLE_USERS btu on to.iduser=tbu.iduser and to.idoffice=1
    

    그들은 다르게 최적화되어 그러나 그들 (1) 모든이, (2), (3) 동일한 결과를 반환, 데이터베이스 엔진에 의존하지만 그들 중 대부분은 수행

    5) 긴 쿼리는 덜 지저분하다.

  13. ==============================

    13.이유 사람들은 늙고 젊은 프로그래머와 연수생과 신선한 졸업생 내 실제 경험에서 ANSI-89을 사용합니다 :

    이유 사람들은 늙고 젊은 프로그래머와 연수생과 신선한 졸업생 내 실제 경험에서 ANSI-89을 사용합니다 :

    나는 개인적으로 ANSI-92 선호 가끔에만 더 나은 손에서 SQL 문을 이해하기 위해 ANSI-89 구문에서 볼 수있는 모든 쿼리를 변경합니다. 하지만 쓰기에 비해 많은 테이블을 조인에 내가 함께 일하는 사람들의 대부분은 숙련 충분하지 않은 것을 깨달았다. 그들은 그들이 그들이 SQL 문을 발견 처음을 기억 무엇을 사용할 수있는 좋은으로 그들은 코드입니다.

  14. ==============================

    14.다음은 SQL-89 및 SQL-92을 비교하고 다른 답변에 약간의 오해를 지우고 몇 가지 포인트가 있습니다.

    다음은 SQL-89 및 SQL-92을 비교하고 다른 답변에 약간의 오해를 지우고 몇 가지 포인트가 있습니다.

  15. ==============================

    15.오라클은 잘에서 ANSI-92를 구현하지 않습니다. 나는 오라클 애플리케이션의 데이터 테이블이 너무 잘 열이 부여되어 있지 적어도 때문에 여러 가지 문제를 했어. 조인 당신의 열 수는 (아주 쉬운 앱에서 할 수있는) 1050 개 컬럼에 대해 초과하는 경우에, 당신은 전혀 논리적 의미가이 가짜 오류가 발생합니다 :

    오라클은 잘에서 ANSI-92를 구현하지 않습니다. 나는 오라클 애플리케이션의 데이터 테이블이 너무 잘 열이 부여되어 있지 적어도 때문에 여러 가지 문제를 했어. 조인 당신의 열 수는 (아주 쉬운 앱에서 할 수있는) 1050 개 컬럼에 대해 초과하는 경우에, 당신은 전혀 논리적 의미가이 가짜 오류가 발생합니다 :

    ORA-01445: cannot select ROWID from a join view without a key-preserved table.
    

    다시 쓰기 이전 스타일을 사용하는 쿼리 구문을 정면으로 ANSI-92 조인의 구현에 비난의 손가락을 가리 키도록 보인다 문제 사라을하게 가입 할 수 있습니다.

    나는이 문제가 발생 될 때까지, 나는 때문에 너무 쉽게 이전 스타일 구문을하는 것입니다 실수로 십자가의 기회에 참여를, 감소의 혜택, ASNI-92의 확고부동 한 발기인이었다.

    그러나 지금, 나는 훨씬 더 어렵 주장에 찾을 수 있습니다. 그들은 오라클의 나쁜 구현을 가리키고 말 "우리는 그것을 덕분에 우리의 방법을 다하겠습니다."

  16. ==============================

    16.'호환성의 족쇄'이전 표준에서 새로운 SQL 표준 상속의 모든 것을, 일명. 은 / / '쉼표로 구분 된' '오래된' '적정'에 가입 스타일을 완벽하게 유효한 SQL-92 sytax입니다 그래서.

    '호환성의 족쇄'이전 표준에서 새로운 SQL 표준 상속의 모든 것을, 일명. 은 / / '쉼표로 구분 된' '오래된' '적정'에 가입 스타일을 완벽하게 유효한 SQL-92 sytax입니다 그래서.

    지금, 나는 SQL-92의 자연이는 당신이 필요로 조인 가입 있다고 주장한다. 예를 들어, 나는 중복 된 열을 생성하지 않기 때문에 내부 조인에 우수 주장하지 않습니다 - 명확하게 열을 SELECT 절에 더 이상의 범위 변수를! 그러나 나는 내가 스타일을 결합 개인적으로 유산이라고 생각 무엇을 채택 할 것 코더 작업해야하므로, 모든 마음과 마음을 바꿀 것으로 예상 할 수없는 (그리고 그들은 심지어 '별칭'으로 범위 변수를 참조 할 수있다!). 이 진공에서 작동 팀워크의 자연과 없습니다.

    SQL 언어의 비판 중 하나는 동일한 결과가 '최고'하나를 선택하는 것은 단순히 개인적인 스타일에 내려 오는 의미 - 상응하는 구문의 숫자 (일부 사용하여 관계형 대수, 일부 관계형 미적분을 사용)를 사용하여 얻을 수 있다는 것입니다 . 나는 '구식'에 익숙해로 해요 그래서 내가 INNER 함께 있으리라으로 결합한다. 나는 자연이 상황에 따라 그들을 다시 시간이 걸릴 것인지.

  17. from https://stackoverflow.com/questions/334201/why-isnt-sql-ansi-92-standard-better-adopted-over-ansi-89 by cc-by-sa and MIT license