Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

SQL_LektsiiRus

.pdf
Скачиваний:
8
Добавлен:
12.02.2016
Размер:
2.1 Mб
Скачать

2МОВА ВИЗНАЧЕННЯ ДАНИХ У SQL SERVER 2005

Вверсии SQL Server 2005 предусмотрены встроенные типы данных, приведенные в табл. 2.1.

Таблица 2.1 - Типы данных SQL Server

Тип

Размер

 

Описание

 

 

данных

в байтах

 

 

 

 

 

 

Один байт отводится для восьми элементов данных

 

1

типа bit в таблице; если количество элементов

 

 

данных такого типа меньше восьми, остальные

Bit

 

биты байта не используются. Если же в столбце

 

таблицы с типом данных bit допускается

 

 

 

 

использование

NULL-значений,

то

для

 

 

представления

этих значений

применяются

 

 

дополнительные байты

 

 

Bigint

8

Целые числа от -263 до 263-1

 

 

Int

4

Целые числа от -2 147 483 648 до

 

 

 

2 147 483 647

 

 

 

 

 

 

 

 

SmallInt

2

Целые числа от -32 768 до 32 767

 

 

TinyInt

1

Целые числа от 0 до 255

 

 

Decimal

С пере-

Заданная точность и масштаб от -1038 - 1 до

 

или

менной

1038 - 1. Обозначения decimal и numeric являются

Numeric

длиной

синонимами

 

 

 

 

 

Количество денежных единиц от -263 до 263,

Money

8

определяемое с точностью до четырех десятичных

 

позиций. Позволяет представлять любые денежные

 

 

 

 

единицы, а не только доллары

 

 

SmallMoney

4

Денежные единицы от -214 748.3648 до

 

 

+214 748.3647

 

 

 

 

 

 

 

 

 

С пере-

Допускается использовать параметр (например,

 

менной

float (20)), который определяет размер и,

Float

длиной

соответственно, точность. Параметр задается в

 

 

битах. не байтах Область определения — от -

 

 

1.79Е+308 до 1.79Е+308

 

 

 

 

Данные о дате и (или) времени, которые относятся к

DateTime

8

периоду с 1 января 1753 года по 31 декабря 9999

 

года, определяемые с точностью до трех сотых

 

 

 

 

секунды

 

 

 

 

4

Данные о дате и (или) времени, которые относятся к

SmallDateTime

 

периоду с 1 января 1900 года по 6 июня 2079 года,

 

 

определяемые с точностью до одной минуты

 

 

1

Указатель на курсор. Для представления указателя

 

 

на курсор требуется только один байт, но следует

 

 

учитывать, что оперативная память необходима и

Cursor

 

для представления результирующего набора,

 

 

который фактически образует курсор; точное

 

 

значение

количества

необходимой

оперативной

 

 

памяти зависит от самого результирующего набора

 

 

С пере-

Символьные данные фиксированной длины.

 

менной

Значения данных с длиной короче заданной

Char

длиной

дополняются пробелами

до указанной длины.

 

Данные представлены в кодировке, отличной от

 

 

 

 

Unicode. Максимальное заданное значение длины

 

 

может составлять 8000 символов

 

 

 

С пере-

Символьные данные переменной длины. Значения

 

менной

данных с длиной короче заданной не дополняются

 

длиной

пробелами. Данные представлены в кодировке,

 

 

отличной от Unicode. Максимальное заданное

VarChar

 

значение длины может составлять 8000 символов,

 

но для обозначения длины можно использовать

 

 

 

 

ключевое слово max, что фактически позволяет

 

 

определять столбцы с символьными данными,

 

 

имеющими чрезвычайно большой объем (до 231

 

 

байтов данных)

 

 

 

 

 

С пере-

Символьные данные в кодировке Unicode

 

менной

фиксированной длины. Значения данных с длиной

NChar

длиной

короче

заданной

дополняются

пробелами.

 

 

