Возможности SQL | Tarantool
Документация на русском языке
поддерживается сообществом
Справочники SQL reference Возможности SQL

Возможности SQL

This section compares Tarantool’s features with SQL:2016’s «Feature taxonomy and definition for mandatory features».

For each feature in that list, there is a simple example SQL statement. If Tarantool appears to handle the example, it is marked «OK», otherwise it is marked «No».

Код возможности Возможность Пример Результаты тестов
E011-01 Типы данных INTEGER и SMALLINT CREATE TABLE t (s1 INT PRIMARY KEY); OK.
E011-02 Типы данных REAL, DOUBLE PRECISION и FLOAT CREATE TABLE tr (s1 FLOAT PRIMARY KEY); No. Tarantool’s floating point data type is DOUBLE. Note: Floating point SQL types are not planned to be compatible between 2.1 and 2.2 releases. The reason is that in 2.1 we set „number“ format for columns of these types, but will restrict it to „float32“ and „float64“ in 2.2. The format change requires data migration and cannot be done automatically, because in 2.1 we have no information to distinguish „number“ columns (created from Lua) from FLOAT/DOUBLE/REAL ones (created from SQL).
E011-03 Типы данных DECIMAL и NUMERIC CREATE TABLE td (s1 NUMERIC PRIMARY KEY); No, NUMERIC data types are not supported, although the DECIMAL data type is supported.
E011-04 Арифметические операторы SELECT 10+1, 9-2, 8*3, 7/2 FROM t; OK.
E011-05 Числовые сравнения SELECT * FROM t WHERE 1 < 2; OK.
E011-06 Неявное приведение числовых типов данных SELECT * FROM t WHERE s1 = 1.00; OK, because Tarantool allows comparison of 1.00 with an INTEGER column.

Код возможности Возможность Пример Результаты тестов
E021-01 Символьный тип данных (включая все варианты написания) CREATE TABLE t44 (s1 CHAR PRIMARY KEY); No, CHAR is not supported. This type of unsupported features will only be counted once.
E021-02 Тип данных CHARACTER VARYING (включая все варианты написания) CREATE TABLE t45 (s1 VARCHAR PRIMARY KEY); No, Tarantool only allows VARCHAR(n), which is a synonym for STRING.
E021-03 Символьные литералы INSERT INTO t45 VALUES (''); OK, and the bad practice of accepting "" for character literals is avoided.
E021-04 Функция CHARACTER_LENGTH SELECT character_length(s1) FROM t; OK. Tarantool treats this as a synonym of LENGTH().
E021-05 OCTET_LENGTH SELECT octet_length(s1) FROM t; No. There is no such function.
E021-06 Функция SUBSTRING SELECT substring(s1 FROM 1 FOR 1) FROM t; No. There is no such function. There is a function SUBSTR(x,n,n), which is OK.
E021-07 Конкатенация символов SELECT 'a' || 'b' FROM t; OK.
E021-08 Функции UPPER и LOWER SELECT upper('a'),lower('B') FROM t; OK. Tarantool supports both UPPER() and LOWER().
E021-09 Функция TRIM SELECT trim('a ') FROM t; OK.
E021-10 Неявное приведение типов символьных строк фиксированной и переменной длины SELECT * FROM tm WHERE char_column > varchar_column; No, there is no fixed-length character string type.
E021-11 Функция POSITION SELECT position(x IN y) FROM z; No. Tarantool’s POSITION function requires „,“ rather than „IN“.
E021-12 Сравнение символов SELECT * FROM t WHERE s1 > 'a'; OK. We should note here that comparisons use a binary collation by default, but it is easy to use a COLLATE clause.

Код возможности Возможность Пример Результаты тестов
E031 Идентификаторы CREATE TABLE rank (ceil INT PRIMARY KEY); No. Tarantool’s list of reserved words differs from the standard’s list of reserved words.
E031-01 Идентификаторы с разделителем CREATE TABLE "t47" (s1 INT PRIMARY KEY); OK. Also, enclosing identifiers inside double quotes means they won’t be converted to upper case or lower case, this is the behavior that some other DBMSs lack.
E031-02 Идентификаторы в нижнем регистре CREATE TABLE t48 (s1 INT PRIMARY KEY); OK.
E031-03 Символ нижнего подчеркивания в конце CREATE TABLE t49_ (s1 INT PRIMARY KEY); OK.

