Ограничены ли запросы SQL используемой СУБД?

0

Я недавно читал, чтобы попытаться понять и понять, какая разница между SQL и MySQL, и я столкнулся с полезной цитатой из другой публикации. "В основном, MySQL - одна из многих книг, в которой есть все, а SQL - это то, как вы читаете, что книга." ,

В зависимости от используемого бэкэнда, то есть MySQL против PostgreSQL. Может ли SQL-запрос внезапно не стать действительным?

В частности, реляционная СУБД против нереляционной СУБД?

  • 0
    Может ли SQL-запрос внезапно стать недействительным? Да - некоторые функции могут устареть и сделать запросы недействительными. Но в обязанности производителей входит уведомлять нас об изменениях после выпуска обновлений, и наша задача - оценивать их и реагировать соответствующим образом. Кстати, вы не должны думать, что запросы переносятся между продуктами разных производителей, как они реализуют стандарты, и расширения (добавленной стоимости) зависят от них.
Теги:
database
rdbms

2 ответа

3

Каждая база данных реализует собственный диалект языка SQL. Диалекты могут различаться простыми способами и фундаментальными способами. Например:

  • Функции могут иметь разные имена (например, len() vs length()).
  • Базы данных могут реализовать не реализовывать некоторый набор функций (например, row_number()).
  • Базы данных могут не поддерживать общие выражения таблиц.
  • Базы данных могут не поддерживать определенные функции, такие как full outer join.

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

  • 0
    о, так вы говорите, если я напишу оператор SQL, такой как. `` `ВЫБЕРИТЕ Customers.CustomerName, Orders.OrderID ИЗ ПОКУПАТЕЛЕЙ ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ Заказы ПО Customers.CustomerID = Orders.CustomerID ORDER BY Customers.CustomerName; `` `Это может быть допустимый оператор SQL, но может или не может работать в зависимости от СУБД?>
  • 0
    Полное внешнее соединение не поддерживается в MySQL.
Показать ещё 4 комментария
2

Да, диалекты могут различаться.

Есть две причины:

  1. Стандарт ISO SQL не требует реализации всех функций, которые он определяет. Большинство функций, определенных в стандарте SQL, являются так называемыми дополнительными функциями.

  2. Некоторые базы данных даже не реализуют обязательные функции или не предлагают собственный синтаксис для функций, где стандарт SQL предусматривает другое решение (возможно, для блокировки поставщика).

Я запускаю веб-сайт, целью которого является пролить свет на эти джунгли: https://modern-sql.com/

Например, одна из самых основных функций, которая уже присутствовала в SQL-92 (но по-прежнему является необязательной функцией), является предложением VALUES. Вы можете видеть, как это (не) поддерживается здесь:

Надеюсь, все становится лучше. Например, MariaDB (еще не упомянутый на моем сайте) представил предложение VALUES в недавнем выпуске 10.3.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню