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

Метод указания AIS

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

 

Рисунок 90

 

4) Задайте условие WHERE с использованием панели SQL Pane

Измените фразу WHERE на WHERE (LEFT(FIO, 1) = 'А').

Нажмите кнопку Run (Выполнить) в панели инструментов конструктора запросов, чтобы

повторно исполнить запрос. SQL Server выведет список студентов с фамилией, начинающихся с буквы

КАТУ«А» (рисунок 91). ИМ.С.СЕЙФУЛЛИНА

К.Т.Н. А.С.

Рисунок 91

5) Задайте условие WHERE с использованием оператора LIKE

Измените условие WHERE в панели SQL Pane на WHERE (FIO LIKE '%кар%').

Нажмите кнопку Run (Выполнить) в панели инструментов конструктора запросов, чтобы повторно исполнить запрос. SQL Server выведет список студентов с фамилиями, в составе которых присутствует сочетание букв «кар» (рисунок 92).

81

 

Рисунок 92

 

6) Задайте условие WHERE с использованием оператора BETWEEN

 

Измените условие WHERE в панели SQL Pane WHERE (LEFT(NAME, 1) BETWEEN 'И' AND

'Л').

КАТУНажмите кнопкуИМRun (Выполнить).СЕЙФУЛЛИНАв панели инструментов конструктора запросов, чтобы повторно исполнить запрос. SQL Server выведет список студентов с именами, начинающимися на

буквы «И», «Й», «К», «Л» (рисунок 93).

К.Т.Н. А.С.

Рисунок 93

Примечание. Transact-SQL также поддерживает оператор NOT BETWEEN, который работает точно так же, но исключает диапазон значений. Например, LEFT(FIO,1) NOT BETWEEN 'А' AND 'В' будет возвращать все строки, кроме тех, для которых значение FIO начинается с А, Б или В.

7) Задайте условие WHERE с использованием оператора IN

Измените условие WHERE в панели SQL Pane на WHERE (LEFT(NAME, 1) IN ('Г', 'Ш', 'Т')).

Нажмите кнопку Run (Выполнить) в панели инструментов конструктора запросов, чтобы повторно исполнить запрос. SQL Server выведет список студентов с именами, начинающимися на буквы «Г», «Т», «Ш» (рисунок 94).

82

 

Рисунок 94

 

8) Задайте составное условие с использованием оператора OR

 

Измените условие WHERE в панели SQL Pane на WHERE (NAME = 'Юлия') OR (OTCH =

'Александровна').

КАТУНажмите кнопкуИМRun (Выполнить).СЕЙФУЛЛИНАв панели инструментов конструктора запросов, чтобы повторно исполнить запрос. SQL Server выведет список студентов с именем «Юлия» или отчеством

«Александровна» (рисунок 95).

К.Т.Н. А.С.

Рисунок 95

Контрольные вопросы

1. Для чего применяется в запросе фраза ORDER BY?

2. Тип сортировки Ascending определяет: возвращение строк в порядке убывания, сортировку по группам в таблице или возвращение строк в порядке возрастания?

3.Какие действия выполняет данный сценарий? SELECT stdID, stdName, stdType

FROM STUDENTS ORDER BY stdName DESC

4.Является ли фраза WHERE обязательным компонентом оператора SELECT?

5.Каково предназначение символов замещения в запросах?

6.Изменится ли порядок сортировки строк при изменении порядка следования имен столбцов во фразе ORDER BY?

83

13 Связывание таблиц

Использование фразы FROM

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

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

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

Условие связывания представляет собой выражение, аналогичное условию отбора, используемого в фразе WHERE. Оно задает, как будут соответствовать строки в двух таблицах. Большинство операций связывания выполняются на основе выражений эквивалентности, таких как Column A = Column B. Однако SQL Server поддерживает любые логические операторы, а условие связывания может быть сколь угодно сложным, состоящим из нескольких выражений, соединенных с помощью логических операторов AND или OR. таким же образом, как во фразе WHERE с несколькими условиями отбора.