Код возможности Возможность Пример Результаты тестов
E051-01 SELECT DISTINCT SELECT DISTINCT s1 FROM t; OK.
E051-02 Предложение GROUP BY SELECT DISTINCT s1 FROM t GROUP BY s1; OK.
E051-04 GROUP BY может содержать столбцы вне выборки SELECT SELECT s1 FROM t GROUP BY lower(s1); OK.
E051-05 Элементы в списке выборки можно переименовывать SELECT s1 AS K FROM t ORDER BY K; OK.
E051-06 Предложение HAVING SELECT count(*) FROM t HAVING count(*) > 0; OK. Tarantool supports HAVING, and GROUP BY is not mandatory before HAVING.
E051-07 Допускается использование * в квалификаторе для списка выборки SELECT t.* FROM t; OK.
E051-08 Корреляционные имена в предложении FROM SELECT * FROM t AS K; OK.
E051-09 Переименование столбцов в предложении FROM SELECT * FROM t AS x(q,c); No.

Код возможности Возможность Пример Результаты тестов
E061-01 Предикат сравнения SELECT * FROM t WHERE 0 = 0; OK.
E061-02 Предикат BETWEEN SELECT * FROM t WHERE ' ' BETWEEN '' AND ' '; OK.
E061-03 Предикат IN со списком значений SELECT * FROM t WHERE s1 IN ('a', upper('a')); OK.
E061-04 Предикат LIKE SELECT * FROM t WHERE s1 LIKE '_'; OK.
E061-05 Предикат LIKE: предложение ESCAPE VALUES ('abc_' LIKE 'abcX_' ESCAPE 'X'); OK.
E061-06 Предикат NULL SELECT * FROM t WHERE s1 IS NOT NULL; OK.
E061-07 Предикат количественного сравнения SELECT * FROM t WHERE s1 = ANY (SELECT s1 FROM t); No. Syntax error.
E061-08 Предикат EXISTS SELECT * FROM t WHERE NOT EXISTS (SELECT * FROM t); OK.
E061-09 Подзапросы в предикате сравнения SELECT * FROM t WHERE s1 > (SELECT s1 FROM t); OK.
E061-11 Подзапросы в предикате IN SELECT * FROM t WHERE s1 IN (SELECT s1 FROM t); OK.
E061-12 Подзапросы в предикате количественного сравнения SELECT * FROM t WHERE s1 >= ALL (SELECT s1 FROM t); No. Syntax error.
E061-13 Коррелирующие подзапросы SELECT * FROM t WHERE s1 = (SELECT s1 FROM t2 WHERE t2.s2 = t.s1); OK.
E061-14 Условие поиска SELECT * FROM t WHERE 0 <> 0 OR 'a' < 'b' AND s1 IS NULL; OK.

Код возможности Возможность Пример Результаты тестов
E071-01 Табличный оператор UNION DISTINCT SELECT * FROM t UNION DISTINCT SELECT * FROM t; No. However, SELECT * FROM t UNION SELECT * FROM t; is OK.
E071-02 Табличный оператор UNION ALL SELECT * FROM t UNION ALL SELECT * FROM t; OK.
E071-03 Табличный оператор EXCEPT DISTINCT SELECT * FROM t EXCEPT DISTINCT SELECT * FROM t; No. However, SELECT * FROM t EXCEPT SELECT * FROM t; is OK.
E071-05 Столбцы, совмещенные с помощью табличных операторов, необязательно должны иметь идентичный тип данных SELECT s1 FROM t UNION SELECT 5 FROM t; OK.
E071-06 Табличные операторы в подзапросах SELECT * FROM t WHERE 'a' IN (SELECT * FROM t UNION SELECT * FROM t); OK.

Tarantool не поддерживает права, кроме как через NoSQL.

Код возможности Возможность Пример Результаты тестов
E091-01 AVG SELECT avg(s1) FROM t7; No. Tarantool supports AVG but there is no warning that NULLs are eliminated.
E091-02 COUNT SELECT count(*) FROM t7 WHERE s1 > 0; OK.
E091-03 MAX SELECT max(s1) FROM t7 WHERE s1 > 0; OK.
E091-04 MIN SELECT min(s1) FROM t7 WHERE s1 > 0; OK.
E091-05 SUM SELECT sum(1) FROM t7 WHERE s1 > 0; OK.
E091-06 Квантификатор ALL SELECT sum(ALL s1) FROM t7 WHERE s1 > 0; OK.
E091-07 Квантификатор DISTINCT SELECT sum(DISTINCT s1) FROM t7 WHERE s1 > 0; OK.

