Главная » Просмотр файлов » Диго С.М. Базы данных проектирование и использование

Диго С.М. Базы данных проектирование и использование (1084447), страница 50

Файл №1084447 Диго С.М. Базы данных проектирование и использование (Диго С.М. Базы данных проектирование и использование) 50 страницаДиго С.М. Базы данных проектирование и использование (1084447) страница 502018-01-12СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 50)

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

Приведенные ниже операторы (1) и (2) SQL эквивалентны; они возвращают все записи из таблицы «Сотрудники»:

  1. SELECT ALL*

FROM Сотрудники;

  1. SELECT *

FROM Сотрудники;

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

Поясним разницу между DISTINCTROW и DISTINCT на следу­ющих примерах. Пусть имеется таблица «Расписание»:

Расписание

Код_сотрудника

Код_предмета

Дата

2

1

01.01.2002

3

1

01.01.2002

2

1

02.01.2002

3

1

02.01.2002

2

2

01.01.2002

3

5

02.01.2002

Использование оператора SELECT с DISTINCTROW

SELECT DISTINCTROW сотрудник.фио, расписание.код_предмета

FROM сотрудник INNER JOIN расписание

ON сотрудник.код_сотрудника = расписание.код_сотрудника;

даст следующий результат:

Distinctrow

ФИО

Кодпредмета

Жуков О. А.

1

Жуков О.А.

2

Жуков О.А.

1

Бурлак Г.Н.

1

Бурлак Г.Н.

5

Бурлак Г.Н.

1

Использование оператора SELECT с DISTINCT

SELECT DISTINCT СОТРУДНИК.ФИО, расписание.код_предмета

FROM СОТРУДНИК INNER JOIN расписание

ON СОТРУДНИК.Код_сотрудника = расписание. код_сотрудника;

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

Distinct

ФИО

Код__предмета

Бурлак Г.Н.

1

Бурлак Г.Н.

5

Жуков О.А.

1

Жуков О.А.

2

Если пользоваться QBE как построителем запросов на SQL, то для включения в запрос DISTINCT следует для свойства запроса «уни­кальные значения» выбрать значение «Да», а для включения в запрос DISTINCTROW необходимо выбрать значение «Да» для свойства зап­роса «Уникальные записи».

Предикат ТОР позволяет возвращать определенное число запи­сей из общего числа записей, получающегося в результате отбора по заданному условию.

Предикат ТОР часто используется совместно с предложением ORDER BY для обеспечения возможности вывода в ответ записей, находящихся в начале или в конце некоего диапазона. При этом в за­висимости от запроса выбирается нужный вид упорядочения (ASC или DESC).

Следующая инструкция SQL позволяет получить список пяти луч­ших студентов выпуска 2002 г.:

SELECT TOP 5 Имя, Фамилия

FROM Студенты

WHERE ГодВыпуска =2002

ORDER BY СреднийБалл DESC;

Предикат ТОР не осуществляет выбор между равными значения­ми. Если в предыдущем примере средние баллы пятого и шестого студента будут равны, то запрос возвратит шесть записей.

Кроме того, можно использовать зарезервированное слово PERCENT для возврата определенного процента записей, находящих­ся в начале или в конце диапазона, описанного с помощью предложе­ния ORDER BY Предположим, что вместо пяти лучших студентов следует отобрать 10% студентов с наиболее низкой успеваемостью:

SELECT TOP 10 PERCENT Фамилия, Имя

FROM Студенты

WHERE ГодВыпуска = 1994

ORDER BY СреднийБалл ASC;

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

Значение, следующее после предиката ТОР, должно быть число­вым значением без знака типа Integer.

Следует обратить внимание на то, что аргументы DISTINCTROW и ТОР, используемые в Access, отсутствуют в стандарте SQL.

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

Предположим, что есть две таблицы: «Продукция» (с полями «Код_продукции», «Наименование_продукции») и «Поставка» (с по­лями «Код_продукции», «Дата», «Количество»). Поле «Код_продукции» содержится в обеих таблицах. Следующий оператор SQL от­берет поле «Наименование_продукции» и «Код_продукции» из таблицы «Продукция» и поля «Дата» и «Количество» из таблицы «По­ставка»:

SELECT Продукция.Код_продукции, Наименование_продукции,

Дата, Количество

FROM Поставка, Продукция

WHERE Продукция.Код_продукции = Поставка.Код_продукции

AND Наименование_продукции = "кефир";

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

Если создавать запрос SQL, пользуясь QBE как построителем, то имя таблицы будет как префикс указываться перед именем поля все­гда, а не только тогда, когда это действительно необходимо. Кроме того, для объединения таблиц всегда используется операция JOIN в предложении FROM. Тот же по смыслу запрос, полученный путем создания запроса на QBE с последующим переходом из режима Кон­структор в режим SQL, будет выглядеть следующим образом:

