loading..
Русский    English
16:51
листать

Конструктор значений таблицы

Синтаксис конструктора значений таблицы:

  1. VALUES
  2. (<элемент конструктора>, <элемент конструктора>, ...),
  3. (<элемент конструктора>, <элемент конструктора>, ...),
  4. ...
  5. (<элемент конструктора>, <элемент конструктора>, ...)

При этом элементом конструктора может быть:

- выражение, вычисляющее значение, совместимое с типом данных соответствующего столбца таблицы;

- DEFAULT - для подстановки значения по умолчанию для соответствующего столбца таблицы;

- NULL;

- подзапрос, возвращающий одно значение, совместимое с типом данных соответствующего столбца таблицы.

Конструктор значений таблицы может использоваться для вставки набора строк в существующую таблицу с помощью одного оператора INSERT.

Создадим следующую таблицу для выполнения примеров:

  1. CREATE TABLE Items (
  2. item_no int PRIMARY KEY,
  3. maker char(10),
  4. type char(10) DEFAULT 'PC',
  5. value int
  6. );

Вставим в таблицу 4 строки, используя конструктор.

  1. INSERT INTO Items VALUES
  2. (1, 'A', 'Laptop', 12),
  3. (2, 'B', DEFAULT, NULL),
  4. (3, 'C', 'Printer', (SELECT CAST(model AS int) FROM Printer WHERE code=1)),
  5. (4, 'C', 'Printer', (SELECT CAST(model AS int) FROM Printer WHERE code=77));

  1. SELECT * FROM Items;

item_no    maker    type    value
1    A             Laptop        12
2    B             PC            NULL
3    C             Printer       3001
4    C             Printer       NULL

Последнее значение в двух последних строках было получено с помощью подзапроса, который возвращает либо одно значение (поскольку выполняется отбор по ключу) с номером модели из таблицы Printer, либо ни одного. Последнее имеет место для четвертой строки, поскольку коду 77 не отвечает никакая строка таблицы Printer. В этом случае будет записано NULL-значение.

Конструктор значений таблицы может использоваться также в предложении FROM. В параграфе, посвещенном генерации числовой последовательнсти, последний пример, который находит 100 последовательных незанятых номеров моделей, с учетом этой возможности можно переписать более компактно:

Консоль
Выполнить
  1. SELECT (SELECT MAX(model)
  2.     FROM Product
  3.     ) + 5*5*(a-1) + 5*(b-1) + c AS num
  4.     FROM
  5.     (VALUES(1),(2),(3),(4),(5)) x(a) CROSS JOIN
  6.     (VALUES(1),(2),(3),(4),(5)) y(b)  CROSS JOIN
  7.     (VALUES(1),(2),(3),(4),(5)) z(c)
  8.     WHERE 5*5*(a-1) + 5*(b-1) + c <= 100
  9.     ORDER BY 1;

Еще один пример использования конструктора значений таблицы для трансформации строки в столбец можно увидеть в главе, посвященной оператору CROSS APPLY.

Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX Больше тэгов
Учебник обновлялся
несколько дней назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100