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

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

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

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

SELECT а_сотрудники.таб_ном, а_сотрудники.фио, б_разработки.

фио, б_разработки.продукт

FROM а_сотрудники, б_разработки;

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

Результат соединения типа INNER JOIN для приведенных выше таблиц представлен ниже.

Таб_ном

ФИО

Продукт

01

Диго

П2

01

Диго

П1

02

Афанасьев

ПЗ

Этот запрос показывает разработки, выполненные сотрудниками фирмы X.

На SQL такой запрос будет иметь следующий вид:

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

FROM а_сотрудники INNER JOIN б_разработки

ON а_сотрудники.фио = б_разработки.фио;

При использовании соединения типа LEFT JOIN в результатную таблицу попадают все записи из первой таблицы и только те записи из второй таблицы, для которых есть соответствующие значения по­лей связи в первой таблице. Соединение типа LEFT JOIN для рас­сматриваемого примера даст в результате список всех сотрудников фирмы X с указанием их разработок:

Таб_ном

ФИО

Продукт

01

Диго

П2

01

Диго

Ш

02

Афанасьев

ПЗ

03

Сидоров

Null

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

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

FROM а_сотрудники LEFT JOIN б_разработки

ON а_сотрудники.фио = б_разработки.фио;

При использовании соединения типа RIGHT JOIN, напротив, в результатную таблицу попадают все записи из второй таблицы и только те записи из первой таблицы, для которых есть соответствующие зна­чения полей связи во второй таблице. Соединение типа LEFT JOIN для рассматриваемого примера даст в результате список всех продук­тов с указанием разработчика и его табельного номера:

Таб_ном

ФИО

Продукт

01

Диго

Ш

01

Диго

П2

02

Афанасьев

ПЗ

Чистов

П4

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

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

FROM а_сотрудники RIGHT JOIN б_разработки

ON а_сотрудники.фио = б_разработки.фио;

Во всех приведенных выше примерах предполагалось, что усло­вием соединения является равенство значений полей связи. Обычно именно этот тип сравнения и используется.

Как уже указывалось, все возможности стандартного SQL в пол­ном объеме практически не реализованы ни в одной СУБД. Операто­ры INNER, LEFT, RIGHT JOIN присутствуют во многих системах, чего нельзя сказать о FULL и UNION JOIN.

FULL JOIN для нашего примера даст следующий результат:

Таб_ном

ФИО

Продукт

01

Диго

П1

01

Диго

П2

02

Афанасьев

ПЗ

03

Сидоров

Null

Null

Чистов

П4

Результатом UNION JOIN будет

Таб_ном

ФИО

Продукт

03

Сидоров

Null

Null

Чистов

П4

Предложение WHERE. В нем задается условие отбора записей. Предикат может включать одно выражение или несколько. Части слож­ного условия соединяются логическими операторами AND (И) или OR (ИЛИ).

В выражениях могут использоваться следующие операторы срав­нения: = (равно), о (не равно), < (меньше), <= (меньше или равно), > (больше), >= (больше или равно), которые могут предваряться опера­тором NOT.

Предикат может принимать одно из трех значений: TRUE, FALSE, UNKNOWN. В результатную таблицу переносятся те строки, для ко­торых значение предиката равно TRUE.

Кроме стандартных операторов сравнения в SQL можно исполь­зовать специальные операторы предикатов:

  • <интервальный предикат >;

  • <предикат Ш>;

  • < предикат проверки на неопределенное значение >;

  • <предикат подобия>.

При использовании интервального предиката диапазон значений можно задавать в виде

WHERE [NОТ]<выражение> BETWEEN <нижнее выражение> AND <верхнее выражение>.

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

SELECT * FROM post WHERE postdate BETWEEN #11/20/02# AND #11/30/02#;

Это же условие отбора можно задать и без использования интер­вального предиката:

postdate>=#11/20/02# AND postdate<= #11/30/02#;

При использовании предиката IN предложение WHERE будет иметь следующий вид:

WHERE [NOT]< выражение > [NOT] IN (<список значений>/<лод-запрос>).

В приведенном ниже примере требуется вывести данные о по­ставках поставщиков PI, P2, РЗ.

SELECT * FROM post WHERE kod_post IN ("p1", "p2", "p3")

Без использования IN запрос имел бы следующий вид:

