SQL – инструкции для работы с данными
К инструкциям для работы с данными в реляционных базах данных относят команды добавления, удаления, изменения, выборки, команды работы с курсорами. Команда добавления выглядит следующим образом:
INSERT [INTO] {<имя таблицы>|<имя вида>} [(<список полей>)] {VALUES (<список значений>) [(список значений), …]|DEFAULT VALUES|<команда выборки данных>|<команда вызова хранимой процедуры>}
Особенности выполнения команды добавления и всех команд ведения данных рассмотрены в разделе операций обновления данных (пункт 2.1). Команда изменения данных выглядит следующим образом:
UPDATE {<имя таблицы>|<имя вида>} [<псевдоним>] SET <имя поля>=<значение> [<имя поля>=<значение>, …] [WHERE<условие>|WHERE CURRENT OF <имя курсора>]
Команда удаления выглядит следующим образом:
DELETE FROM <имя таблицы>[WHERE <условие>|WHERE CURRENT OF <имя курсора>]
Команда выборки данных, реализующая операцию селекции, выглядит следующим образом:
SELECT [<ограничения на количество выводимых записей>]
<список выбираемых элементов>
FROM <откуда осуществляется выборка>
[WHERE <условие выборки>]
[GROUP BY <список группируемых элементов>[HAVING <условие на группируемые данные>]]
[ORDER BY <список сортируемых элементов>]
В разделе команды SELECT <ограничения на количество выводимых записей> могут присутствовать следующие ключевые слова: ALL, (означающее выборку всех записей из полученного набора данных, без учета наличия возможных повторений), DISTINCT (выборка неповторяющихся записей из набора), TOP <количество > [PERCENT] (выборка указанного количества записей, возможно не записей а числа записей в процентном отношении от общего количества записей выборки).
В разделе команды SELECT <список выбираемых элементов> указывается через запятую список отбираемых элементов набора данных. Элементом может быть поле таблицы, может быть скалярная функция или функция агрегирования, может быть подзапрос. Элементу можно присвоить новое имя или псевдоним, которое видно только в пределах самой команды. Для введения псевдонима используется синтаксическая конструкция: <элемент> AS <псевдоним>.
В разделе команды SELECT <откуда осуществляется выборка> создается реляционный набор данных. В этом разделе указывается список элементов, включающий таблицы, виды, подзапросы, которые могут быть соединены с помощью операций соединения. Каждый элемент этого раздела также можно переименовать, введя псевдоним. Соединение элементов осуществляется следующим образом:
<элемент> [[AS] <псевдоним>] [<тип соединения>] JOIN <элемент> [[AS] <псевдоним>] ON <условие соединения>.
Тип соединения может быть внутренним (INNER), левым внешним (LEFT OUTER), правым внешним (RIGHT OUTER), полным (FULL). Особенности этих соединений были рассмотрены в пункте 2.1.
В разделе команды SELECT <условие выборки> присутствует предикат, сформированный с помощью операций отношений, логических операций, скалярных функций с применением имен элементом присутствующих в разделах <список выбираемых элементов> и <откуда осуществляется выборка>.
В разделе команды SELECT <список группируемых элементов> указывается список имен элементов из раздела <список выбираемых элементов> или номеров этих элементов. В результате выполнения этого раздела команды SELECT данные набора объединяются (группируются), возможно, в несколько множеств записей, каждое из которых имеет одинаковые значения элементов, присутствующих в списке группируемых элементов. В сочетании с группировкой обычно используется выполнение функций агрегирования для каждого множества сгруппированных данных. При необходимости ввести ограничение на функции агрегирования используется раздел <условие на группируемые данные>.
В разделе команды SELECT <список сортируемых элементов> указывается через запятую имена или номера элементов из раздела <список выбираемых элементов>. В результате выполнения этого раздела команды данные в результате выборки сортируются в указанном порядке, насколько это возможно в реляционной модели данных.
Подзапрос – запрос, вложенный в основной запрос. Подзапрос синтаксически, внутри основного запроса, заключается в круглые скобки. Подзапросы могут встречаться в разных разделах инструкции SELECT. Различают следующие виды подзапросов. Скалярный подзапрос – подзапрос, возвращающий одно значение. Табличный подзапрос – подзапрос, возвращающий несколько значений. Вложенный табличный подзапрос – подзапрос, возвращающий несколько столбцов и несколько строк. Каждый из названных подзапросов могут участвовать в коррелированных подзапросах. Коррелированный подзапрос – подзапрос, зависящий от значения во внешнем запросе. То есть в коррелированном запросе внутренний запрос выполняется по одному разу для каждой записи, извлеченной внешним запросом. Если существует несколько уровней вложенности подзапросов, коррелированный подзапрос может ссылаться на любой уровень главного запроса, который выше его собственного уровня. Схематично разделы команды SELECT с точки зрения видов допустимых подзапросов можно представить таким образом:
SELECT (<скалярный подзапрос>) FROM (<вложенный табличный подзапрос>) AS<псевдоним> WHERE <нечто>=(<скалярный подзапрос>)|<нечто> IN (<табличный подзапрос>) |EXISTS (<любой вид подзапроса>).
Курсор – временный набор данных, созданный на основе выборки данных. В отличие от объектов базы данных, курсор постоянно не хранится в базе данных, а используется во время сеанса работы пользователя с базой данных. Курсор необходим для доступа к отдельным записям полученного набора данных. Работа с курсором включает следующие этапы: объявление курсора, открытие курсора, доступ к отдельным записям курсора, закрытие курсора и освобождение памяти от курсора. В стандарте языка SQL для объявления временных данных, в том числе переменных, курсоров, используется команда DECLARE. Для открытия курсора команда OPEN, для доступа к отдельной записи команда FETH, для закрытия курсора команда CLOSE, для освобождения памяти команда DEALLOCATE. В диалектах SQL синтаксис перечисленных команд различается, как и наличие различных видов курсоров.