Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL.doc
Скачиваний:
4
Добавлен:
07.12.2018
Размер:
284.16 Кб
Скачать

6. Команда удаления таблицы и команды удаления данных из таблицы. Синтаксис, подробное описание секций команд. Примеры.

DROP {TABLE таблица | INDEX индекс ON таблица | PROCEDURE процедура | VIEW представление}

Ниже перечислены аргументы инструкции DROP:

Элемент

Описание

таблица

Имя таблицы, которую следует удалить или из которой следует удалить индекс.

процедура

Имя удаляемой процедуры.

представление

Имя удаляемого представления.

индекс

Имя индекса, удаляемого из таблицы.

Дополнительные сведения

Прежде чем удалить таблицу или удалить из нее индекс, необходимо ее закрыть.

Кроме того, для удаления индекса из таблицы можно использовать инструкцию ALTER TABLE.

Для создания таблицы можно использовать инструкцию CREATE TABLE, а для создания индекса - инструкцию CREATE INDEX или ALTER TABLE. Чтобы изменить таблицу, примените инструкцию ALTER TABLE.

Пример

DROP TABLE PERSONS

7. Commontableexpressions (cte). Их назначение и синтаксис описания. Ограничения при описании cte. Рекурсивные cteи ограничения при их описании. Примеры.

Секция WITH позволяет описывать common table expressions (CTE), которые по сути являются поименованными запросами SELECT (аналогично представлениям), к которым можно обращаться в последующей команде DML. Использование CTE допустимо, если уровень совместимости для БД выставлен в значение 90. Следует отметить, что CTE может использовать рекурсию, т.е. команду SELECT, которая обращается к самому CTE. В общем виде секция WITH выглядит следующим образом:

WITH имя_CTE [(перечень_имен_столбцов)] AS (перечень_запросов_SELECT)

Таким образом, в этой секции можно объединять несколько CTE. Перечень_запросов_SELECT является набором команд SELECT, объединенных каким-либо из операторов EXCEPT, INTERCEPT или UNION [ALL] (в случае нерекурсивного CTE). В случае рекурсивного CTE Перечень_запросов_SELECT выглядит следующим образом:

Следует отметить, что количество столбцов объединяемых запросов должно быть одинаково, а их типы данных – совместимы.

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

  1. CTE может ссылаться само на себя или на ранее описанные CTE, но не может ссылаться на CTE, которые еще не описаны.

  2. Нельзя использовать секцию WITH в CTE.

  3. В запросах SELECT, которые образуют CTE, не могут быть использованы следующие секции:

  • COMPUTE [BY].

  • ORDER BY (кроме случая, когда используется опция TOP).

  • INTO.

  • OPTION с указанием настроек поведения запроса.

  • FOR XML.

  • FOR BROWSE.

  • Если команда, содержащая секцию WITH идет не 1-ой в пакете команд, то предшествующая ей команда должна завершаться символом ;.

    Для рекурсивных CTE существует ряд дополнительных правил и ограничений:

    1. Секция FROM рекурсивных запросов должна ссылаться на имя CTE, к которому они принадлежат, только 1 раз.

    2. Следующие секции, операторы и конструкции не могут использоваться в запросах SELECT, которые образуют CTE:

    • Опции DISTINCT и TOP.

    • GROUP BY.

    • HAVING.

    • Операторы {LEFT | RIGHT | FULL} [OUTER] JOIN (INNER JOIN и CROSS JOIN- допустимы).

    • Вложенные запросы SELECT.

    • Скалярные агрегационные функции.

  • Все столбцы, возвращаемые рекурсивным CTE, имеют свойство NULL.

  • Представление, содержащее рекурсивные CTE, не может быть использовано для изменения данных в связанных с ним таблицах.

  • Если рекурсивный CTE содержится в команде SELECT, которая описывает курсор, то тип курсора может быть только STATIC или FAST_FORWARD. В противном случае - тип курсора будет приведен к типу STATIC.

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

    Пример

    with cte1as ( select subject, left(group_name, 2) [group_name] from GROUPS, SUBJECT)

    select distinct * from cte1 order by kurs, group_name

  • Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]