Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вся метода 3 (2).doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.15 Mб
Скачать

Выражения

Выражение — это комбинация идентификаторов, значений и операторов, которые SQL Server может обработать, чтобы получить результат. Известно несколько различных спо­собов использования выражений при обращении к данным и при их модификации. Например, выражение может быть частью запроса или определять условие для поиска дан­ных, соответствующих некоторому набору критериев.

Использование операторов в выражениях

Операторы позволяют выполнять различные операции: арифметические, сравнения, кон­катенации или присваивания. Например, можно проверить данные, чтобы выяснить, не пусто ли поле, в котором содержатся сведения о национальной принадлежности ваших клиентов (или не равно ли оно NULL).

Выполнить операцию в запросах выборки данных способен любой, кто имеет право просматривать таблицу. Чтобы выполнить модификацию данных, нужны соответствую­щие права доступа.

В SQL Server предусмотрены семь категорий операторов. Все они описаны в таблице 1.3.

Табл. 1.3.

Категории операторов

Категория оператора

Описание

Сравнение

Сравнивает значение с другим значением или выражением

Логический

Проверяют истинность условия AND, OR, NOT, LIKE, ANY, ALL или IN

Арифметический

Выполняют сложение, вычитание, умножение, деление и операции по модулю

Унарный

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

Поразрядный

Временно преобразуют обычное числовое значение (например, 150) в целочисленное и выполняют над ним поразрядные арифметические операции

Временно или постоянно

Конкатенация строк

Временно или постоянно объединяет две строки (с символьными или двоичными данными) в одну

Присваивание

Присваивают значение переменной или ассоциируют столбец результирующего набора с псевдонимом

Следующий оператор SELECT с помощью арифметических операторов вычитает из суммарного годового дохода часть, которую следует выплатить автору в качестве гонорара (она равна: объем продаж * процент авторского гонорара/100). В результате получатся сумма, которую получит издатель. Сначала вычисляется произведение ytd_sales и royalty, поскольку первым идет оператор умножения, произведение делится на 100, а частное вы­читается из ytd_sales.

USE pubs

SELECT titlejd, ytd_sales - ytd_sales * royalty / 100

FROM titles

Элементы языка управления ходом выполнения

Язык управления ходом выполнения состоит из специальных слов, которые контролируют ход выполнения операторов Transact-SQL, блоков операторов и хранимых процедур. Эти слова можно использовать в операторах Transact-SQL, пакетах и хранимых процедурах.

Если язык управления ходом выполнения не используются, отдельные операторы Transact-SQL выполняются последовательно, в том порядке, в каком они расположены. Язык управления ходом выполнения допускает объединение связанных операторов. Он также позволяет сделать их взаимозависимыми. При этом один оператор языка управле­ния ходом выполнения не может относиться сразу к нескольким пакетам или хранимым процедурам.

Ключевые слова языка управления ходом выполнения полезны, если необходимо за­ставить Transact-SQL предпринять определенного рода действие. Например, с помощью пары операторов BEGIN...END можно заключить несколько операторов Transact-SQL в один логический блок. Пара операторов IF...ELSE позволяет исполнить некоторый блок операторов, если выполняется определенное условие, а если это условие не выполняется (т.е. выполняется условие ELSE) — исполнить другой блок операторов.

В таблице 1.4. приводится описание ключевых слов языка управления ходом выполнения, которые входят в Transact-SQL.

Табл 1.4.

Ключевые слова языка управления программами

Ключевое слово

Описание

BEGIN...END

Заключает в себе набор операторов Transact-SQL, позволяя исполнять операторы группами

BREAK

Выход из цикла WHILE

CONTINUE

Продолжает выполнение цикла WHILE

GOTO

При исполнении пакета Transact-SQL вызывает переход к определенной

метке, пропуская операторы, расположенные между оператором GOTO и меткой

IF..ELSE

Ставит исполнение оператора Transact-SQL в зависимость от некоторых

условий. При наличии ELSEопределяет альтернативный оператор, который будет исполнен, если не выполняется условие IF

RETURN

Безусловное завершение запроса, хранимой процедуры или пакета

WAITFOR

Приостанавливает работу соединения в течение заданного периода

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

WHILE

