Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Теоретическая часть




Одной из важнейших операций, которые выполняются при работе с данными, является выборка хранящейся в базе данных информации. Для этого пользова­тель должен выполнить запрос (query). В чистом виде понятие "запрос" подразу­мевает выполнение команды SELECT, предназначенной для выборки данных. При рассмотрении технологии клиент-сервер под запросом часто понимается любой набор команд, отправляемых клиентом серверу. Последний принимает запрос, обрабатывает его и в ответ отправляет клиенту конечный результат.

Под запросом мы будем понимать выборку данных из одного или более источников данных, то есть работу с командой SELECT. Сервер принимает от клиента команду SELECT, выполняет ее и возвращает в ответ пользователю набор строк (recordset), состоящий собственно из строк (row) и столбцов (column). Полученный клиентом набор строк сохраняется в оперативной памяти клиент­ского компьютера, откуда он может быть выведен в наглядной форме на экране монитора, отправлен на печать, использован в качестве входных данных для сле­дующего запроса и т. д.

Можно с уверенностью сказать, что команда SELECT является самой сложной ко­мандой Transact-SQL. При этом команда SELECT также является и наиболее часто используемой. С помощью нее можно выполнять выборку данных из таблиц, пред­ставлений, функций пользователя (возвращающих значения типа table) и т.д.

В общем случае команда SELECT начинается с ключевого слова SELECT, сопровож­даемого пробелом, после которого через запятую должен следовать список имен столбцов, которые необходимо получить. Таким образом, из всех имеющихся в таблице (в общем случае – источнике данных) столбцов можно выбрать только часть. Когда же необходимо выбрать все столбцы, то можно не перечислять их все через запятую, а просто указать символ *.

Примеры использования оператора SELECT:

1. SELECT *FROM <таблица> – Выбрать все строки в запросе.

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

2. SELECT <столбец>, <столбец>… – Выбрать подмножество столбцов в запросе.

3. SELECT <столбец> AS <псевдоним>… – Переименовать столбцы в запросе.

4. SELECT <выражение> AS <псевдоним>… – Создать вычисляемые столбцы в запросе. Параметр <псевдоним> используется для присвоения таблице псевдонима, под которым на нее нужно будет ссылаться в запросе. Часто псевдонимы таблиц применяют для более удобной ссылки на нужную таблицу. Например, если в запросе часто упоминается имя таблицы Students, но вы не хотите каждый раз писать такое длинное название, то можно воспользоваться псевдонимом таким как, например, st. Указание ключевого слова AS не требуется, хотя и разрешается.

5. SELECT TOP <количество строк>… – Вернуть первые n строк в запросе.

6. SELECT TOP <процент строк> PERCENT – Вернуть первые n процентов строк в запросе.

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

В основном работа с разделом FROM сводится к перечислению через запятую источников данных, с которыми должен работать запрос. Синтаксис:

FROM <таблица_или_представление> <оператор_связывания> <таблица_или_представление> ON <условие_связывания>.

<оператор_связывания> описывает тип выполняемого связывания. Microsoft SQL Server поддерживает внутреннее и внешнее связывание.

1. Внутреннее связывание.

SELECT …FROM <таблица> INNER JOIN <таблица> ON <условие_связывания>. Этот тип связи используется по умолчанию. Выбираются пары строк, для которых имеются строки, удовлетворяющие критерию связывания в обеих таблицах. Строки из левой таблицы, для которых не имеется пары в связанной таблице, в результат не включаются. Также не включаются строки правой таблицы, для которых нет соответствующей строки в левой таблице.

ON <search_condition>. Логическое условие связывания двух таблиц. Допустимы операторы сравнения (например, -, <, >, <-, >=,!=, <>). Чаще всего используется оператор равенства.

2. Связать несколько таблиц. Выражение связывания может быть повторено для добавления дополнительных таблиц и представлений в запрос.

SELECT…FROM <оператор_связывания> <таблица> ON <условие_связывания>

SELECT…FROM <оператор_связывания> <таблица> ON <условие_связывания>

3. Создать правое внешнее связывание.

SELECT…FROM <таблица> RIGHT OUTER JOIN <таблица> ON <условие связывания>

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

4. Создать левое внешнее связывание.

SELECT…FROM <таблица> LEFT OUTER JOIN <таблица> ON <условие связывания>

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

5. Создать полное внешнее связывание.

SELECT…FROM <таблица> FULL OUTER JOIN <таблица> ON <условие связывания>

В результат будут включены все строки как правой, так и левой таблицы. Применение ключевого слова FULL OUTER можно рассматривать как одновременное применение ключевых слов LEFT OUTER и RIGHT OUTER.

6. Создать объединение.

Объединения помещают результаты выполнения двух различных операторов SELECT в один набор строк. При внутреннем и внешнем связывании столбцы из двух таблиц размещаются построчно. Объединение размещает строки из двух таблиц в одном столбце, так как если бы взяли 2 набора строк и получили единое их множество, в котором один набор располагается под другим. Фактический порядок строк в полученном результате определяется фразой ORDER BY.

SELECT…

UNION [All]

SELECT…

[ORDER BY <список_столбцов>]

В запрос можно добавить столько операторов UNION SELECT, сколько необходимо (с учетом ограничения в 256 таблиц), но все операторы SELECT должны возвращать одно и то же количество столбцов одинаковых или совместимых типов в одном и том же порядке. Первый оператор SELECT будет определять имена столбцов, а фраза ORDER BY последнего оператора. По умолчанию SQL Server не допускает дублирования строк в результате выполнения запроса с объединением. Однако, если вы укажете UNION ALL, дублирующиеся строки будут сохранены.

Рассмотрим простейший пример использования команды SELECT для выборки дан­ных из таблицы Students базы данных Kafedra:

Пример 1.

USE Kafedra

SELECT Student.Family, Group.Gr_Name

FROM Students st inner join

Groups on st._Id_Group = gr.ID

Необходимо отметить, что все запросы выполняются в контексте какой-то базы данных. С помощью первой команды приведенного примера (USE Kafedra) мы явно выбрали в качестве текущей базу данных Kafedra. Это гарантирует, что приведенный пример будет работать независимо от того, в контексте какой базы данных вы находились в момент запуска запроса. Практически во всех примерах, которые будут приводиться далее, будет подразумеваться, что работа ведется в контексте базы данных Kafedra. Если это не так, то прежде чем выполнять примеры, следует переключить текущую базу данных, выбрав в качестве нее базу данных Kafedra.

Количество строк в таблицах имеет тенденцию увеличиваться с течением време­ни. В этом случае становится актуальным выбор из всех имеющихся в таблице строк только тех из них, которые интересуют нас в данный момент. Transact-SQL дает возможность устанавливать критерии выборки определенных строк при по­мощи раздела WHERE команды SELECT.

С помощью раздела WHERE можно сузить набор строк, включаемых в результат вы­борки. Для этого указывается логическое условие, от результата вычисления ко­торого зависит, будет ли строка включена в результат выборки или нет. Только если логическое выражение возвращает значение TRUE, то строка включается в результат выборки. В общем случае логическое выражение содержит имена столб­цов таблиц, с которыми работает запрос. Для каждой строки, возвращенной за­просом, сервер вычисляет логическое выражение, подставляя вместо имен столб­цов конкретные значения из соответствующей строки. Если при вычислении выражения возвращается значение TRUE, то есть выражение истинно, то строка будет включена в конечный результат. В противном случае строка не включается. При необходимости можно указать более одного логического выражения, объеди­нив их с помощью логических операторов OR и AND.

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

1. Любой одиночный символ.

LIKE ‘a_’ - соответствует “at” и “as”, но не “and”.

2. Любая строка из нуля или более символов.

LIKE ‘%t%’ - соответствует “at”, “but” и “together”, но не “lucky”.

3. Любой определенный символ внутри области или множества.

LIKE ‘[a-c]at’ – соответствует “cat” и “bat”, но не “fat”,

LIKE ‘[ab]at’ – соответствует “bat”, но не “cat”,

4. Любой определенный символ, не содержащийся в области или множестве.

LIKE ‘[^c]at’ – соответствует “bat” и “fat”, но не “cat”.

 

Модифицируем приведенный выше запрос таким образом, чтобы он возвращал только те строки, в которых значение в столбце Name начинается с буквы " А ":

Пример 2.

SELECT Name, Family

FROM Students

WHERE Name LIKE 'А%'

 

GROUP BY позволяет выполнять группировку строк таблиц по определен­ным критериям. Для каждой группы можно выполнить специальные функции агрегирования, которые применяются ко всем строкам в группе. Наиболее распространенными функциями агрегирования, используемыми с GROUP BY, являются: функция MIN, которая возвращает наименьшее значение во множестве, функция MAX, которая возвращает наибольшее значение на множестве, и функция COUNT, возвращающая количество значений во множестве.

Чтобы создать запрос GROUP BY:

SELECT…

FROM…

GROUP BY <группировка_по_столбцам>

 

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

Фраза HAVING ограничивает строки, возвращаемые фразой GROUP BY, таким же образом, как фраза WHERE ограничивает строки, возвращаемые фразой SELECT.

SELECT…

FROM…

GROUP BY <группировка_по_столбцам>

HAVING <условие_выбора>

 

Раздел ORDER BY предназначен для упорядочивания набора данных, возвращаемо­го после выполнения запроса.

Полный же синтаксис раздела ORDER BY следующий:

ORDER BY <имя_столбца> DESC (ASC)

Как видно из синтаксиса раздела ORDER BY, в распоряжении пользователя имеются ключевые слова ASC и DESC, с помощью которых можно явно указать, каким образом следует упорядочить строки. При указании ключевого слова ASC данные будут отсортированы по возрастанию. Если необходимо отсортировать данные по убыванию, указывается ключевое слово DESC. По умолчанию используется сортировка по возрастанию.

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

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...