2015-04-17 1 views
-2

Мне было интересно узнать о различиях между диалектами SQL. Я смотрел here и here, но либо я не мог понять ответы, либо их было недостаточно. Я относительно новичок в SQL, и поэтому я не могу найти приемлемый ответ.Полный список различий между различными версиями SQL (MySQL, SQL Server и т. Д.)

+0

Если вы новичок в SQL, различия, вероятно, не актуальны. Вы можете учиться в любой базе данных, а затем начинать понимать различия по мере того, как становитесь более опытными. –

ответ

1

На уровне coder вы обычно хотите знать об ANSI sql и отслеживать, как базы данных отличаются от этого.

Регулярные команды выбора/вставки/удаления/обновления довольно переносимы. В целом, вещи, которые будут отличаться, являются непрофильными синтаксическими аспектами, такими как:

  • Функции. любые getXXX(), rtrim (xxx) чаще всего не относятся к конкретным производителям. В любом случае, функции, как правило, также испортили использование индекса, поэтому лучше всего использовать экономно.
  • обновление/из, удаление/из. Я считаю, что это зависит от поставщика.
  • даты. на удивление не переносимы, причем каждый и его собака имеют другой способ указать маски даты, например.
  • процедурные/триггерные расширения. Любой процедурный язык, вероятно, будет иметь много возможностей для специфики поставщика.
  • кейс чувствительность. некоторые базы данных - это все UPPERCASE, некоторые из них строчные, некоторые нечувствительны.

  • любой «лишний материал» в запросе, который не является столбцом. Такие вещи, как LIMIT, rownum, rowid, обычно специфичны для поставщиков.

  • старый синтаксис внешнего соединения, как 'e.department_id = d.department_id (+)'

  • "сложных запросов". Предположим, вы хотите сбросить строки заказа для заказов, которые были полностью заполнены.

    удалить из order_lines, где не существует (выберите 1 из order_lines s где s.order_no = order_lines.order_no и s.status <> 'fullfilled')

    DB2, в прошлом, по крайней мере, будет скорее всего, жаловались на «коррелированный подзапрос», который в основном сводится к ссылке на таблицу, которую вы в процессе изменения, order_lines в этом случае.

В принципе, вы должны быть в порядке, если придерживаетесь старого ANSI SQL. Я много лет работал над PeopleSoft, и мы глубоко укоренились в написании мульти-db sql (DB2/Oracle/MSSQL и т. Д.), Не прибегая к написанию кода конкретного поставщика (т. Е. 1 запрос для Oracle, 1 для MSSQL ...). Это может быть сделано, просто требуется подозрительное мышление обо всем, что похоже на ярлыки , связанные с продавцами, независимо от того, насколько они привлекательны.

Для получения конкретных запросов отправьте сообщение на номер sqlfiddle.com, и вы можете проверить несколько случаев. И, к сожалению, я не знаю ни одной книги, целью которой является научить фактического, а не предлагаемого ANSI SQL. И, еще более, к сожалению, достойные @ стандарты ANSI SQL не видели подходящего, чтобы сделать их стандарт свободно доступным.

На уровне admin уровень, такой как все DDL для создания таблицы/индекса/..., есть еще больше различий, которые нужно знать, начиная с типов данных.

Смежные вопросы