Код возможности Возможность Пример Результаты тестов
E101-01 Инструкция INSERT INSERT INTO t (s1,s2) VALUES (1,''), (2,NULL), (3,55); OK.
E101-03 Инструкция UPDATE с поиском UPDATE t SET s1 = NULL WHERE s1 IN (SELECT s1 FROM t2); OK.
E101-04 Инструкция DELETE с поиском DELETE FROM t WHERE s1 IN (SELECT s1 FROM t); OK.

Код возможности Возможность Пример Результаты тестов
E111 Инструкция SELECT, возвращающая одну строку SELECT count(*) FROM t; OK.

Код возможности Возможность Пример Результаты тестов
E121-01 DECLARE CURSOR   No. Tarantool doesn’t support cursors.
E121-02 Столбцы ORDER BY необязательно должны быть в списке выборки SELECT s1 FROM t ORDER BY s2; OK.
E121-03 Выражения в ORDER BY SELECT s1 FROM t7 ORDER BY -s1; OK.
E121-04 Инструкция OPEN   No. Tarantool doesn’t support cursors.
E121-06 Инструкция UPDATE с позицией   No. Tarantool doesn’t support cursors.
E121-07 Инструкция DELETE с позицией   No. Tarantool doesn’t support cursors.
E121-08 Инструкция CLOSE   No. Tarantool doesn’t support cursors.
E121-10 Инструкция FETCH с неявным NEXT   No. Tarantool doesn’t support cursors.
E121-17 Курсоры WITH HOLD   No. Tarantool doesn’t support cursors.

Код возможности Возможность Пример Результаты тестов
E131 Поддержка значения NULL (NULL вместо значений) SELECT s1 FROM t7 WHERE s1 IS NULL; OK.

Код возможности Возможность Пример Результаты тестов
E141-01 Ограничения NOT NULL CREATE TABLE t8 (s1 INT PRIMARY KEY, s2 INT NOT NULL); OK.
E141-02 Ограничения UNIQUE для столбцов NOT NULL CREATE TABLE t9 (s1 INT PRIMARY KEY , s2 INT NOT NULL UNIQUE); OK.
E141-03 Ограничения PRIMARY KEY CREATE TABLE t10 (s1 INT PRIMARY KEY); OK, although Tarantool shouldn’t always insist on having a primary key.
E141-04 Базовое ограничение FOREIGN KEY без действия (NO ACTION) по умолчанию для операций удаления и изменения со ссылками CREATE TABLE t11 (s0 INT PRIMARY KEY, s1 INT REFERENCES t10); OK.
E141-06 Ограничения CHECK CREATE TABLE t12 (s1 INT PRIMARY KEY, s2 INT, CHECK (s1 = s2)); OK.
E141-07 Значения столбцов по умолчанию CREATE TABLE t13 (s1 INT PRIMARY KEY, s2 INT DEFAULT -1); OK.
E141-08 NOT NULL подразумевается для первичного ключа CREATE TABLE t14 (s1 INT PRIMARY KEY); OK. We are unable to insert NULL although we don’t explicitly say the column is NOT NULL.
E141-10 Имена для FOREIGN KEY можно указывать в любом порядке CREATE TABLE t15 (s1 INT, s2 INT, PRIMARY KEY (s1,s2)); CREATE TABLE t16 (s1 INT PRIMARY KEY, s2 INT, FOREIGN KEY (s2,s1) REFERENCES t15 (s1,s2)); OK.

Код возможности Возможность Пример Результаты тестов
E151-01 Инструкция COMMIT COMMIT; No. Tarantool supports COMMIT but it is necessary to say START TRANSACTION first.
E151-02 Инструкция ROLLBACK ROLLBACK; OK.

Код возможности Возможность Пример Результаты тестов
E152-01 Инструкция SET TRANSACTION: предложение ISOLATION SERIALIZABLE SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; No. Syntax error.
E152-02 Инструкция SET TRANSACTION: предложения READ ONLY и READ WRITE SET TRANSACTION READ ONLY; No. Syntax error.