Повторно исполняет оператор или блок операторов до тех пор, пока

заданное условие истинно. Как правило, используется с операторами BREAK или CONTINUE

Комментарии

Комментарии (или примечания) — это неисполняемые строки программы. С их помощью документируют исходный текст программы или временно отключают часть операторов Transact-SQL и пакетов во время их диагностики. Документирование исходного текста программы комментариями облегчает сопровождение программы. В комментариях часто записывают название программы, имя автора и даты внесения в исходный текст серьез­ных изменений, кроме того, в них можно описать сложные вычисления или разъяснить метод программирования.

SQL Server поддерживает два типа знаков комментариев

Двойной дефис ( --). Этот знак комментария можно использовать как внутри, так и в начале строки программы. Все символы от двойного дефиса до конца строки рассмат­ ривается как часть комментария. В случае многострочных комментариев, в начале каж­ дой строки комментария должен стоять двойной дефис, как показано на следующем примере:

USE Northwind

GO

-- Первая строка многострочного комментария.

-- Вторая строка многострочного комментария.

SELECT * FROM Employees

GO

Парные символы «слэш — звездочка» ( /*...*/ ). Эти знаки комментария можно ис­ пользовать посредине, и в начале строки, и даже внутри исполнимого кода. Всё между знаками начала (/* ) и конца ( */ ) комментария считается частью комментария. Мно­ гострочный комментарий должен начинаться с открывающей пары символов ( /* ) и заканчиваться закрывающей парой символов ( */). В этом случае не надо ограничи­ вать знаками комментария каждую строку.

USE Northwind

/* Первая строка многострочного комментария.

Вторая строка многострочного комментария. */ SELECT * FROM Products GO

Многострочный комментарий не должен выходить за пределы пакета. Комментарийдолжен завершаться до его конца. Например, для SQL Query Analyzer и утилиты osql команда GO является признаком конца пакета. Если первые два байта в прочитанной утилитой строке являются символами GO, утилита посылает все прочитанные после поступления последней команды GO операторы на сервер как один пакет. Если команда GO окажется в начале строки между разделителями /* и */, то в обоих пакетах будут посланы незакрытые знаки комментария (что приведет к возникновению синтаксических ошибок). В комментарии можно использовать любые буквы и цифры. SQL Server игнорирует все символы внутри комментария (за исключением команды GO). Кроме того, длина ком ментария в пакете не ограничена. Комментарий может быть как однострочным, так и мно гострочным.

Исполнение операторов Transact-SQL

В SQL Server 2000 предусмотрено несколько методов исполнения операторов Transact-SQL. Можно исполнить одиночный оператор или несколько операторов в виде пакета (кото­рый является группой из одного или нескольких операторов Transact-SQL). Операторы Transact-SQL также можно исполнять в хранимых процедурах и триггерах. На этом заня­тии вы познакомитесь с различными методиками исполнения операторов, а также узнаете о способах исполнения в зависимости от применяемой методики и об исполнении опера­торов Transact-SQL с помощью сценариев.

Одиночные операторы Transact-SQL

Обработка одиночных операторов является основным способом исполнения операторов SQL в SQL Server 2000. Проще всего обработку оператора проиллюстрировать на примере оператора SELECT.

SELECT относится к непроцедурным операторам — он не определяет конкретных шагов, которые должен выполнить сервер баз данных для выборки запрошенных данных. Другими словами, чтобы определить наиболее эффективный способ извлечения запро­шенных данных, сервер баз данных должен проанализировать оператор. Этот процесс называется оптимизацией оператора SELECT, а выполняет его оптимизатор запросов.

Процесс выбора одного плана исполнения из нескольких возможных называется опти­мизацией. Оптимизатор запросов является одним из наиболее важных компонентов СУБД. Несмотря на то, что анализ запроса и выбор оптимизатором плана исполнения связан с некоторыми издержками, они многократно окупаются при выборе оптимизатором запро­сов эффективного плана исполнения. Представьте себе, что двум строительным компаниям надо возвести дома по идентичным чертежам. Одна компания затратила несколько дней на планирование, а другая сразу же приступила к строительству. Скорее всего, первой завершит работу та компания, которая не поленилась заняться планированием.

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