Максимальное заданное значение длины может

 

 

составлять 4000 символов

 

 

 

 

С пере-

Символьные данные в кодировке Unicode

 

менной

переменной длины. Значения данных с длиной

 

длиной

короче заданной не дополняются пробелами.

 

 

Максимальное заданное значение длины может

NVarChar

 

составлять 4000 символов, но для обозначения

 

 

длины можно использовать ключевое слово mах,

 

 

что фактически позволяет определять столбцы с

 

 

символьными данными, имеющими чрезвычайно

 

 

большой объем (до 231 байтов данных)

 

Binary

С перем.

Двоичные

данные

фиксированной

длины

с

длиной

максимальной длиной 8 000 байтов

 

 

 

 

 

 

С перем.

Двоичные

данные

переменной

длины

с

 

длиной

максимальной указанной длиной 8 000 байтов, но

VarBinary

 

для обозначения длины

можно

использовать

 

ключевое слово mах, что фактически позволяет

 

 

 

 

определять столбцы типа LOB, имеющие очень

 

 

большой объем (до 231 байтов данных)

 

В СУБД SQL Server не предусмотрено применение числовых типов данных без знака.

Использование операции сложения к числам приводит к получению суммы, а после применения операции сложения к строкам происходит их конкатенация. Если в операции используются или присваиваются переменные или поля с разными типами данных, многие операции приведения данных к общему типу выполняются неявно (или автоматически), а для других типов необходимо предусмотреть применение явно заданных операций преобразования. Есть и такие типы данных, между которыми вообще невозможно выполнить преобразование.

Неопределенные данные. Иногда на практике возникают такие обстоятельства, в которых при вводе строки отсутствуют данные, относящиеся к конкретному полю. Причиной этого может стать, в частности, то, что соответствующее значение просто неизвестно.

Для представления неопределенных данных используется специальное NULL-значение. NULL-значение не имеет какого-то конкретного выражения, подразумевается, что NULL-значение свидетельствует о том, что данные, вместо которых оно применяется, не определены, или, возможно, не применимы.

Именуемые объекты SQL Server. По существу в СУБД SQL Server

имена приобретают все объекты. Частичный список именуемых объектов

SQL Server приведен ниже.

 

Хранимые процедуры.

Таблицы.

Столбцы.

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

Правила.

Ограничения целостности.

Применяемые по умолчанию значения.

Индексы.

Файловые группы.

Триггеры.

Базы данных.

Серверы.

Пользовательские функции.

Учетные записи.

Роли.

Каталоги полнотекстового поиска.

Файлы

Определяемые пользователем типы.

Правила именования объектов приведены в лабораторной работе №1.

3МОВА ПРОГРАМУВАННЯ У SQL SERVER

3.1Основные операторы языка Т-SQL

Впроцессе работы с базой данных гораздо чаще приходится пользоваться командами, предназначенными для манипулирования данными (т.е. чтения и модификации), чем командами других типов (например, предназначенными для предоставления прав пользователям или создания таблиц). Основу языка манипулирования данными (Data Manipulation Language – DML) составляют четыре оператора: SELECT, INSERT, UPDATE, DELETE, входящего в состав языка Transact-SQL (или сокращенно Т-SQL). Язык Т-SQL — это собственный диалект языка SQL (Structured Query Language – структурированный язык запросов), применяемый в СУБД SQL Server. Кроме того, в языке Т-SQL предусмотрено много операций и ключевых слов, позволяющих уточнять назначение запросов. Язык SQL ориентирован на операции с данными, представленными в виде логически взаимосвязанных совокупностей таблиц.

Утилита SQL Server Маnagement Studio содержит два основных инструмента формирования и отправки запросов: конструктор запросов (Query Designer) и редактор запросов (Query Еditor). Конструктор запросов предлагает графический метод создания запроса. В то же время редактор запросов является идеальным средством разового извлечения данных, так как не содержит графики, указывающей пользователю, как именно он должен создавать запрос. В редакторе пользователь работает с кодом настолько близко, насколько это возможно.

