Главная страница
Навигация по странице:

  • ALTER TABLE

  • ALTER TABLE "Заказано" ADD CONSTRAINT ORDER_NO FOREIGN KEY("Номер заказа") REFERENCES "Заказы"("Номер")

  • SELECT : SELECT "Заказано"."Номер заказа", "Блюда"."Название" FROM "Заказано", "Блюда" WHERE

  • SELECT

  • SELECT "Номер заказа", "Дата", "Название" FROM "Заказано", "Блюда", "Заказы" WHERE "Заказано"."Код блюда" = "Блюда"."Код"

  • SELECT MIN("Сумма") AS "Сумма" FROM "Итоги" Наконец, можно вывести информацию о заказе с минимальной суммой: SELECT

  • SELECT "Номер заказа", "Дата", "Сумма" FROM " Итоги " WHERE " Сумма " = (SELECT MIN(" Сумма

  • Практическая работа Работа с готовой таблицей Откройте базу данных Учебники odb


    Скачать 0.84 Mb.
    НазваниеПрактическая работа Работа с готовой таблицей Откройте базу данных Учебники odb
    Дата18.12.2021
    Размер0.84 Mb.
    Формат файлаdoc
    Имя файлаpractice11-3bu.doc
    ТипПрактическая работа
    #308362
    страница5 из 9
    1   2   3   4   5   6   7   8   9

    Практическая работа (дополнительная).
    Язык SQL (многотабличная база данных, OpenOffice Base)


    В этой работе вы познакомитесь с новой командой ALTER TABLE (изменить таблицу) языка SQL и научитесь составлять запросы к многотабличной реляционной базе данных.

    Создание и заполнение таблиц


    1. Используя только SQL-запросы, постройте три таблицы для реляционной базы данных кафе (значок обозначает первичный ключ таблицы):



    Запишите соответствующие SQL-запросы:

    Ответ:

    1. Теперь нужно построить связи между таблицами:



    Для этой цели используется команда ALTER TABLE (англ. изменить таблицу). Построить связь между таблицами – это значит задать ограничение (CONSTRAINT), которое связывает первичный ключ одной таблицы с полем соответствующего типа другой. Если связываемое поле второй таблицы – неключевое, то оно называется внешним ключом (FOREIGN KEY). Например, команда для создания связи 1:N между ключевым полем Номер таблицы Заказы и неключевым полем Номер заказа таблицы Заказано выглядит так:

    ALTER TABLE "Заказано"

    ADD CONSTRAINT ORDER_NO

    FOREIGN KEY("Номер заказа")

    REFERENCES "Заказы"("Номер")

    Такая запись дословно означает:

    Изменить таблицу "Заказано"

    добавить связь ORDER_NO

    внешний ключ "Номер заказа"

    ссылается на поле "Номер" таблицы "Заказы"

    Здесь ORDER_NO – это просто имя, которое мы выбрали для этой связи (можно было выбрать и другое).

    1. Введите и выполните показанный выше SQL-запрос на добавление связи. Зайдите в меню Сервис – Связи и убедитесь, что связь действительно создана4.

    2. Составьте и выполните SQL-запрос на добавление второй связи. Запишите этот запрос в поле для ответа.

    Ответ:

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


    Выбор данных и сортировка


    1. Построим в режиме SQL запрос СоставЗаказа, который выводит номер заказа и название заказанных блюд. Эти данные находятся в двух таблицах – Заказано и Блюда, поэтому их нужно как-то объединить. Для этого используется связь 1:N между таблицами, которую мы недавно установили. Действительно, для каждой записи в таблице Заказано нужно выбрать название блюда из таблицы Блюда, код которого совпадает с полем Заказано.Код блюда.

    Это запрос на выборку данных, поэтому используем оператор SELECT_:_SELECT__"Заказано"."Номер_заказа",_"Блюда"."Название"_FROM__"Заказано",_"Блюда"_WHERE'>SELECT:

    SELECT "Заказано"."Номер заказа", "Блюда"."Название"

    FROM "Заказано", "Блюда"

    WHERE "Заказано"."Код блюда" = "Блюда"."Код"

    Здесь из таблиц Заказано и Блюда выбираются поля Номер заказа и Название; условие в последней строке связывает таблицы.

    Поскольку названия полей в таблицах, из которых идет выбор, не совпадают, можно было записать запрос в сокращенной форме, указав после оператора SELECT только названия нужных полей:

    SELECT "Номер заказа", "Название"

    FROM "Заказано", "Блюда"

    WHERE "Заказано"."Код блюда" = "Блюда"."Код"

    1. Теперь добавим в запрос дату заказа. Она находится в таблице Заказы, которая пока в запросе не участвует. Таким образом, нам нужно объединить три таблицы. Условие отбора получается сложным, два условия (связи по коду блюда между таблицами Заказано и Блюда и по номеру заказа между таблицами Заказы и Заказано) объединяются с помощью логической операции AND (И):

    SELECT "Номер заказа", "Дата", "Название"

    FROM "Заказано", "Блюда", "Заказы"

    WHERE "Заказано"."Код блюда" = "Блюда"."Код"

    AND "Заказано"."Номер заказа" = "Заказы"."Номер"

    Проверьте результат выполнения этого запроса.

    1. Измените запрос так, чтобы он выбирал только блюда из состава заказа № 1. Запишите этот запрос:

    Ответ:

    1. Построим еще один запрос Итоги, в котором для каждого заказа выводится его номер, дата и общая сумма (с помощью функции SUM).

    SELECT "Номер заказа", "Дата", SUM("Цена")

    FROM "Заказано", "Блюда", "Заказы"

    WHERE "Заказано"."Код блюда" = "Блюда"."Код"

    AND "Заказано"."Номер заказа" = "Заказы"."Номер"

    GROUP BY "Номер заказа", "Дата"

    В последней строке указано, что по полям Номер заказа и Дата выполняется группировка, то есть сумма цен считается для каждой уникальной пары «Номер заказаДата».

    В таблице с результатами запроса заголовок столбца с суммой выглядит не совсем понятно для пользователя:

    «SUM("Блюда"."Цена")»

    Для того, чтобы сделать у этого столбца заголовок «Сумма», нужно добавить в первую строку запроса после SUM("Цена") так называемый псевдоним (подпись) с ключевым словом AS:

    SELECT "Номер заказа", "Дата", SUM("Цена") AS "Сумма" 

    ...

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

    1. Измените запрос так, чтобы заказы были отсортированы в порядке убывания суммы (используйте ключевые слова ORDER BY).

    Ответ:

    Вложенные запросы


    1. Построим запрос МинСумма, который выводит минимальную сумму заказа. Для этого будем использовать уже готовый запрос Итоги. Таким образом, источником данных для запроса МинСумма будет не таблица, а другой запрос. Отметим, что предварительно в запросе Итоги нужно отменить сортировку. Запрос получается очень простым

    SELECT MIN("Сумма") AS "Сумма" FROM "Итоги"

    1. Наконец, можно вывести информацию о заказе с минимальной суммой:

    SELECT "Номер заказа", "Дата", "Сумма"

    FROM "Итоги", "МинСумма"

    WHERE "Итоги"."Сумма" = "МинСумма"."Сумма"

    Обратите внимание, что этот запрос использует результаты выполнения двух ранее построенных запросов – Итоги и МинСумма. Запрос Итоги можно было и не составлять, а вместо этого использовать вложенный запрос (запрос в запросе):

    SELECT "Номер заказа", "Дата", "Сумма"

    FROM "Итоги"

    WHERE "Сумма" =

    (SELECT MIN("Сумма") FROM "Итоги")

    Заметим, что если в базе данных есть информация о нескольких заказах с такой же (минимальной) суммой, будет показана информация обо всех этих заказах.

    1. Измените запрос так, чтобы получить список всех заказов, сумма которых больше средней.

    Ответ:

    1   2   3   4   5   6   7   8   9


    написать администратору сайта