В синтаксисе SQL есть опция "from" в "delete from", если вы планируете использовать "where"?

Я новичок в SQL. У нас есть код, который должен работать на SQL Server 2005/2008, Oracle 10, а также Sybase.

Я писал script, чтобы выяснить, какие таблицы эта хранимая процедура изменяет (но не падает), например insert, update и delete.

delete один оказался озадаченным - иногда я вижу утверждения вроде:

delete phone_book where ... 

в отличие от:

delete from phone_book where ...

Итак... ключевое слово from действительно необязательно в этом случае? Это вызывает проблемы? Это просто плохой стиль, или это не имеет значения?

Я не нашел ссылку на T-SQL, которая сделала бы from опциональной. Я полагаю, что это то, что объединило бы всех 3 продавцов, о которых я говорил выше.

Вопросы/комментарии/ссылки приветствуются (или приветствуются?).

Ответ 1

В этом месте FROM не является обязательным (SQL Server, Oracle, Sybase).

Однако существуют тонкие различия: Oracle, например, позволяет назначать псевдоним имени таблицы, где SQL Server этого не делает; и другие вещи также немного отличаются.

Также обратите внимание, что ваш образец FROM отличается от следующего, где это обязательно:

DELETE phone_book FROM some_table WHERE ...

Ответ 2

Короткий ответ: Luceros ответ правильный: это необязательно

Я должен поддерживать sql и адаптировать его между sql-сервером и Oracle. Вот несколько правил:

  1. Пишите сценарии вручную, не используйте сгенерированный код.
  2. Всегда используйте INSERT INTO.
  3. Всегда УДАЛЯТЬ - без ОТ.
  4. Не используйте "- цитируемый идентификатор.
  5. Удалить все [] и DBO. (Имена схем)
  6. Внимание, когда вы видите УДАЛИТЬ... ОТ...
  7. Внимание, когда вы видите ОБНОВЛЕНИЕ... ОТ...
  8. ORACLE Операторы Select нуждаются в предложении from, которое вы можете использовать из DUAL

    1. ОК, вы можете писать сценарии и редактировать их стандартным способом.
      • USE [Current_DB] - вы не хотите, чтобы ссылка на вашу тестовую базу данных переходила в производственный скрипт
      • SET ANSI_NULLS ON - решить один раз, какие настройки использовать - не включать и не выключать
      • SET QUOTED_IDENTIFIER ON - идентификаторы в кавычках чувствительны к регистру.
    2. INSERT INTO требуется Oracle.
    3. Это мой личный стиль, не используйте необязательные ключевые слова, изучите значения по умолчанию
    4. Вы должны заключить в кавычки идентификатор, если вы используете одно из зарезервированных ключевых слов ORACLES в качестве имени столбца, мы ввели этот подводный камень, и в долгосрочной перспективе было бы лучше переименовать столбец на стороне sql-Server.
    5. Oracle не использует их.
    6. Oracle не поддерживает этот синтаксис.
    7. Oracle не поддерживает этот синтаксис.