КАТУВыражение связыванияИМможетбыть.повтореноСЕЙФУЛЛИНАдля добавления дополнительных таблиц и представлений в запрос. Синтаксис для связывания нескольких таблиц следующий:

FROM <таблица_или_вид>

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

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

К.ТИмеетсятеоретическое. ОМАРБЕКОВАограничение в 256 таблиц на запрос, однако весьма маловероятноА, чтовам . когда-либо понадобится более пяти или шести таблиц, а обычно используется два или три. На деле, если вы обнаружите, что вам требуется связать более десяти таблиц в одном запросе, внимательно изучите схему вашей базы данныхСУБД, чтобы убедиться, что она корректно нормализована.

Создание связей

Связи могут быть созданы в конструкторе запросов Query Designer либо с использованием панели сетки Grid Pane, либо с использованием панели SQL Pane. Панелью сетки Grid Pane лучше пользоваться, если вы связываете таблицы, которые являются формально зависимыми в схеме базы данных, поскольку конструктор запросов будет создавать связь между ними автоматически. Альтернативой является применение панели SQL Pane, которая обеспечивает большую гибкость.

Имена объектов

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

Полная спецификация для любого объекта базы данных определяется четырьмя идентификаторами: именем сервера, именем базы данных, именем владельца и именем объекта. Идентификаторы отделяются друг от друга точками. Таким образом, полное имя для таблицы kontengent в данной системе будет следующим:

STATION.Student.dbo.kontengent.

Некоторые объекты, такие как таблицы и представления, содержат другие объекты. Чтобы сослаться на один из таких объектов (в нашем случае, на столбцы), вы должны просто добавить его имя после имени объекта. Полное имя для столбца PIN таблицы kontengent будет следующим:

STATION.Student.dbo.kontengent.PIN

84

К счастью, чтобы избежать двусмысленности, вам достаточно задать лишь часть иерархии. В запросе, основанном на единственной таблице, например, имени столбца само по себе будет достаточно для идентификации. Если же запрос связывает более одной таблицы, и таблицы содержат столбцы с одинаковыми именами, вы должны включить имя таблицы в имя объекта: kontengent.PIN, lichkart.PIN делают различия вполне очевидными.

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

Наиболее распространенной формой связывания является внутреннее связывание. Внутреннее связывание возвращает только те строки, для которых условие связывания имеет значение TRUE.

Внешнее связывание

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

Левое внешнее связывание возвращает все строки из левой таблицы во фразе JOIN и только те строки из правой таблицы, для которых условие связывания истинно (имеет значение TRUE). Синтаксис для левого связывания следующий:

FROM ЛеваяТаблица LEFT OUTER JOIN

ПраваяТаблица ON <условие_связывания>

Например, оператор SELECT, представленный ниже, возвращает все строки в таблице kontengent, и

КАТУтолько те строки из таблицыИМlichkart,для которых.СЕЙФУЛЛИНАусловие связывания истинно. SELECT kontengent.*, lichkart.*

FROM kontengent LEFT OUTER JOIN

lichkart ON kontengent.PIN = lichkart.PIN

Правое внешнее связывание является противоположностью левого внешнего связывания: оно

возвращает все строки из правой таблицы в фразе JOIN и отвечающие условию значения из левой Ктаблицы.Т., вНто время. ОМАРБЕКОВАкак полное внешнее связывание возвращает все строки из обеихАтаблиц, .

отвечающие условию.

Объединения

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

Синтаксис объединения отличается от синтаксиса связывания. Он имеет следующий вид: SELECT <список_столбцов> FROM <имя_таблицы>

UNION [ALL]

SELECT <список_столбцов> FROM <имя_таблицы> [ORDER BY <список_столбцов>]

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

По умолчанию SQL Server не допускает дублирования строк в результате выполнения запроса с объединением. Если вы, однако, укажете UNION ALL, дублирующиеся строки будут сохранены.