3.2Оператор SELECT

Оператор SELECT и применяемые в нем структуры составляют львиную долю всех команд, выполняемых в процессе работы с СУБД SQL Server. Рассмотрим основные синтаксические правила составления операторов SELECT:

SELECT *, столбцы или выражения [FROM таблица ]

[JOIN таблица ON условие ]

[WHERE условия ]

[GROUP BY столбцы ] [HAVING условия ] [ORDER BY столбцы ];

Ключевое слово SELECT указывает на то, что должно быть выполнено только чтение информации, а не ее модификация.

После SELECT задается список столбцов или выражений. Символ (*) выполняет роль подстановочного символа. Выражение SELECT * означает, что требуется выборка содержимого всех столбцов таблицы. Если надо вывести не все столбцы, то записываются имена столбцов. Как минимум в операторе SELECT обязательно наличие хотя бы одного выражения, все остальное — необязательно.

Для указания имени таблицы (или таблиц), являющейся источником получения данных, служит конструкция FROM. Конструкция FROM выполняет буквально то, что означает ключевое слово FROM (Из). Иными словами, эта конструкция определяет место, из которого должны быть получены данные. Непосредственно за ключевым словом FROM должны следовать имена одной или нескольких таблиц.

Предложение FROM в инструкции SELECT собирает все источники данных в единый набор, над которым будет работать остальная часть инструкции. В предложении FROM может участвовать множество таблиц, которые ссылаются друг на друга с помощью одного из нескольких типов объединений. Например:

SELECT * FROM Customer ]

В рассматриваемом запросе все данные должны поступить из таблицы

Customer.

Предложение WHERE фильтрует строки набора данных, собранного предложением FROM, на основе некоторых условий.

Агрегатные функции выполняют в наборе данных итоговые подсчеты. Предложение GROUP BY может группировать большие множества в несколько небольших подмножеств на основе значений столбцов, упомянутых в этом предложении. Затем агрегатные функции применяются к этим небольшим подмножествам данных, после чего результаты агрегатных функций фильтруются с помощью предложения НАVING.

Наконец, предложение ORDER BY определяет порядок сортировки результирующего набора данных.

Оператор SELECT и конструкция FROM

Допустим требуется получить список всех заказчиков, указанных по фамилиям:

Столбцы, заданные непосредственно после ключевого слова SELECT, называются списком выборки. Т.е. список выборки состоит из столбцов, которые, согласно запросу, должны участвовать в формировании выходных данных. Конструкция FROM позволяет налагать условия, определяющие, какую именно информацию должен возвратить запрос.

Подготовим запрос, который возвращает наименование и цену товара применительно к товару с кодом 356.

SELECT KodProduct, Nаmе, Price FROM Рroduction.Рroduct

Запрос возвращает все записи из таблицы, а не только ту, которая необходима.

Поэтому нам требуется такая операция проверки условия, которая позволит свести весь объем результатов запроса лишь к одному коду товара, равному 356. Именно для этой цели и предназначена конструкция WHERE. Конструкция WHERE непосредственно следует за конструкцией FROM и определяет, каким условиям должна соответствовать запись, чтобы рассматривать ее как подлежащую возврату. Для данного запроса требуется, чтобы значение KodProduct было равно 356, поэтому запрос будет выглядеть следующим образом:

SELECT KodProduct, Nаmе, Price FROM Рroduction.Рroduct WHERE KodProduct=356

Операции, которые могут использоваться в конструкции WHERE:

Операция

Примеры

 

Назначение

 

использования

 

 

 

 

1. Результаты выполнения операций сравнения

 

 

―больше‖ (>), ―меньше‖ (<) и ―равно‖ могут

 

 

изменяться в зависимости от выбранной схемы

 

 

упорядочения.

