Язык Transact-SQL

Подкатегории

Хранимые процедуры и функции, определенные пользователем

В этом разделе вводятся описания пакетов и подпрограмм. Пакеты являются последовательностью операторов Transact-SQL и процедурных расширений. Подпрограммы могут быть либо хранимыми процедурами, либо функциями, определенными пользователем (User Defined Function, UDF). В начале главы вводятся все процедурные расширения, поддерживаемые Database Engine. После этого процедурные расширения используются вместе с операторами Transact-SQL, чтобы продемонстрировать, как могут быть реализованы пакеты. Пакет может быть сохранен как объект базы данных в виде хранимой процедуры или UDF. Одни процедуры написаны пользователями, другие предоставляются корпорацией Microsoft, они называются системными хранимыми процедурами. В отличие от пользовательских хранимых процедур функции, написанные пользователем, возвращают вызвавшей программе некоторое значение. Все подпрограммы могут быть написаны либо на Transact-SQL, либо на любом языке программирования, таком как С# или Visual Basic.

Просмотреть материалы...

Система безопасности Database Engine

Этот раздел начинается с краткого обзора наиболее важных концепций безопасности базы данных. Затем обсуждаются специфические особенности системы безопасности Database Engine. Аутентификация требует ответа на следующий вопрос: «Имеет ли этот пользователь легитимные права на доступ в систему?» Следовательно, эта концепция безопасности задает процесс проверки полномочий для предотвращения использования системы неавторизованными пользователями.

Просмотреть материалы...

Управление параллельной работой

Как вы уже знаете, данные в базе данных обычно используются многими программами пользовательских приложений. Ситуация, при которой несколько программ пользовательских приложений читают и пишут одни и те же данные в одно и то же время, называется конкурентным доступом. Следовательно, каждая СУБД должна иметь некоторый механизм управления для разрешения проблем конкурентного доступа. Высокий уровень конкурентного доступа возможен в системе базы данных, которая может управлять многими активными пользовательскими приложениями без их влияния друг на друга. И наоборот, система базы данных, где различные активные приложения влияют друг на друга, поддерживает низкий уровень конкурентного доступа. Этот раздел начинается с описания двух моделей управления конкурентным доступом, которые поддерживает Database Engine. В следующем разделе объясняется, как проблемы конкурентного доступа могут быть решены с использованием транзакций. Это обсуждение включает вводные сведения в четыре свойства транзакций, известные как свойства ACID (Atomicity, Consistency, Isolation, Durability- атомарность, согласованность, изолированность, устойчивость), обсуждаются связанные с транзакциями операторы Transact-SQL, вводится понятие протокола транзакции. Затем рассматривается блокировка и три основных свойства блокировки: модели блокировки, ресурсы блокировки, длительность блокировки. Также вводится важное понятие взаимной блокировки, которая может возникать как результат обычной блокировки.

Просмотреть материалы...

Системный каталог

В этом разделе рассматривается системный каталог Database Engine. За общими сведениями следует описание представлений для просмотра структуры некоторых каталогов; представления позволяют вам просматривать метаданные. В начале главы также рассматривается использование динамически управляемых представлений и динамически управляемых функций. А затем обсуждаются четыре альтернативных способа поиска информации метаданных: системные хранимые процедуры, системные функции, функции свойств и информационная схема.

Просмотреть материалы...

Индексы

В этом разделе описываются индексы и их роль в оптимизации времени отклика запросов. В первой части главы рассматриваются вопросы хранения индексов и существующие для этого формы. В основном глава содержит описание трех операторов Transact-SQL, имеющих отношение к индексам: create index, alter index и drop index. После этого рассматривается фрагментация индексов и ее влияние на производительность системы. Затем приводятся некоторые общие рекомендации по созданию индексов.

Просмотреть материалы...

Представления – View

Этот раздел посвящена исключительно объектам базы данных, называемым представлениями (view). Структура этой главы соответствует структуре, в которых были описаны операторы DDL и DML для базовых таблиц. В первом разделе этой главы рассматриваются операторы DDL, связанные с представлениями: create view, alter view и drop view. Затем описываются операторы DDL для представлений: select, insert, update и delete. Оператор select будет рассмотрен отдельно от других трех операторов. В отличие от базовых таблиц представления не могут быть использованы для операций модификации без некоторых ограничений.

Просмотреть материалы...