Задания:

1)свяжите две таблицы с использованием панели диаграмм Diagram Pane;

2)свяжите две таблицы с использованием панели SQL Pane;

85

3)свяжите несколько таблиц с использованием панели диаграмм Diagram Pane;

4)свяжите несколько таблиц с использованием панели SQL Pane;

5)создайте левое внешнее связывание с использованием панели диаграмм Diagram Pane;

6)создайте правую внешнюю связь с использованием панели SQL Pane;

7)создайте объединение.

Методические указания

1) Свяжите две таблицы с использованием панели диаграмм Diagram Pane

Откройте конструктор запросов Query Designer для таблицы kontengent, щелкнув правой кнопкой мыши на ее имени в рабочей панели Details Pane, указав на Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).

Отобразите панель диаграмм Diagram Pane, щелкнув на кнопке Diagram Pane (Панель диаграмм) в панели инструментов конструктора запросов.

Нажмите кнопку Add Table (Добавить таблицу) в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы) (рисунок 96).

КАТУ ИМ СЕЙФУЛЛИНА

К.Т.Н. А.С.

СУБДРисунок 96

Выделите таблицу obrazovan в списке таблиц и нажмите кнопку Add (Добавить). SQL Server добавит таблицу в запрос.

Нажмите Close (Закрыть), чтобы закрыть диалоговое окно Add Table (Добавление таблицы).

Щелкните на кнопке SQL Pane (Панель SQL) в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.

Удалите * после ключевого слова SELECT.

Щелкните на кнопке SQL Pane (Панель SQL) в панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов Query Designer отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.

Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор определенных столбцов в панели диаграмм Diagram Pane приводит к добавлению их в список столбцов. Эта возможность предусмотрена Microsoft.

В панели диаграмм Diagram Pane установите флажок рядом со столбцами FIO в таблице kontengent, а также рядом со столбцом kolbal в таблице obrazovan.

86

Нажмите кнопку Run (Выполнить) в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит количество баллов для каждой фамилии (рисунок 97).

КАТУ ИМ.С.СЕЙФУЛЛИНАРисунок 97

2) Свяжите две таблицы с использованием панели SQL Pane

К.Т.Н. ОМАРБЕКОВА А.С.

 

Скройте

панель диаграмм Diagram Pane

и отобразите панель SQL Pane,

щелкнув на

кнопках в панели инструментов конструктора запросов.

 

 

Замените имеющийся оператор SELECT на следующий:

 

SELECT

kontengent.FIO, obrazovan.KOLBAL

 

 

FROM

kontengent INNER JOIN

 

 

 

 

 

СУБД

 

 

 

obrazovan ON kontengent.PIN = obrazovan.PIN.

 

 

Нажмите кнопку Run (Выполнить)

в панели инструментов конструктора запросов, чтобы

исполнить запрос. Конструктор запросов Query Designer отобразит количество баллов для каждой фамилии (рисунок 98).

Рисунок 98

87

3)Свяжите несколько таблиц с использованием панели диаграмм Diagram Pane

Скройте панель SQL Pane и отобразите панель диаграмм Diagram Pane.

Нажмите кнопку Add Table (Добавить таблицу) в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).

Выделите таблицу lichkart в списке таблиц и нажмите кнопку Add (Добавить). SQL Server добавит таблицу в запрос.

Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно Add Table (Добавление таблицы).

В панели диаграмм Diagram Pane щелкните на столбце GRAJD в таблице lichkart, чтобы добавить столбец в запрос.

Нажмите кнопку Run (Выполнить) в панели инструментов конструктора запросов Query Designer, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит и столбец KOLBAL, и столбец GRAJD для каждой фамилии (рисунок 99).

КАТУ

К.Т.Н А.С.

Рисунок 99

4)Свяжите несколько таблиц с использованием панели SQL Pane

