Файл: Базы данных МУ КР ЛР.pdf

Добавлен: 28.11.2018

Просмотров: 4420

Скачиваний: 7

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

46 

предложение HAVING определяет,  какие  сгруппированные  записи, 

выданные  в  результате  выполнения  запроса,  отображаются  при  использо-

вании  инструкции SELECT с  предложением GROUP BY. После  того  как 

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

ложения GROUP BY, предложение HAVING отберет  те  из  них,  которые 

удовлетворяют условиям отбора, указанным в предложении HAVING; 

предложение ORDER BY позволяет отсортировать записи, получен-

ные  в  результате  запроса,  в  порядке  возрастания  или  убывания  на  основе 

значений указанного поля или полей. 

Следует  отметить,  что  инструкции SELECT не  изменяют  данные 

в базе данных. 

Для более наглядного представления результатов выполнения запро-

сов  на  выборку  добавим  в  нашу  базу  данных  таблицы  «Дисциплины» 

и «Успеваемость» и добавим поле «Номер_группы» в таблицу «Студенты» 

(рис. 15), а также заполним эти таблицы. 

 

 

Рис. 15 — Обновленная схема базы данных 

 

На  рисунке 16 приведено  содержимое  таблиц  «Студент», «Успевае-

мость» и «Дисциплина». 

 


background image

 

47 

 

Рис. 16 — Содержимое таблиц базы данных 

 

В  следующем  примере  представлен  простейший  запрос  на  выборку 

записей  из  таблицы  «Студенты»,  в  котором  отбираются  студенты,  обу-

чающиеся в группе 432-1: 

SELECT Студент.Номер_зачетной_книжки,  

Студент.ФИО_студента, Студент.Номер_группы 

FROM Студент 

WHERE Студент.Номер_группы='432-1'; 

На рисунке 17 представлен результат выполнения этого запроса, бы-

ли найдены 2 записи, удовлетворяющие критерию запроса. 

 

 

Рис. 17 — Результат выполнения запроса 

 

Помимо  обычных  знаков  сравнения (=,<,>,<=,>=, <>) в  языке SQL 

в условии отбора используется ряд ключевых слов: 


background image

 

48 

Is not null — выбрать только непустые значения; 

Is null — выбрать только пустые значения; 

Between…And определяет принадлежность значения выражения ука-

занному диапазону.  

Синтаксис: 

выражение [Not] Between значение_1 And значение_2, 

где    выражение — выражение,  определяющее  поле,  значение  которого 

проверяется на принадлежность к диапазону; 

значение_1, значение_2 — выражения, задающие границы диапазона. 

Если значение поля, определенного в аргументе выражение, попада-

ет в диапазон, задаваемый аргументами значение_1 и значение_2 (включи-

тельно), то оператор Between...And возвращает значение True; в противном 

случае  возвращается  значение False. Логический  оператор Not позволяет 

проверить  противоположное  условие:  что  выражение  находится  за  преде-

лами  диапазона,  заданного  с  помощью  аргументов  значение_1  и  значе-

ние_2. 

Оператор Between...And часто  используют  для  проверки:  попадает 

ли значение поля в указанный диапазон чисел. 

Если  выражение,  значение_1  или  значение_2  имеет  значение Null, 

оператор Between...And возвращает значение Null. 

 

Создание запроса на выборку с внутренним соединением 

Операция INNER JOIN объединяет записи из двух таблиц, если свя-

зующие поля этих таблиц содержат одинаковые значения.  

Синтаксис операции: 

FROM  таблица_1  INNER JOIN  таблица_2 ON таблица_1.поле_1  опе-

ратор таблица_2.поле_2, 


background image

 

49 

где   таблица_1, таблица_2 — имена таблиц, записи которых подлежат объ-

единению; 

поле_1,  поле_2 — имена  объединяемых  полей.  Поля  должны  иметь 

одинаковый тип данных и содержать данные одного рода, однако эти поля 

могут иметь разные имена; 

оператор — любой оператор сравнения: "=," "<," ">," "<=," ">=," или "<>". 

Операцию INNER JOIN можно  использовать  в  любом  предложении 

FROM.  Это  самые  обычные  типы  связывания.  Они  объединяют  записи 

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

значения.  

В  следующем  примере  составим  запрос,  выдающий  сведения  об  ус-

певаемости студентов по всем изученным ими дисциплинам: 

SELECT Студент.ФИО_студента as ФИО, Дисциплина.  

Наименование_дисциплины as Предмет, Успеваемость. Семестр, Успевае-

мость.Оценка 

FROM Студент INNER JOIN  

(Дисциплина INNER JOIN Успеваемость ON Дисциплина. 

Код_дисциплины = Успеваемость.Код_дисциплины) 

ON Студент.Код_студента = Успеваемость.Код_студента; 

На рисунке 18 представлен результат выполнения этого запроса. 

 

Рис. 18 — Результат выполнения запроса с внутренним соединением 


background image

 

50 

Создание запроса на выборку с внешним соединением 

Операции LEFT JOIN, RIGHT JOIN объединяют записи исходных 

таблиц при использовании в любом предложении FROM. 

Операция LEFT JOIN используется для создания внешнего соедине-

ния, при котором все записи из первой (левой) таблицы включаются в ре-

зультирующий набор, даже если во второй (правой) таблице нет соответст-

вующих им записей. 

Операция RIGHT JOIN используется для создания внешнего объеди-

нения,  при  котором  все  записи  из  второй  (правой)  таблицы  включаются 

в результирующий набор, даже если в первой (левой) таблице нет соответ-

ствующих им записей. 

Синтаксис операции: 

FROM таблица_1 [ LEFT | RIGHT JOIN таблица_2  

ON таблица_1.поле_1 оператор таблица_2.поле_2 

В  следующем  примере  в  результате  выполнения  запроса  будут  най-

дены все студенты и их  успеваемость, при этом  в результирующий набор 

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

отсутствуют: 

SELECT Студент.ФИО_студента, Дисциплина.  

Наименование_дисциплины, Успеваемость.Семестр, Успеваемость. Оценка 

FROM Студент LEFT JOIN  

(Дисциплина RIGHT JOIN Успеваемость ON Дисциплина. 

Код_дисциплины = Успеваемость.Код_дисциплины) 

ON Студент.Код_студента = Успеваемость.Код_студента; 

На рисунке 19 представлен результат выполнения этого запроса, где 

видно, что по сравнению с предыдущим примером добавлена еще одна за-

пись о студенте Глазове Олеге Владимировиче.