Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_BD.doc
Скачиваний:
49
Добавлен:
17.09.2019
Размер:
1.74 Mб
Скачать

23.Sql. Встроенный join

SQL (Structurend Query Language) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL основывается на реляционной алгебре.

Запрос — команда, которую вы даете вашей программе базы данных. Запросы это часть языка DML.

DML (Язык Манипулирования Данными) – подмножество языка SQL — это набор команд, которые определяют, какие значения представлены в таблицах в любой момент времени.

JOIN — оператор языка SQL, позволяющий соединять записи из двух таблиц базы данных. Входит в раздел FROM оператора SELECT и отдельно от него не используется.

SELECT <список колонок, включаемых в ответ> FROM <список таблиц> INNER JOIN <список таблиц> ON <условие>;

Виды оператора JOIN [оператор JOIN может использоваться с различными опциями]:

  • INNER JOIN (по умолчанию). Объединяет две таблицы, где каждая строка обеих таблиц в точности соответствует условию. Если для строки одной таблицы не найдено соответствия в другой таблице, строка не включается в набор.

  • OUTER JOIN. Присоединение таблицы с необязательным присутствием записи в таблице. Также как и в случае с inner join, условие по индексированным полям и первичному ключу ускоряет все виды outer join'ов.

  • LEFT OUTER JOIN. К левой таблице присоединяются все записи из правой, соответствующие условию (по правилам inner join), плюс все не вошедшие записи из левой таблицы, поля правой таблицы заполняются значениями NULL.

  • RIGHT OUTER JOIN. К левой таблице присоединяются все записи из правой, соответствующие условию (по правилам inner join), плюс все не вошедшие записи из правой таблицы, поля левой таблицы заполняются значениями NULL.

  • FULL OUTER JOIN. К левой таблице присоединяются все записи из правой, соответствующие условию (по правилам inner join), плюс все не вошедшие записи из правой таблицы, поля левой таблицы заполняются значениями NULL и плюс все не вошедшие записи из левой таблицы, поля правой таблицы заполняются значениями NULL.

  • CROSS JOIN. Все возможные сочетания из обеих таблиц. Как уже говорилось выше, условие для этого типа оператора JOIN не указывается.

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

24.Sql. Понятие курсора. Использование курсоров

SQL (Structurend Query Language) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL основывается на реляционной алгебре.

Запрос — команда, которую вы даете вашей программе базы данных. Запросы это часть языка DML.

DML (Язык Манипулирования Данными) – подмножество языка SQL — это набор команд, которые определяют, какие значения представлены в таблицах в любой момент времени.

Курсор в SQL – это область в памяти базы данных, которая предназначена для хранения последнего оператора SQL. Если текущий оператор – запрос к базе данных, в памяти сохраняется и строка данных запроса, называемая текущим значением, или текущей строкой курсора. Указанная область в памяти поименована и доступна для прикладных программ.

Обычно курсоры используются для выбора из базы данных некоторого подмножества хранимой в ней информации. В каждый момент времени прикладной программой может быть проверена одна строка курсора.

Курсоры часто применяются в операторах SQL, встроенных в написанные на языках процедурного типа прикладные программы. Некоторые из них неявно создаются сервером базы данных, в то время как другие определяются программистами.

Основные действия с курсором [в соответствии со стандартом SQL]:

  1. DECLARE – создание или объявление курсора. Этот оператор определяет имя курсора, а также содержит в своем составе запрос, выходные данные которого сохраняются для последующей обработки включающей программой:

DECLARE <имя_курсора> [INSENSITIVE] [SCROLL] CURSOR FOR <подзапрос> [<предложение для обновления>]

  1. OPEN – открытие курсора, т.е. наполнение его данными, которые сохраняются в многоуровневой памяти. Курсор находится либо в открытом состоянии, либо в закрытом. Начальное состояние курсора - закрытое. Запрос, описанный при определении курсора, выполняется именно при открытии курсора.

OPEN CURSOR <имя курсора>

  1. FETCH – выборка из курсора и изменение с его помощью строк данных. При первом открытии курсор устанавливается перед первой строкой. Позиция курсора в открытом состоянии может быть перед определенной строкой, на определенной строке или после последней строки. Если курсор установлен на строку, то эта строка является текущей строкой курсора.

Для построчного извлечения данных из курсора используется оператор FETCH. Этот оператор продвигает позицию открытого курсора на следующую строку в порядке этого курсора, извлекает значения полей этой строки в переменные:

FETCH [[NEXT | PRIOR | FIRST | LAST | ABSOLUTE {номер_строки | @переменная_номера_строки} | RELATIVE {номер_строки | @переменная_номера_строки}] FROM ]{{[GLOBAL ]имя_курсора }| @имя_переменной_курсора } [INTO @имя_переменной [,...n]]

При указании FIRST будет возвращена самая первая строка полного результирующего набора курсора, которая становится текущей строкой (аналогично – LAST, NEXT, PRIOR). ABSOLUTE N вызывает перемещение на N-ую строку, а значение RELATIVE N - перемещение на N строк вперед, если N - положительное число, и на N строк назад, если N -отрицательное число. Если задано предложение INSENSITIVE (нечувствительный), то, пока курсор открыт, все изменения над данными курсора будут игнорироваться.

  1. UPDATE – изменение данных с помощью курсора. За одну операцию могут быть изменены несколько столбцов текущей строки курсора, но все они должны принадлежать одной таблице.

UPDATE имя_таблицы SET {имя_столбца={ DEFAULT | NULL | выражение}}[,...n] WHERE CURRENT OF {{[GLOBAL] имя_курсора} |@имя_переменной_курсора}

  1. DELETE – удаление данных с помощью курсора. Будет удалена строка, установленная текущей в курсоре:

DELETE имя_таблицы WHERE CURRENT OF {{[GLOBAL] имя_курсора} |@имя_переменной_курсора}

  1. CLOSE – закрытие курсора, после чего он становится недоступным для пользовательских программ. При закрытии снимаются все блокировки, установленные в процессе его работы. Закрытие может применяться только к открытым курсорам. Закрытый, но не освобожденный курсор может быть повторно открыт. Не допускается закрывать неоткрытый курсор.

CLOSE {имя_курсора | @имя_переменной_курсора}

  1. DEALLOCATE – освобождение курсора, т.е. удаление курсора как объекта, поскольку его закрытие необязательно освобождает ассоциированную с ним память. После освобождения курсора освобождается и память, при этом становится возможным повторное использование имени курсора.

DEALLOCATE { имя_курсора | @имя_переменной_курсора }

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