Триггеры

Этот раздел посвящен механизму, называемому триггерами. В начале главы описываются операторы Transact-SQL для создания, удаления и изменения триггеров. После этого даются примеры из различных областей приложений для этого объекта базы данных. Каждый пример создается с использованием одного из операторов insert, update или delete. Во второй части этой главы рассматриваются триггеры DDL, которые базируются на таких операторах, как create table. Опять же, даются примеры из различных областей приложений, связанных с триггерами DDL.

Просмотреть материалы...

Основные элементы SQL

В этом разделе вводятся элементарные типы данных и основные операторы, поддерживаемые в языке Transact-SQL. Во-первых, описываются базовые элементы языка, включающие константы, идентификаторы и разделители. Затем, поскольку каждый элементарный объект имеет соответствующий тип данных, подробно описываются типы данных. В дополнение к этому обсуждаются все существующие операторы и функции. В конце этой главы вводятся значения null.

Просмотреть материалы...

Язык описания данных

Этот раздел описывает все операторы Transact-SQL, связанные с языком определения данных DDL (Data Definition Language). Операторы DDL разделены на три группы, которые рассматриваются по порядку. Первая группа включает операторы, которые создают объекты, вторая группа включает операторы, которые изменяют структуру объектов, а третья группа включает операторы, которые удаляют объекты базы данных.

Просмотреть материалы...

Запросы к базе данных

В этом разделе вы изучите, как использовать оператор select для выполнения поиска данных. Здесь описывается каждое предложение этого оператора и даются многочисленные примеры с использованием базы данных sample для демонстрации практического использования каждого предложения. После этого рассматриваются агрегатные функции, множество операторов, вычисляемые столбцы и временные таблицы. Затем рассказывается более подробно о сложных запросах. Вводится оператор соединения таблиц. В дополнение к рассмотрению всех форм оператора соединения, который является наиболее важным оператором для реляционных систем баз данных, в главе рассматриваются коррелированные подзапросы и функция exists.

Просмотреть материалы...

Изменение содержимого таблиц

В дополнение к оператору select, который был описан, существуют три других оператора DML: insert, update и delete. Как и оператор select, эти три оператора модификации оперируют либо таблицами, либо представлениями. В данной главе обсуждаются эти операторы в работе с таблицами и даются примеры их использования. Дополнительно рассматриваются два других оператора: truncate table и merge. В то время как оператор truncate table является расширением в языке Transact-SQL стандарта SQL, оператор merge - новая и стандартизованная возможность в SQL Server 2008.

Просмотреть материалы...