Код возможности Возможность Пример Результаты тестов
E153 Запросы, изменяющие данные, с подзапросами UPDATE "view_containing_subquery" SET column1=0; No.
E161 Комментарии SQL с двумя знаками минуса в начале --comment; OK.
E171 Поддержка SQLSTATE DROP TABLE no_such_table; No. Tarantool returns an error message but not an SQLSTATE string.
E182 Привязка базового языка   OK. Any of the Tarantool connectors should be able to call box.execute().

Код возможности Возможность Пример Результаты тестов
F021 Базовая информационная схема SELECT * FROM information_schema.tables; No. Tarantool’s metadata is not in a schema with that name (not counted in the final score).

Код возможности Возможность Пример Результаты тестов
F031-01 Инструкция CREATE TABLE создает хранимые таблицы БД CREATE TABLE t20 (t20_1 INT NOT NULL); No. We always have to specify PRIMARY KEY (we only count this flaw once).
F031-02 Инструкция CREATE VIEW CREATE VIEW t21 AS SELECT * FROM t20; OK.
F031-03 Инструкция GRANT   No. Tarantool doesn’t support privileges except via NoSQL.
F031-04 Инструкция ALTER TABLE: добавление столбца ALTER TABLE t7 ADD COLUMN t7_2 VARCHAR(1) DEFAULT 'q'; OK. Tarantool supports ALTER TABLE, and support for ADD COLUMN was added in Tarantool 2.7.
F031-13 Инструкция DROP TABLE: предложение RESTRICT DROP TABLE t20 RESTRICT; No. Tarantool supports DROP TABLE but not this clause.
F031-16 Инструкция DROP VIEW: предложение RESTRICT DROP VIEW v2 RESTRICT; No. Tarantool supports DROP VIEW but not this clause.
F031-19 Инструкция REVOKE: предложение RESTRICT   No. Tarantool does not support privileges except via NoSQL.

Код возможности Возможность Пример Результаты тестов
F041-01 Операция inner join, но необязательно с ключевым словом INNER SELECT a.s1 FROM t7 a JOIN t7 b; OK.
F041-02 Ключевое слово INNER SELECT a.s1 FROM t7 a INNER JOIN t7 b; OK.
F041-03 LEFT OUTER JOIN SELECT t7.*,t22.* FROM t22 LEFT OUTER JOIN t7 ON (t22_1 = s1); OK.
F041-04 RIGHT OUTER JOIN SELECT t7.*,t22.* FROM t22 RIGHT OUTER JOIN t7 ON (t22_1 = s1); No. Syntax error.
F041-05 Вложенные outer join SELECT t7.*,t22.* FROM t22 LEFT OUTER JOIN t7 ON (t22_1 = s1) LEFT OUTER JOIN t23; OK.
F041-07 Таблица, полученная в результате операции left или right outer join, может быть использована в inner join SELECT t7.* FROM (t22 LEFT OUTER JOIN t7 ON (t22_1 = s1)) j INNER JOIN t22 ON (j.t22_4 = t7.s1); OK.
F041-08 Все операторы сравнения поддерживаются SELECT * FROM t WHERE 0 = 1 OR 0 > 1 OR 0 < 1 OR 0 <> 1; OK.

Код возможности Возможность Пример Результаты тестов
F051-01 Тип данных DATE (включая поддержку литерала DATE) CREATE TABLE dates (s1 DATE); No. Tarantool does not support the DATE data type.
F051-02 Тип данных TIME (включая поддержку литерала TIME) CREATE TABLE times (s1 TIME DEFAULT TIME '1:2:3'); No. Syntax error.
F051-03 Тип данных TIMESTAMP (включая поддержку литерала TIMESTAMP) CREATE TABLE timestamps (s1 TIMESTAMP); No. Syntax error.
F051-04 Предикат сравнения с типами данных DATE, TIME и TIMESTAMP SELECT * FROM dates WHERE s1 = s1; No. Date and time data types are not supported.
F051-05 Явное преобразование CAST между типами даты и времени и типами символьных строк SELECT cast(s1 AS VARCHAR(10)) FROM dates; No. Date and time data types are not supported.
F051-06 CURRENT_DATE SELECT current_date FROM t; No. Syntax error.
F051-07 LOCALTIME SELECT localtime FROM t; No. Syntax error.
F051-08 LOCALTIMESTAMP SELECT localtimestamp FROM t; No. Syntax error.