Скройте панель диаграмм Diagram Pane и отобразите панель SQL Pane.

Замените имеющийся оператор SELECT следующим:

SELECT

kontengent.FIO, obrazovan.KOLBAL, lichkart.GRAJD

FROM

kontengent INNER JOIN

 

obrazovan ON kontengent.PIN = obrazovan.PIN INNER JOIN

 

lichkart ON kontengent.PIN = lichkart.PIN.

Нажмите кнопку Run (Выполнить) в панели инструментов конструктора запросов Query Designer, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит и столбец KOLBAL, и столбец GRAJD для каждой фамилии (рисунок 100).

88

Рисунок 100

5)Создайте левое внешнее связывание с использованием панели диаграмм Diagram Pane

Откройте конструктор запросов Query Designer для таблицы kontengent, щелкнув правой кнопкой

мыши на ее имени в рабочей панели Details Pane, укажите на Open Table (Открытие таблицы) и КАТУвыберите Return AllИМRows (Показать.всеСстроки.СЕЙФУЛЛИНА).

Отобразите панель диаграмм Diagram Pane.

Нажмите кнопку Add Table (Добавить таблицу) в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление

Ктаблицы.Т.). Н. ОМАРБЕКОВА А.С.

Выберите lichkart в списке таблиц, а затем нажмите кнопку Add (Добавить). Конструктор запросов Query Designer добавит таблицы в запрос.

Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно.

Щелкните на кнопкеСУБДSQL Pane (Панель SQL) в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.

Удалите * после ключевого слова SELECT.

Щелкните на кнопке SQL Pane в панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов Query Designer отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.

В панели диаграмм Diagram Pane выберите столбцы FIO и NAME из таблицы kontengent, а также столбец GRAJD из таблицы lichkart для вывода.

Выделите линию связи между таблицами kontengent и lichkart, щелкнув на ней, а затем щелкните

на кнопке Properties (Свойства) в панели инструментов конструктора запросов Query Designer. Конструктор запросов Query Designer отобразит диалоговое окно Properties (Свойства) для связи.

Установите флажок All Rows From kontengent (рисунок 101).

89

Рисунок 101

Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно. Конструктор запросов Query Designer изменит линию связи. Чтобы отразить новую спецификацию связывания.

Нажмите кнопку Run (Выполнить) в панели инструментов конструктора запросов, чтобы

исполнить запрос. Конструктор запросов Query Designer отобразит все строки в таблице kontengent и КАТУотвечающие им значенияИМиз таблицыlichkart.. СЕЙФУЛЛИНА

6) Создайте правую внешнюю связь с использованием панели SQL Pane

Скройте панель диаграмм Diagram Pane и отобразите панель SQL Pane в конструкторе запросов.

Замените имеющийся оператор SELECT на следующий:

К.Т.Н. ОМАРБЕКОВА А.С.

SELECT

kontengent.FIO AS Expr1, lichkart.GRAJD

FROM

kontengent RIGHT OUTER JOIN

 

lichkart ON kontengent.PIN = lichkart.PIN

Нажмите кнопку Run (Выполнить) в панели инструментов конструктора запросов, чтобы исполнить запрос. КонструкторСУБДзапросов Query Designer отобразит все строки из таблицы lichkart, с соответствующими значениями из таблицы kontengent (рисунок 102).

Закройте окно конструктора запросов Query Designer.

7)Создайте объединение

Откройте конструктор запросов Query Designer, щелкнув правой кнопкой мыши на таблице Properties в рабочей панели Details Pane, укажите на Open Table (Открытие таблицы) и выберите Return All Rows (Показать все строки).

Отобразите панель SQL Pane.

Замените имеющийся оператор SQL следующим:

SELECT

fio

FROM

kontengent

UNION

 

SELECT

pin

FROM

lichkart

ORDER BY FIOНажмите кнопку Run (Выполнить) в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer объединит результаты выполнения двух операторов SELECT (рисунок 103).

90