Тема 6
Введение в Transact_SQL Введение в SQL сервер.
Цель: Изучить назначение идентификаторов и выражений. Познакомится с типами
данных, используемых в SQL-сервере.
Вопросы лекции:
1.
Идентификаторы
2.
Выражения
3.
Типы данных, используемых в SQL-сервере
4.
Управляющие
конструкции
5.
Логические операторы
1. Все объекты
SQL Server 7.0 имеют свои собственные
имена, с помощью которых можно на них ссылаться. Имена объектов называются идентификаторами.
Для
обозначения временных переменных объектов сервер разрешает использовать символы
"@" (временные
переменные или параметры) и "#" (временные таблицы и хранимые
процедуры). Временные объекты
существуют только в течение сеанса или транзакции, а затем уничтожаются. Для
обозначения глобальных
временных объектов, к которым могут обращаться все пользователи, Transact-SQL позволяет использовать символы "##". Для обозначения
глобальных временных переменных в начале идентификатора указываются символы "@@".
Некоторые функции и переменные SQL Server 7.0 начинаются с символов
"@@". ,
Для обхода некоторых ограничений
можно заключать имена объектов в двойные кавычки или квадратные скобки.
Многие хранимые процедуры и
команды Transact-SQL требуют указания в качестве аргумента имени таблицы, колонки,
представления или другого объекта. В этом случае имена объектов должны заключаться в одинарные кавычки.
Выражение, заключенное в одинарные кавычки, рассматривается как символьная
строка.
2. Выражения
SQL Server 7.0 представляют собой
комбинацию идентификаторов, функций, логических и арифметических операций, констант и других объектов. Выражение
может быть использовано
в качестве аргумента в командах, хранимых процедурах или запросах. Выражение
состоит из операндов (собственно данные) и операторов (действия, производимые
над операндами). Операнды SQL-Server делятся на следующие типы:
константы
функции /
имя колонки
переменная
подзапрос
- конструкции CASE, COALESCE, NULLIF
Операторы делятся на следующие
типы: простейшие -
унарные: + -присваивание
арифметические: + -*./% (остаток
от деления) строковые:
+ (конкатенация) сравнения: < >
=<=>=<>!= (не равно) !< (не меньше чем) !> (не больше чем)
- логические: ALL
AND ANY
BETWEEN EXISTS
IN LIKE
NOT OR
SOME
битовые: &
(битовый AND) | (битовый OR) ^ (битовый исключающий OR)
3. SQL-сервер поддерживает большое число различных типов
данных: числовые, двоичные и т.д. Если имеется необходимость в размещении каких-либо
специфических данных в поле таблицы, то в этом случае можно воспользоваться так называемыми
пользовательскими типами данных.
Текстовые типы данных |
|
Char |
Текстовый тип данных, при
использовании которого задается его размерность, причем для каждого символа
выделяется один байт; до 8000 символов |
Nchar |
Аналогичен типу данных char, за исключением
размерности; до 4000 символов |
varchar |
Используется для хранения текстовой
информации переменной
длины; до 8000 символов |
Nvarchar |
Аналогичен типу данных varchar,
за исключением размерности; до 4000 символов |
Числовые типы данных |
|
int |
Целый тип в диапазоне от -231
до +231 ; занимает 4 байта в памяти |
smallint |
Целый тип в диапазоне от
-32768 до +32767, в памяти занимает 2 байта |
linyint |
Положительные целые в
диапазоне от 0 до 255, в памяти- 1 байт |
real |
Числа с плавающей точкой с
точностью до 7 цифр, в памяти - 4 байта |
float |
Числа с плавающей точкой, с
точностью до 15 цифр; занимает в памяти до 8 байт |
decimal |
Тип данных,
позволяющий определить точно
интервал значений, вводимых десятичных чисел, занимает в памяти от 2 до 17
байт |
numeric |
Аналогичен decimal |
money |
Используется для хранения
денежных значений, занимает в памяти до 8 байт |
smallmoney |
Аналогичен money,
занимает в памяти - 4 байта |
Типы данных даты и времени |
|
datetime |
Позволяет хранить комбинации
даты и времени, занимает в памяти до 8 байт |
Smalldatetime |
Аналогичен datetime,
занимает в памяти- 4 байта |
Типы данных для хранения
больших объемов информации |
|
Text |
Хранит большие объемы текстовой
информации, занимает до 1 214 783 646 байт |
Ntext |
Хранит большие объемы текстовой
информации в формате Unicode |
Image |
Хранит длинные цепочки двоичных данных, что позволяет
сохранять рисунки, фотографии
и т.д. |
Типы данных специального
назначения |
|
bit |
Принимает два значения: 0 или 1; размер - 1 бит |
binary |
Используется для хранения битовых цепочек; размерность
до 8000 байт |
varbinary |
Используется для хранения битовых цепочек варьируемой длины;
размерность до 8000 байт |
timestamp |
Тип данных, автоматически размещающий значение счетчика
каждый раз при вставке новой записи |
uniqueidentifier |
Размещение
уникального
16-разрядного
идентификатора, используемого для поддержания целостности данных. Генерация нового
идентификатора осуществляется с использованием команды SQL
NEWIDQ * |
В системе SQL-сервер имеется поддержка пользовательских
типов данных. Они могут использоваться при определении или какого-либо формата, или наоборот,
часто употребляемого. Для созданий Нового пользовательского формата необходимо
выполнить следующие действия:
o
выбрать в необходимой базе данных группу User
Defined Data Types
o
выполнить команду New User Defined Data Types меню Action
4. Выполняется
группировка двух или более команд в единый блок. Сгруппированные команды воспринимаются интерпретатором Transact-SQL как один оператор. Некоторые
команды Transact-SQL не должны выполняться вместе с другими командами,
поэтому их включение в конструкцию BEGIN...END совместно с другими командами не
допускаются. К таким командам относятся команды резервного копирования, изменения
структуры таблиц, хранимых процедур и им подобные.
EF... ELSE Формат команды
IF <логическое выражение> , <команда 1>
[ELSE
^команда 2>]
Если логическое} выражение равно TRUE, будет выполнена первая команда, если значение равно FALSE, то выполнится команда 2. Опция ELSE не обязательна.
FRONT GETDATE()
DF (MONTH (GETDATE())>4 AND
MONTH (GETDATE())<9)
BEGIN
PRINT 'Лето на дворе!!!' IF CURRENTJJSER ='dbo'
PRlN*f'Правильно,
администраторы должны м летом лакать!' ' SELECT COUNT (*) FROM authors
'END ELSE
PRINT ('Сейчас точно не лето!') Ответ будет выглядеть так: Oct 9 1999 4:37PM Сейчас точно не лето!
CASE... END
Эта конструкций часто
используется для замены множества одиночных или вложенных конструкций IF...ELSE.
Конструкция CASE...END возвращает результат, который можно использовать в
качестве переменной в других выражениях. При этом она рассматривается как
функция. Оператор CASE...END имеет два вида:
CASE <входное значение>
WHEN <вариант 1> THEN <результат 1>
[ELSE
<результат>] END
CASE I
WHEN <условие 1> THEN <результат 1>
[...]
[ELSE
<результат>] END
Пример:
I 'mod cook' THEN 'Modern
Cooking' I 'business' THEN 'Business'
'ELSE 'Not yet categorized'
COALESCE
Эта конструкция возвращает
первое ненулевое значение. Ее синтаксис следующий:
COALESCE (<множество значений>)
Конструкция возвратит первое значение, не равное NULL:
DECLARE @V1 int, @V2 char, @V3
char
SET@V1 = 1O
PRINT COALESCE (@V2, @V1, @V3)
Ответ: 10
WHILE ... BREAK & CONTINUE
С помощью этой конструкции
организуются циклы, причем это единственный тип циклов в Transact-SQL. формат
оператора следующий:
WHILE <условие>
<тело цикла>
Цикл выполняется до тех пор,
пока условие истинно. Если тело цикла предполагает несколько операций,
они заключаются в скобки BEGIN... END.
Покинуть цикл досрочно можно выполнением оператора BREAK.
Для переходя к следующей итерации цикла не заканчивая
текущую, используют оператор CONTINUE.
5. Логические
операторы предоставляют большие возможности по управлению данными и широко используются при написании
запросов и фрагментов, поэтому необходимо четкое понимание принципов работы с ними.
Оператор ALL Формат оператора:
<выражение> { = | о | != | > | >= | !>
| < | <= | !< } ALL
(<подзапрос>)
выполняется сравнение скалярного
выражения со всеми значениями, возвращаемыми подзапросом. Скалярная величина
сравнивается с каждым значением, возвращаемым подзапросом. Если логическое условие выполняется для всех
возвращаемых подзапросом значений, только тогда все условие считается выполненным:
OF H = ALL (SELECT contract
FROM authors)
PRINT
'все авторы подписали контракт*
Операторы SOME и ANY
<скалярная величина > { = | о | != | > |
>= | !> | < | <= | !< } SOME (<подзапрос>) <скалярная величина > { = |
о | != | > | >= | !> | < | <= | !< } ANY (<подзапрос>)
С помощью этих операторов можно
сравнивать скалярную величину со всеми значениями в колонке таблицы. Если хотя бы в одной
строке содержится значение, равное скалярной величине, то условие выполняется.
OF © = km (SELECT contract FROM authors) -
1РШЮТ 'Но все авторы подписали
контракт
Оператор BETWEEN
<значение> [NOT] BETWEEN
<нижний порог диапазона> AND <верхний порог диапазона>
С помощью этого оператора можно
получить ответ на вопрос, лежит ли величина в указанном диапазоне. SELECT title<
type FROM titles WHERE price BETWEEN 10 AND 15
Оператор EXISTS
EXISTS- (<подзапрос>)
Этот оператор возвращает значение TRUE, если указанный подзапрос возвращает хотя бы одну
строку. В противном случае возвращается значение FALSE:
Оператор IN
<значение> [NOT] IN
(<подзапрос> | <список значений>)
С помощью этого оператора можно
проверить, соответствует ли выражение одному из перечисленных выражений или значений,
возвращаемых подзапросом.
Оператор LIKE
Проверяемое выражение> [NOT] LIKE <шаблон
для сравнения> [ESCAPE <escape- символы>] С
помощью этого оператора можно выполнять сравнение выражения с заданным
шаблоном, использующим
символы-заменители. Допускается использование следующих символов-заменителей: % - любое количество любых символов _ - один символ
[ ] - в
скобках представляется набор возможных символов
[ ^ ] -
вместо, соответствующего символа строки будут подставлены все символы, кроме
указанных в ограничителях
Литература:
1 Е. Мамаев
«Microsoft SQL Server 2000», БХВ-Петербург, 2004г.
Контрольные вопросы:
1 Что такое выражение?
2 Что такое логические операторы? И в
каких условиях их применяют?
3 Что такое Transact SQL? И
его применение при решении задач.