Код возможности Возможность Пример Результаты тестов
F081 UNION и EXCEPT в представлениях CREATE VIEW vv AS SELECT * FROM t7 EXCEPT SELECT * * FROM t15; OK.

Код возможности Возможность Пример Результаты тестов
F131-01 Поддержка WHERE, GROUP BY и HAVING в запросах со сгруппированными представлениями CREATE VIEW vv2 AS SELECT * FROM vv GROUP BY s1; OK.
F131-02 Поддержка нескольких таблиц в запросах со сгруппированными представлениями CREATE VIEW vv3 AS SELECT * FROM vv2,t30; OK.
F131-03 Поддержка агрегатных функций в запросах со сгруппированными представлениями CREATE VIEW vv4 AS SELECT count(*) FROM vv2; OK.
F131-04 Подзапросы с предложениями GROUP BY и HAVING и сгруппированными представлениями CREATE VIEW vv5 AS SELECT count(*) FROM vv2 GROUP BY s1 HAVING count(*) > 0; OK.
F131-05 Инструкция SELECT, возвращающая одну строку, с GROUP BY и HAVING и сгруппированными представлениями SELECT count(*) FROM vv2 GROUP BY s1 HAVING count(*) > 0; OK.

No. Tarantool doesn’t have modules.

Код возможности Возможность Пример Результаты тестов
F201 Функция CAST SELECT cast(s1 AS INT) FROM t; OK.

Код возможности Возможность Пример Результаты тестов
F221 Явно заданное значение по умолчанию UPDATE t SET s1 = DEFAULT; No. Syntax error.

Код возможности Возможность Пример Результаты тестов
F261-01 Простой CASE SELECT CASE WHEN 1 = 0 THEN 5 ELSE 7 END FROM t; OK.
F261-02 CASE с поиском SELECT CASE 1 WHEN 0 THEN 5 ELSE 7 END FROM t; OK.
F261-03 NULLIF SELECT nullif(s1,7) FROM t; OK
F261-04 COALESCE SELECT coalesce(s1,7) FROM t; OK.

Код возможности Возможность Результаты тестов
F311-01 CREATE SCHEMA No. Tarantool doesn’t have schemas or databases.
F311-02 CREATE TABLE для хранимых таблиц БД No. Tarantool doesn’t have CREATE TABLE inside CREATE SCHEMA.
F311-03 CREATE VIEW No. Tarantool doesn’t have CREATE VIEW inside CREATE SCHEMA.
F311-04 CREATE VIEW: WITH CHECK OPTION No. Tarantool doesn’t have CREATE VIEW inside CREATE SCHEMA.
F311-05 Инструкция GRANT No. Tarantool doesn’t have GRANT inside CREATE SCHEMA.

Код возможности Возможность Пример Результаты тестов
F471 Скалярные значения подзапросов SELECT s1 FROM t WHERE s1 = (SELECT count(*) FROM t); OK.
F481 Расширенный предикат NULL SELECT * FROM t WHERE row(s1,s1) IS NOT NULL; No. Syntax error.
F812 Базовые флаги   No. Tarantool doesn’t support any flagging.

Код возможности Возможность Пример Результаты тестов
S011 Пользовательские типы CREATE TYPE x AS FLOAT; No. Tarantool doesn’t support distinct types.

Код возможности Возможность Пример Результаты тестов
T321-01 Пользовательские функции без переопределения CREATE FUNCTION f() RETURNS INT RETURN 5; No. User-defined functions for SQL are created in Lua with a different syntax.
T321-02 Пользовательские процедуры без переопределения CREATE PROCEDURE p() BEGIN END; No. User-defined functions for SQL are created in Lua with a different syntax.
T321-03 Вызов функций SELECT f(1) FROM t; OK. Tarantool can invoke Lua user-defined functions.
T321-04 Инструкция CALL CALL p(); No. Tarantool doesn’t support CALL statements.
T321-05 Инструкция RETURN CREATE FUNCTION f() RETURNS INT RETURN 5; No. Tarantool doesn’t support RETURN statements.

Код возможности Возможность Пример Результаты тестов
T631 Предикат IN с одним элементом списка SELECT * FROM t WHERE 1 IN (1); OK.

Total number of items marked «No»: 67

Total number of items marked «OK»: 79

Нашли ответ на свой вопрос?
Обратная связь