Предложение FROM необходимо в каждом операторе SELECT - PullRequest
1 голос
/ 01 апреля 2009

является ли условие FROM необходимым в каждом операторе SELECT? Спасибо ..

Ответы [ 7 ]

14 голосов
/ 01 апреля 2009

Не совсем - вы можете использовать SELECT для инициализации переменной.

Примеры отсюда :

mysql> SELECT 1 + 1; -> 2

7 голосов
/ 01 апреля 2009

Нет в MySQL, нет. Вы могли бы сделать это:

SELECT 1 + 1;

Это будет в некоторых СУБД - Oracle, например, потребует от вас:

SELECT 1 + 1 FROM DUAL;
1 голос
/ 01 апреля 2009

Нет. Вы можете очень легко сделать

SELECT 1+1
0 голосов
/ 09 апреля 2016

На самом деле, оба « SELECT 1 » и « SELECT 1 FROM DUAL » работают в последних версиях MySQL.

Интересно, что " SELECT 1 WHERE 1 = 1 " требует предложения FROM: " SELECT 1 FRUAL WHERE 1 = 1 " - это нормально. На других платформах, таких как PostgreSQL, " SELECT 1 WHERE 1 = 1 " работает нормально.

Еще одна странность: « ВЫБРАТЬ 1 ИЗ ДВОЙНОЙ ГРУППЫ ПО 1, С 1 = 1 » работает в MySQL 5.7, но не работает в MySQL 5.5.


Сводка обязательного / необязательного предложения FROM на разных платформах:

  • MySQL, MariaDB, Amazon Aurora: необязательно или используйте « FROM dual ».
  • Oracle: используйте « ОТ двойного ».
  • IBM DB2: используйте « FROM sysibm.sysdummy1 ».
  • Informix: используйте " ОТ системных таблиц, ГДЕ tabid = 1 "
  • Firebird, InterBase: используйте " FROM rdb $ database ".
  • Microsoft Access: требуется, но без фиктивной таблицы. Попробуйте использовать " FROM (ВЫБЕРИТЕ СЧЕТЧИК (*) ОТ first_table_found WHERE 1 = 0) AS dual ".
  • SQL Server, SQL Azure, SQL Server CE, Sybase ASE, SQL Anywhere, Ingres, PostgreSQL, Redshift, SQLite: необязательно.
0 голосов
/ 01 апреля 2009

В основном в SQL Server 2005 ключевое слово FROM не требуется для функций скалярного значения и системных функций, но обязательно для табличных функций.

Скалярные функции могут выполняться, как показано ниже:

Выберите имя функции (аргументы)

Табличные функции могут выполняться так, как показано ниже:

Выбрать * из имени функции (аргументы)

еще

Выберите col1, col2 из имени функции (аргумент1, аргумент2)

0 голосов
/ 01 апреля 2009

Как упомянуто ocedecio ОТ не требуется в каждом утверждении.

Например, я склонен использовать следующий синтаксис для инициализации таблицы с данными

insert into status(code, description)
select 'O', 'Open'
union all select 'C', 'Closed'
union all select 'P', 'Parked'

и т.д ..

РЕДАКТИРОВАТЬ (следующие комментарии от gamecat)

Приведенный выше пример демонстрирует, когда SELECT без FROM может иметь практическое применение. Конечно, вы можете просто позвонить:

select 'O', 'Open'
union all select 'C', 'Closed'
union all select 'P', 'Parked'
0 голосов
/ 01 апреля 2009

(РЕДАКТИРОВАТЬ: пропустил вкладку MYSQL.)

Это зависит от базы данных.

В Oracle, IIRC, требуется от. Но у Oracle есть таблица DUAL, которая всегда возвращает одну строку для случаев, когда вся работа выполняется в предложении SELECT.

С другой стороны, SQL Server не требует FROM, чтобы вернуть значение переменной, просто выберите его:

SELECT @myVar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...