SELECT * FROM post WHERE kod_post ="p1" OR kod_post ="p2" OR kod_post = "p3";

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

Предикат подобия применяется для поиска подстроки в указан­ной строке. Предложение WHERE при использовании предиката это­го типа будет иметь следующий вид:

WHERE [NOT] <выражение_для_вычисления_значения_строки_1>

[NOT] LIKE <выражение_для_вычисления_значения_строки_2>.

В качестве <выражения_для_вычисления_значения_строки_1> обычно используется <имя колонки>.

<Выражение_для_вычисления_значения_строки_2> называется образцом. В образце разрешается применять заполнители (трафарет­ные символы):

  • символ подчеркивания (_) - используется вместо любого еди­ничного символа в проверяемом значении;

  • символ процента (%) - заменяет набор любых символов в про­веряемом значении.

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

SELECT * FROM post WHERE kod_mat LIKE "м%";

Предикат проверки на неопределенное значение имеет вид

предикат NULL ::=

конструктор значения строки IS [NOT] NULL

Например, если в таблице «Сотрудник» (sotr) есть поле «Ученая_степень» (ych_st), то запрос, выводящий список сотрудников, не имею­щих ученых степеней, будет выглядеть следующим образом:

SELECT fio FROM sotr WHERE ych_st IS NULL;

При использовании подзапросов в условии WHERE может быть использован квантор существования EXISTS. Формат условия WHERE в этом случае имеет вид

WHERE [NOT] EXISTS

(<подзапрос>).

EXISTS проверяет, вернул ли подзапрос какие-либо ряды. Факти­чески любой подзапрос, который может быть выражен с использова­нием IN, может альтернативным образом быть сформулирован также с использованием EXISTS. Обратное утверждение несправедливо.

Пример запроса с использованием EXISTS:

SELECT naimmat

FROM cennik

WHERE EXISTS

(SELECT *

FROM post

WHERE kodpost='P01' AND

cennik.kodmat=post.kodmat);

Предложение GROUP BY. Оно используется для определения групп выходных строк, к которым могут применяться те или иные агрегатные функции. Предложение GROUP BY всегда используется со встроенными агрегатными функциями. Обратное утверждение не­верно. Агрегатные функции могут использоваться в предложениях SELECT, HAVING. Если агрегатные функции используются без пред­ложения GROUP BY, то они будут применяться ко всему набору строк, удовлетворяющему условию запроса.

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

Например, в таблице «Zarpl», содержащей сведения о заработной плате рабочих, имеются колонки FIO (фамилия, инициалы), «ТаЬпош» (табельный номер), «Uch» (участок), «Zpl» (заработная плата). Требу­ется определить среднюю заработную плату по каждому участку:

SELECT uch, AVG(zpI)

FROM zarple

GROUP BY uch;

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

Фраза GROUP BY означает логическую перекомпоновку (груп­пировку) таблицы по указанной колонке (колонкам). Физически таб­лицы в базе данных не перекомпоновываются. Логика выполнения запроса при использовании GROUP BY несколько отличается от реа­лизации обычного запроса. Фраза SELECT при использовании GROUP BY применяется к каждой группе, а не к каждой строке, как обычно.

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

Предложение HAVING. Вместе с GROUP BY может использо­ваться фраза HAVING, которая для групп имеет то же значение, что и фраза WHERE - для строк.

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

SELECT codmat

FROM post

GROOUP BY codmat

HAVING COUNT(*)>1;

Выражение во фразе HAVING должно принимать единственное значение для группы. Формат COUNT(*) означает подсчет всех строк таблицы.

Предложение ORDER BY. Информация, получаемая в результа­те реализации запроса, может быть упорядочена. Для этого использу­ется фраза ORDER BY. Строки сортируются в соответствии со значе­ниями столбцов, указанных в списке. В этом списке могут задаваться либо имена колонок, либо целое число, которое соответствует номе­ру колонки в таблице, считая слева направо. Когда колонки, по кото­рым осуществляется упорядочение, вычисляемые или являются ре­зультатом операции UNION, то «целое» должно использоваться вме­сто имени колонки.

Параметр ASC/DESC означает вид сортировки (по возрастанию /по убыванию соответственно). По умолчанию принимается значение ASC.

Если в ORDER BY специфицируется список полей, то это означа­ет упорядочение по составному ключу. Старшинство полей сортировки будет определяться порядком следования полей в списке.

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

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

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

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