Например, если в базе данных

 

 

 

выбрана схема упорядочения, нечувствительная

 

 

 

к регистру, то ―ЯБЛОКИ‖ = ―яблоки‖, а если

 

 

 

регистр учитывается, то ― ЯБЛОКИ ‖ <> ―

 

 

 

яблоки ‖.

 

 

 

 

 

 

 

 

2. Знак операции !=, и знак <> соответствуют

 

 

 

операции сравнения на неравенство, а знаки

 

 

 

операции !< и !> рассматриваются как

 

 

 

соответствующие операциям сравнения ‗не

 

 

 

меньше‖ и ―не больше‖.

 

 

 

AND,

OR,

 

Они могут использоваться для объединения

NOT

 

 

нескольких

условий

в одной

конструкции

 

 

WHERE. В первую очередь выполняется

 

 

 

 

 

 

операция NOT, затем AND, после чего OR. Если

 

 

 

требуется

изменить

порядок

выполнения

 

 

 

операций, то можно ввести круглые скобки.

 

 

 

Следует отметить, что операция XOR в

 

 

 

непосредственном виде не поддерживается.

BETWEEN

 

Эта операция сравнения возвращает значение

 

 

 

TRUE, если первое значение находится между

 

 

 

вторым и третьим значениями включительно и

 

 

 

является

функционально

эквивалентной

 

 

 

выражению А>=В AND А<=С. В качестве

 

 

 

любого из указанных здесь значений могут быть

 

 

 

заданы имена столбцов, переменные или

 

 

 

литералы.

 

 

 

 

 

LIKE

 

 

Операция сравнения, позволяющая использовать

 

 

 

символы % и _ в качестве подстановочных

 

 

 

знаков. Символ % указывает, что вместо него

 

 

 

может быть подставлено строковое значение

 

 

 

любой длины, а символ _ указывает, что вместо

 

 

 

него

может

быть

подставлен

любой

 

 

 

символ.<Column1>.

 

 

 

 

 

 

Выражение, состоящее из квадратных скобок (

 

 

 

[]), в которые заключены символы, указывает,

 

 

 

что для сравнения может использоваться любой

 

 

 

отдельный символ, указанный в квадратных

 

 

 

скобках, или любой символ из диапазона,

 

 

 

обозначенного дефисом (—). (Например,

 

 

 

выражение [а-с] означает, что для сравнения

 

 

 

могут использоваться символы ―а‖, ‗b‖ и ―с‖, а

 

 

 

выражение [аb] — что могут использоваться

 

 

 

символы ―а‖ и ‗b‖)

 

 

 

 

 

 

 

Символ ^, стоящий за открывающей квадратной

 

 

 

скобкой, действует как знак операции инверсии

 

 

 

(обращения); он указывает, что для сравнения

 

 

 

могут использоваться все символы, кроме тех,

 

 

 

что следуют за ним.

 

 

 

IN

 

 

Операция сравнения, которая возвращает TRUE,

 

 

 

если значение, находящееся слева от ключевого

 

 

 

слова IN, согласуется с любым из значений в

 

 

 

списке, находящемся справа от ключевого слова

 

 

 

IN. Как будет показано в главе 16, эта операция

 

 

часто используется в подзапросах.

ALL, ANY,

 

Эти операции сравнения возвращают TRUE,

SOME

 

если любое или все значения (в зависимости от

 

выбранной операции) в подзапросе (subquery)

 

 

 

 

соответствуют условию операции сравнения

 

 

(comparision operator), например, <, >, =, >=.

 

 

Ключевое слово ALL указывает, что значение

 

 

должно согласовываться со всеми значениями в

 

 

множестве. Операции ANY и SОМЕ являются

 

 

функциональными эквивалентами и возвращают

 

 

ТRUЕ, если значение поля в столбце (соlumn)

 

 

или выражение (ехрression) согласуется с каким-

 

 

либо значением в множестве.

