Ваш вопрос о sysdate
, но на самом деле он не имеет ничего общего с sysdate
.
В Oracle для всех запросов select
требуется условие from
. В предложении from
есть , чтобы что-то содержать. Так, однажды кто-то из Oracle изобрел dual
вместе со своим очень неловким именем как встроенную таблицу с ровно одной строкой. Википедия даже имеет запись на эту тему.
Не для всех баз данных требуется условие from
для select
- например, для SQL Server, MySQL и Postgres все разрешают select
без такового.
Вы можете использовать скалярное выражение, например sysdate
, в любом месте запроса, где разрешено скалярное выражение. Вы можете повторять это столько раз, сколько хотите, совершенно независимо от того, что содержится в предложении from
.
Вы можете встроить скалярное выражение в подзапрос в любой базе данных. Например,
select (select sysdate from dual)
from dual
и
select (select getdate())
Оба допустимые выражения. Тем не менее, это почти всегда плохая практика, и ее почти всегда следует избегать. (Единственное исключение, о котором я могу подумать, это использование константы в предложении упорядочивания оконных функций в SQL Server для предотвращения издержек сортировки, таких как row_number() over (order by (select null))
).