Оценить
(0 голоса)
Теоретически не существует верхней границы на количество таблиц, которые могут быть соединены с использованием оператора select. (Одно условие соединения всегда комбинирует две таблицы!) Однако Database Engine имеет реализационные ограничения: максимальное количество таблиц, которые могут быть соединены в операторе select, равно 64. В примере 6.55 соединяются три таблицы базы данных sample.     Результат примера 6.55 может быть получен лишь в том случае, если вы соединяете как минимум три таблицы: works_on, employee и department. Эти таблицы могут быть соединены с использованием двух пар столбцов соединения: (works_on.emp_no, employee.emp_no) (employee.dept_no, department.dept_no) Пример 6.56 использует все четыре таблицы базы данных sample для получения результирующего…
Оценить
(0 голоса)
В предыдущем разделе иллюстрировались возможные методы получения естественного соединения. На первом шаге этого процесса каждая строка таблицы employee комбинировалась с каждой строкой таблицы department. Этот промежуточный результат был получен при помощи операции, называемой декартовым произведением. В примере 6.57 демонстрируется получение декартова произведения из таблиц employee и department.   Результат примера 6.57 показан в табл. 6.1. Декартово произведение комбинирует каждую строку первой таблицы с каждой строкой второй таблицы. Вообще, декартово произведение двух таблиц, где первая таблица содержит п строк, а у второй таблицы т строк, создаст результат с количеством строк, равным п х т. Следовательно, результирующий набор данных примера 6.57 содержит…
Оценить
(0 голоса)
В предыдущих примерах естественного соединения результирующий набор данных включал только строки одной таблицы, которые имели соответствующие строки из другой таблицы. Иногда бывает необходимым получать в дополнение к строкам, имеющим такое соответствие, строки, не имеющие никакого соответствия, из одной или обеих таблиц. Подобная операция называется внешним соединением. В примерах 6.58 и 6.59 показаны различия между естественным соединением и соответствующим ему внешним соединением. (Все примеры этого раздела используют таблицу employee_enh.)     В примере 6.58 используется естественное соединение для получения результирующего набора строк. Если вы хотите узнать все другие места проживания служащих, вам нужно использовать (левое) внешнее соединение. Оно называется левым внешним…
Оценить
(0 голоса)
В предыдущих разделах обсуждались наиболее важные формы соединений. В данном разделе будут рассмотрены три другие формы: ♦ тета-соединение; ♦ само-соединение; ♦ полу-соединение.
Оценить
(2 голоса)
Соединяемые столбцы не обязательно должны сравниваться с помощью только знака равенства. Операция соединения, использующая общие условия соединения, т. е. операторы, отличные от оператора равенства, называется тета-соединением. В примере 6.62, где используется таблица empioyeeenh, показана операция тета-соединения.   В примере 6.62 сравниваются соответствующие значения в столбцах domicile и location. В каждой строке результата значение столбца domicile сравнивается в алфавитном порядке со значением столбца location.
Оценить
(0 голоса)
В дополнение к соединению двух или более различных таблиц операция естественного соединения может быть также применена к одной таблице. В этом случае таблица соединяется сама с собой, столбец таблицы сравнивается с тем же столбцом из той же таблицы. Сравнение столбцов с самими собой в одной и той же таблице означает, что имя таблицы появляется дважды в предложении from оператора select. По этой причине у вас должна быть возможность ссылаться на имя одной и той же таблицы дважды. Это можно сделать, используя, по меньшей мере, один псевдоним для таблицы. То же самое верно и для имен столбцов в условии соединения оператора…
Оценить
(0 голоса)
Полусоединение похоже на естественное соединение, однако результатом полусоединения является лишь множество строк одной таблицы, где найдено одно или более соответствий во второй таблице. В примере 6.64 показана операция полусоединения.   Как можно видеть из примера 6.64, список выбора select в полусоединении содержит только столбцы таблицы employee. Это именно то, что характеризует операцию полусоединения. Подобная операция обычно применяется в распределенных запросах для минимизации передачи данных. Database Engine использует операцию самосоединения для реализации возможности, называемой запросом Star Join.
Оценить
(1 голос)
Подзапросы называются коррелированными подзапросами, если внутренний запрос зависит от внешнего запроса для всех его значений. В примере 6.65 показан коррелированный подзапрос.     Внутренний запрос в примере 6.65 должен логически выполняться много раз, потому что он содержит столбец emp_no, который принадлежит таблице employee во внешнем запросе, и значение столбца emp_no изменяется каждый раз, когда Database Engine проверяет другую строку таблицы employee во внешнем запросе. Давайте посмотрим, как система может обрабатывать запрос в примере 6.65. Во-первых, система отыскивает первую строку в таблице employee (для внешнего запроса) и сравнивает номер служащего в этом столбце (25 348) со значениями столбца workson.empno во внутреннем…
Оценить
(0 голоса)
Функция exists принимает внутренний запрос в качестве аргумента и возвращает истину, если внутренний запрос возвращает одну или более строк, и возвращает ложь, если запрос вернет ноль строк. Эта функция будет рассмотрена с использованием примеров.   Внутренний запрос в функции exists почти всегда зависит от переменной из внешнего запроса. По этой причине функция exists обычно задает коррелированный подзапрос. Давайте посмотрим, как Database Engine может обрабатывать запрос в примере 6.66. Во-первых, внешний запрос просматривает первую строку таблицы employee (Smith). Затем выполняется функция exists для определения того, существуют ли строки в таблице workson, для которых номер служащего соответствует текущей строке из внешнего запроса…
Оценить
(0 голоса)
Почти что все операторы select, в которых выполняется соединение таблиц и используется оператор join, могут быть переписаны в виде подзапросов и наоборот. Написание оператора select, использующего оператор соединения, обычно является более простым для чтения и восприятия, а также может помочь Database Engine в поиске наиболее эффективной стратегии выборки нужных данных. Однако существует несколько проблем, которые проще могут быть решены при использовании подзапросов. Также могут существовать иные проблемы, которые проще решить при помощи соединений.
© 2019 serversql.ru. Все права защищены.