EXISTS

EXISTS(subquery)

Операция сравнения, которая возвращает TRUE,

 

 

если подзапрос (subquery) возвращает, по

 

 

крайней мере, одну строку.

Конструкция ORDER BY. Как правило, выборка данных происходит с учетом либо физической последовательности данных в таблице, либо с учетом структуры индексов, используемых СУБД SQL Server для поиска данных.

Конструкцию ORDER BY удобно рассматривать как аналог команды ―сортировать по...‖. Эта конструкция предоставляет возможность определить последовательность, в которой должны поступать затребованные данные. В конструкции ORDER BY можно использовать любые сочетания столбцов, при условии, что эти столбцы (указанные непосредственно или в каких-либо выражениях) находятся в таблицах, перечисленных в конструкции FROM.

В конструкции WHERE объединено несколько условий, а также предусмотрена конструкция ORDER BY. В конструкцию ORDER BY введено ключевое слово DESC. Это ключевое слово сообщает, что конструкция ORDER BY должна действовать, сортируя данные в порядке убывания, а не в порядке возрастания значений данных, предусмотренном по умолчанию. (Чтобы явно указать, что сортировка данных должна осуществляться по возрастанию, следует ввести ключевое слово АSC). Можно отсортировать данные по нескольким столбцам. Для этого достаточно ввести запятую, а за ней указать имя следующего столбца, по которому требуется выполнить сортировка.

Предположим, например, что требуется получить данные со всеми заказами, оформленными в период с 10 по 20 декабря 1996 года. Заказы необходимо отсортировать по дате, а также выполнить вторичную сортировку с учетом значений столбца CustomerID. Предусмотрим сортировку по значениям CustomerID в порядке убывания.

Запрос, соответствующий указанным требованиям, должен выглядеть следующим образом:

В этих результатах даты будут отсортированы в порядке возрастания (предусмотренном по умолчанию), значения CustomerID будут отсортированы в порядке убывания. В рассматриваемых примерах сортировка результатов в основном осуществляется с использованием значений одного из столбцов, данные которого включаются в конечный результат, но следует учитывать, что конструкция ORDER BY может включать любой столбец любой таблицы, применяемой в запросе, независимо от того, упоминается ли имя этой таблицы в списке выборки.

Агрегирование данных с использованием конструкции GROUP BY

Конструкция GROUP BY предназначена для агрегирования информации. Рассмотрим простой запрос без конструкции GROUP BY. Предположим, что требуется узнать, сколько деталей было заказано в какомто конкретном наборе заказов. Чтобы получить требуемые результаты, необходимо воспользоваться конструкцией GROUP BY с агрегирующей функцией; в данном случае будет применяться агрегирующая функция

SUM():

Выполнение этого запроса приводит к получению требуемых результатов:

Как и следовало ожидать, функция SUM() возвращает итоговые результаты, но к чему относятся эти итоги? Если не задана конструкция GROUP BY, то результаты, полученные с помощью функции SUM(), охватывают все значения из всех строк в заданном столбце. Но в данном случае конструкция GROUP BY предусмотрена, поэтому суммы, подсчитанные с помощью функции SUM(), являются итогами для каждой группы.

Предположим, например, что необходимо определить номера заказов, принятых каждым служащим от заказчиков с идентификаторами CustomerID, от А до АО. Для этой цели можно воспользоваться конструкцией GROUP BY, включив в нее и столбец EmployeeID, и столбец CustomerID (назначение функции СОUNT()описано ниже):

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

Обратите внимание на то, что при использовании конструкции GROUP BY каждый столбец в списке выборки оператора SELECT должен представлять собой либо столбец, указанный в конструкции GROUP BY, либо результат агрегирования.

Результаты агрегирования

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

Функция AVG. Применяется для вычисления средних значений. Создать запрос, чтобы получить среднее количество деталей в расчете

на каждый заказ, а не общее количество по каждому заказу:

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