2010-12-19 2 views
9

저는 SQL에 익숙하지 않습니다. SQL Server 2005/2008, Oracle 10 및 Sybase에서 작동해야하는 몇 가지 코드가 있습니다.SQL 구문에서 'where'를 사용하려는 경우 'from from'은 'from delete'에서 선택 사항입니까?

insert, updatedelete과 같이 주어진 저장 프로 시저가 수정하는 테이블을 알아 내기 위해 스크립트를 작성했습니다 (삭제되지는 않음). 이 경우 정말 옵션의 부 from 키워드가 ...

delete from phone_book where ... 

: 그럼 반대로

delete phone_book where ... 

: 가끔 같은 문장을 참조 -

delete 하나의 수수께끼되는 밝혀졌다? 이로 인해 문제가 발생합니까? 그것은 단지 나쁜 스타일입니까, 아니면 중요하지 않습니까?

T-SQL에 대한 참조가 발견되지 않아 from이 선택 사항입니다. 위에서 언급 한 3 개 공급 업체를 모두 통합한다고 가정합니다.

질문/의견/링크를 환영합니다 (환영합니다).

+1

지원해야하는 Oracle 및 Sybase 버전은 언급하지 않았습니다. –

답변

7

FROM은 선택 사항입니다 (SQL Server, Oracle, Sybase).

그러나 미묘한 차이가 있습니다. 예를 들어 Oracle은 SQL Server가없는 테이블 이름에 별칭을 할당 할 수 있습니다. 다른 것들도 약간 다릅니다.

은 Microsoft SQL Server 설명서에서
DELETE phone_book FROM some_table WHERE ... 
+0

지금까지 나열한 마지막 사례를 자세히 설명하십시오. 'some_table'의 모든 행을 삭제하겠습니까? phone_book은 null이 아니라 다른 조건을 더한 것입니까? 나는이 특별한 경우의 이점을 이해하지 못한다고 생각한다. 왜 단순히'some_table에서 삭제할 것인가? ' –

+2

@Hamish, 첫 번째 줄에 게시 한 세 개의 링크를 살펴보십시오. 내'some_table'은'phone_book'에서 삭제할 항목을 필터링하기 위해 나중에 WHERE 절에서 일치하는 값을 얻는 데 사용할 수있는 소스 테이블입니다. 'DELETE FROM phone_book FROM some_table WHERE ... '와 같이 쓰여질 수도 있지만, 필자가 작성한 것처럼이 경우 첫 번째'FROM' 만 선택 사항입니다. – Lucero

2
+0

SQL Server 2000 참조에 연결하고 다른 공급 업체를 건너 뛰는 것이 완전한 대답처럼 보이지 않습니까? – Lucero

+0

@Lucero, 조심성 - 그는 이즈 리군에 있었고 크라브 마가를 알고 있습니다. –

+1

@Hamish, 나는 Joel이 누구인지 알고 있습니다. 나는 좋은 사람이고 위대한 작가입니다. 2002 년 이래로 그의 회사의 고객이었습니다. 아직도이 대답이 실제로 당신의 질문에 대답하고 있다고 생각하지 않습니다. – Lucero

5

짧은 대답 : Luceros 응답이 올바른지 : 그것은 optinal이다

는 또한 필수입니다 어디 FROM 샘플은 다음에서 전혀 다른이므로주의

저는 SQL을 유지 관리해야하며 SQL Server와 Oracle간에이를 적용해야합니다. 여기에 몇 가지 규칙 :

  1. 쓰기 스크립트를 수동으로 생성 사용하지 않는 코드
  2. INTO에 allways 사용 INSERT가에 allways 삭제 -
  3. 는 사용하지 마십시오 FROM없이 "- 인용 식별자
  4. [] 및 dbo를 모두 제거하십시오.
  5. DELETE ... FROM ...
  6. 을 (를) 볼 때주의하십시오. UPDATE ... FROM ...을 (를) 볼 때주의하십시오.원하지 않는 -
  7. ORACLE 선택의 문은

    • 사용 [Current_DB] 절에서 당신이 DUAL

      1. 확인을 할 수있는 스크립트의 오브젝트에서 사용할 수 있으며 표준 방식으로 편집해야합니다 설정을 사용할 일단 결정 - -에 스위치를 ON
      2. SET의 QUOTED_IDENTIFIER 해제하지 않습니다 - 테스트 데이터베이스에 대한 참조는
      3. SET가 ON ANSI_NULLS 생산 스크립트로 이동 인용 식별자는 대소 문자를 구분됩니다
  8. INSERT INTO는 ORACLE에서 요구하는
  9. 당신이 열 남로 신탁 한 예약 된 키워드를 사용하는 경우는, 식별자를 인용해야
  10. 기본값 배우고, optinal 키워드를 사용하지 않는 내 개인적인 스타일이다
  11. 전자, 우리는 그 함정을 입력하고 장기적으로는
  12. ORACLE이
  13. 오라클이 구문
  14. 오라클 아무튼를 지원하지 않습니다 사용하지 않는 SQL-서버 측의 열 이름을 변경하는 것이 더했을 것이다 이 구문을 지원하지 않습니다.
+0

감사합니다 ... 정교하게 부탁드립니다. 그건 그렇고, "생성 된 코드를 사용하지 말라."라고 말하면 몇 년이 걸릴 것입니다. 제가 말했듯이, 저는 SQL에 익숙하지 않습니다. 왜이 규칙들을 생각해 냈는지 설명하십시오. –

+0

매우 근사합니다. 나는 한번 이상 투표를하고 싶습니다. –