Команда SELECT
- Общее описание
- Табличный оператор JOIN
- Табличный оператор UNION
- Коррелированные подзапросы
- Оператор APPLY (боковые соединения)
- Общие табличные выражения
- Строковые функции
- LTRIM, RTRIM, LOWER, UPPER, REPLACE, CONCAT, CONCAT_WS, SUBSTRING, CHARLENGTH, DATALENGTH
- Агрегатные функции
- SUM, MAX, MIN, AVG, COUNT, STRING_AGG
- Оконные (аналитические) функции
- SUM, MAX, MIN, AVG, COUNT
- ROW_NUMBER, LAG, LEAD, FIRST_VALUE, LAST_VALUE
- Прочие полезные функции
- ISNULL, NOW, NEWUUID, IN, LIKE, BETWEEN, = ANY/ALL, EXISTS
Общее описание
Особенностью использования команды SELECT в DaJet Script является то, что результат её выполнения может быть доступен только при помощи ранее объявленной переменной. Имя этой переменной указывается в предложении INTO команды SELECT. Альтернативными вариантами являются команды DECLARE или SET, которые описаны в соответствующем разделе документации, посвящённому работе с переменными. Здесь необходимо, однако, сказать, что, при использовании команды SELECT, вариант с предложением INTO является рекомендуемым и наиболее предпочтительным.
Результатом запроса может быть скалярное значение простого типа, одна запись данных object
или их набор array
. Соответственно поведение команды SELECT определяется типом переменной, указанной в предложении INTO. Если это простой тип данных, то, независимо от того какой результат вернёт запрос, переменной будет присвоено значение самого первого поля самой первой записи выборки. В свою очередь, если переменная имеет тип object
, то аналогичным образом будут получены значения всех полей только самой первой записи выборки. Таким образом, везде, где это целесообразно, следует использовать команду вида SELECT TOP 1. Только в случае использования переменной типа array
будет получен весь набор записей, возвращаемый командой SELECT. Ну и наконец, если запрос не вернёт ни одной записи, то этой переменной будет присвоено значение NULL.
Важно также отметить, что команда SELECT возвращает весь результирующий набор записей в оперативную память среды выполнения DaJet Script. То есть не рекомендуется использование этой команды, особенно совместно с переменной типа array
, если возможным результатом запроса будет большое количество данных. Что считать “большим количеством данных” очень сильно зависит от конкретных условий решаемой задачи и возможностей наличного аппаратного обеспечения. Кроме этого, следует иметь в виду, что для потоковой обработки большого количества данных предназначена команда STREAM, специально предназначенная для этого разновидность команды SELECT.
Наиболее подходящими сценариями для использования команды SELECT в DaJet Script являются запросы относительно небольших по объёму данных, например, отдельно взятых значений, настроек программы или наборов параметров для организации параллельного выполнения кода.
-- ******************************************************************************
-- * Пример команды SELECT, использующей все основные возможности синтаксиса. *
-- * Опция DISTINCT в данном случае указана только для демонстрации её наличия. *
-- ******************************************************************************
DECLARE @table array
DECLARE @company entity
USE 'mssql://server/database'
-- Запрос скалярного значения (entity)
SELECT TOP 1 Ссылка INTO @company
FROM Справочник.Организации
WHERE Код = '00-000001'
-- Запрос набора записей (array)
SELECT DISTINCT TOP 10
Номенклатура
, Количество = SUM(CASE WHEN ВидДвижения = 0
THEN Количество -- Приход
ELSE -Количество -- Расход
END)
INTO @table
FROM РегистрНакопления.ЗапасыНаСкладах
WHERE Организация = @company
GROUP BY Номенклатура
HAVING SUM(CASE WHEN ВидДвижения = 0
THEN Количество
ELSE -Количество END) > 0 -- Ненулевые остатки
ORDER BY Номенклатура
END
IF @table = NULL
THEN RETURN 'Нет данных'
ELSE RETURN @table
END
Результат выполнения запроса в DaJet Studio
Номенклатура | Количество |
---|---|
{76:d0747380-7d2b-8cfd-11e5-47e1f8c9ef49} | 102.500 |
{76:d0747380-7d2b-8cfd-11e5-47e1f8c9ef4c} | 96.400 |
{76:d0747380-7d2b-8cfd-11e5-47e1f8c9ef5f} | 13.200 |
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26f7} | 4.000 |
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26f8} | 2.000 |
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26f9} | 10.000 |
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26fa} | 1.000 |
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26fc} | 6.000 |
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26fd} | 6.000 |
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26fe} | 6.000 |