SELECT продукция.Код_продукции,

продукция.Наименование_продукции, Поставка.дата, Поставка.

количество

FROM продукция INNER JOIN Поставка

ON продукция.Код_продукции = Поставка.Код_продукции

WHERE (((продукция.Наименование_продукции)="кефир"))5;

При выводе результатов ответа в режиме таблицы имена полей используются в качестве заголовков столбцов. Для изменения заго­ловка столбца следует использовать зарезервированное слово AS. Использование предложения AS эквивалентно определению свойства «Псевдоним» (Alias) в бланке свойств списка полей в режиме Конст­руктор запросов.

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

SELECT сотрудник.ФИО, [оклад]*0.5 AS Премия

FROM сотрудник;

Предложение FROM

Общая характеристика. В предложении FROM задаются табли­цы, участвующие в запросе. Поскольку в Access не поддерживается механизм создания представлений (VIEW)6, то это могут быть либо реальные таблицы БД (причем таблицы и активной БД, и внешней БД), либо ранее запомненные запросы.

Синтаксис предложения FROM:

FROM выражение [IN внешняяБазаДанных].

Имена таблиц, участвующих в запросе, могут быть перечислены через запятую. Тогда условие соединения таблиц будет задано в пред­ложении WHERE либо в самом предложении FROM. В последнем случае в качестве выражения используются операции INNER JOIN, LEFT JOIN или RIGHT JOIN.

Предложение FROM должно присутствовать в каждой инструк­ции SELECT.

Внешняя база данных - это база данных, поддерживающая про­токол ODBC, такая, как база данных Microsoft® SQL Server™, обыч­но расположенная на удаленном сервере. Для повышения быстродей­ствия и облегчения применения рекомендуется использовать присое­динение таблиц вместо предложения IN при загрузке данных из внешней базы данных.

Соединение таблиц с использованием операции JOIN. Выше, говоря об определении полей, выводимых в ответ, нам уже пришлось коснуться проблемы соединения таблиц. Рассмотрим этот вопрос бо­лее детально. Классическая операция соединения (JOIN) предпола­гает, что каждая строка первой таблицы по заданному условию срав­нивается с каждой строкой второй таблицы, и если условие выполня­ется, то соответствующие строки сцепляются, образуя очередную строку в результирующем отношении. В принципе условие сравнения может быть любым, но чаще всего используется условие соеди­нения по равенству значений соответствующих полей. Такое соеди­нение называется естественным соединением. В SQL Access данная операция называется INNER JOIN.

Нельзя в качестве полей, по которым проводится соединение таб­лиц, использовать поля, имеющие тип MEMO или OLE.

Пусть в БД имеются таблицы «Кафедры» и «Сотрудники». В таб­лице «Кафедры» присутствуют поля «Код_кафедры», «Наименование_ кафедры_полное» и «Наименование_кафедры_краткое». В таблице «Сотрудники» есть поле Код_кафедры, но отсутствуют наименова­ния кафедр. В предметной области возможны ситуации, что некото­рые сотрудники не приписаны ни к одной кафедре, и могут быть ка­федры, к которым не приписано ни одного сотрудника.

Тогда, если требуется получить список сотрудников кафедр(ы) и в запросе используется наименование кафедры, следует использовать операцию INNER JOIN.

Кроме операции INNER JOIN в SQL Access имеются операции LEFT JOIN и RIGHT JOIN. Операции LEFT JOIN и RIGHT JOIN на­зываются в документации по Access внешним объединением7.

Так, для отбора всех кафедр (в том числе тех, в которых нет ни одного сотрудника) или всех сотрудников (в том числе тех, которые не приписаны ни к какой кафедре) следует использовать операцию LEFT JOIN или RIGHT JOIN соответственно.

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

Операция JOIN выглядит следующим образом:

FROM таблица1 INNER|LEFT|RIGHT JOIN таблица2 ON таблица! поле1 = таблица2.поле2.

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

Операции JOIN могут быть вложенными. В этом случае исполь­зуется следующий синтаксис:

SELECT список полей

FROM таблица1 INNER JOIN

(таблица2 INNER JOIN [(]таблицаЗ

[INNER JOIN [(]таблицаХ [INNER JOIN ...)] ON таблицаЗ.полеЗ =

таблицаХ.полеХ)]

ON таблица2.поле2 = таблицаЗ.полеЗ)

ON таблица1 .поле1 = таблица2.поле2;

На рис. 7.6 приведен пример запроса, использующего три табли­цы. Для его изображения на SQL будет использована вложенная опе­рация JOIN.

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

Характеристики

Тип файла
Документ
Размер
11,48 Mb
Тип материала
Предмет
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6294
Авторов
на СтудИзбе
315
Средний доход
с одного платного файла
Обучение Подробнее