Вставка кортежів

Основна синтаксична форма виразу вставки кортежу в відношення має вигляд:

де - список атрибутів відношення R,

- значення компонентів A, які вставляються.

Якщо список атрибутів не охоплює всі атрибути R, то компонентам кортежу, відсутнім у списку, присвоюється значення по замовчанню (зокрема, це може бути NULL).

Приклад 5.17. Поповнимо відношення StarsIn новим фактом зйомки актора у фільмі.

Значення рядка 2 ставляться у відповідність атрибутам відношення StarsIn у порядку, вказаному у першому рядку.

Якщо вставляються всі атрибути, список атрибутів можна опустити:

В цьому разі компонентам кортежу, що вставляється, значення присвоюються в порядку, визначеному при створенні відношення.

Якщо треба вставити не один кортеж, а багато, замість речення VALUES можна використати підзапит, який повертає цю множину кортежів.

Приклад 5.18. Нехай треба доповнити відношення

назвами студій, які містяться у відношенні

але які відсутні у Studio. Оскільки адреси студій та сертифікаційні номери президентів студій (не плутати з продюсерами) у Movie не вказані, компонентам Address та presC# буде присвоєне значення по замовчанню NULL. Запит має вигляд:

Рис.5.23. Запит INSERT з підзапитом

Розглянемо запит „з середини назовні”.

  • Рядки 5, 6 генерують набір кортежів з назвами студій, які містяться у Studio.
  • Рядок 4 перевіряє, чи не співпадає значення компонента StudioName з одним з цих значень.
  • Запит у рядках 2-6 повертає множину назв студій, які є у Movie, але відсутні у Studio.
  • Службове слово DISTINCT у рядку 2 забезпечує включення назви студії у Studio лише один раз, незалежно від кількості фільмів цієї студії у Movie.
  • Рядок 1 виконує вставку назв з підзапиту у відношення Studio, компоненти Address та presC# по замовчанню заповнюються NULL.

Звернімо увагу:

Підзапит у рядках 2-6 не є корельованим, він ніяк не залежить від „основного” запиту, тому, імовірно, він виконується один раз і подальша вставка у Studio не впливає на його зміст. Однак це залежить від реалізації. Без DISTINCT запит поверне різні результати:

  • Якщо вставка кортежів відкладається до завершення виконання підзапиту (рядки 2-6), запит поверне по кілька дублів студій, по числу фільмів.
  • Якщо вставка кортежів виконується по мірі іх знаходження в Movie, тобто в процесі виконання підзапиту, жодний вставлений рядок не буде повторюватись.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: