Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МНД_Мет_Лаб_Сервер.doc
Скачиваний:
3
Добавлен:
20.11.2019
Размер:
1.62 Mб
Скачать

Завдання 3. Створити вибірку за заданим критерієм з таблиці, яка є результатом злиття двох інших таблиць autors та titles бази даних publications. Порядок виконання завдання 3:

1. Створити таблицю даних authors (рис. 8) командами типу:

CREATE TABLE authors (au_id INT, author VARCHAR(25));

INSERT INTO authors (au_id, author) VALUES (1, “Тарас Шевченко”);

Рис. 8 – Заповнена таблиця authors

2. Створити структуру таблиці даних titles командою типу:

CREATE TABLE titles (title_id INT, title VARCHAR(25), yearpub INT, au_id INT);

3. Ввести в таблицю titles три записи даних (рис. 9) командою:

INSERT INTO titles (title_id, title, yearpub) VALUES

(1, “Кобзар”, 1996);

Командою INSERT INTO дані вводяться у три поля таблиці titles. Для введення даних у четверте поле au_id таблиці titles необхідно відкрити таблицю даних titles і ввести в неї вручну «узгоджувальні» дані для злиття таблиць authors та titles, як показано на рис. 9.

Рис. 9 – Заповнена таблиця titles

4. Створити злиття таблиць authors та titles і вибрати книги, що надруковані після 2002 року (рис. 10), такою командою:

SELECT title_id, author, title, yearpub

FROM titles, authors

WHERE titles.au_id=authors.au_id

AND yearpub >2002;

Рис. 10 – Запит з попереднім злиттям двох таблиць

В запиті на злиття таблиць згідно наведеної вище інструкції з параметром WHERE titles.au_id=authors.au_id повинні відображатися лише ті записи таблиці titles, в яких значення в полі au_id співпадає із значенням поля au_id таблиці authors. Друга частина інструкції з параметром WHERE yearpub >2002 здійснює запит за критерієм відбору yearpub >2002.

Завдання 4. Об’єднати три початкові таблиці authors, titles та publishers в одну результативну таблицю і створити вибірку до неї відповідно до заданого критерію. Порядок виконання завдання 4:

1. Створити таблицю даних authors (рис. 11) командами типу:

CREATE TABLE authors (au_id INT, author VARCHAR(25));

INSERT INTO authors (au_id, author) VALUES (1, “Тарас Шевченко”);

Рис. 11 – Заповнена таблиця authors

2. Створити таблицю даних publishers (рис. 12) командами типу:

CREATE TABLE publishers (pub_id INT, publisher VARCHAR(25);

INSERT INTO publishers (pub_id, publisher ) VALUES (1, “Ярина”);

Рис. 12 – Заповнена таблиця publishers

3. Створити таблицю даних titles (рис. 13) командою типу:

CREATE TABLE titles (title_id INT, title VARCHAR(25), yearpub INT, au_id INT, pub_id INT);

INSERT INTO titles (title_id, title, yearpub) VALUES

(1, “Кобзар”, 1996);

Рис. 13 – Заповнена таблиця titles

4. Створити злиття таблиць authors, publishers та titles і вибрати книги, що надруковані після 2002 року, (рис. 14) командою:

SELECT authors.au_id, author, title, publisher, yearpub

FROM titles, publishers, authors

WHERE titles.au_id=authors.au_id

AND titles.pub_id=publishers.pub_id

AND titles.yearpub > 2002;

Рис. 14 – Запит з попереднім злиттям трьох таблиць

Завдання 5. Засвоїти основні способи з’єднання таблиць даних.

Існує три основних способи об’єднання (злиття) початкових таблиць в одну таблицю, до якої (як сукупності таблиць) можна звертатися з запитами:

1) злиття різних таблиць на основі первинних та зовнішніх ключів або схеми даних (розглянуто в попердніх завданнях);

2) злиття різних таблиць на основі однакових полів в різних таблицях (розглянуто в цьому завданні WHERE titles.au_id=authors.au_id);

3) злиття різних таблиць з використанням пропозиції FROM з трьома варіантами оператора з'єднання JOIN (розглядається в наступних завданнях).

У пропозиції FROM може бути вказана операція з'єднання двох або більше таблиць. Серед операцій з'єднання в стандарті SQL підтримується тільки операція з'єднання по предикату в форматі:

FROM таблиця 1 [INNER] {LEFT | RIGHT | FULL } [OUTER]}

JOIN таблиця 2 ON Таблиця1.ПолеА=Таблиця2.ПолеА

З'єднання може бути внутрішнім (INNER) або зовнішнім (OUTER). Службові слова INNER і OUTER можна опускати, оскільки зовнішнє з'єднання однозначно визначається його типом – LEFT (ліве), RIGHT (праве) або FULL (повне), а просто JOIN означатиме внутрішнє з'єднання.

Предикат визначає умову з'єднання рядків з різних таблиць. При цьому операція INNER JOIN означає, що в результуючий набір потраплять тільки ті з'єднання рядків двох таблиць, для яких значення предиката дорівнює TRUE. Предикат визначає з'єднання по зовнішньому і первинному ключах таблиць. Операція INNER JOIN не є обов'язковою в інструкції SELECT, проте, якщо вона існує, то повинна становити частину параметра FROM.

Використовуючи операцію INNER JOIN, користувач може організувати спеціальне об'єднання таблиць, яке ґрунтується на умові рівності. Це най-уживаніше об'єднання, яким перевіряється співпадіння значень полів, що записуються після ключового слова ON. Записи двох таблиць об'єднуються як тільки у вказаних полях будуть знайдені ідентичні значення.

Завдання 6. Виконати операції внутрішнього з'єднання таблиць.

Порядок виконання завдання 6.

1. Створити таблиці даних RASHOD і TOVARY (рис. 15) командами:

Create table RASHOD (nom_rash INT, dat_rash DATE,

tovar VARCHAR, kol_vo INT);

Insert into RASHOD (nom_rash, dat_rash, tovar, kol_vo)

VALUES (1, “10.04.09”, “Цукор”, 20);

Create table TOVARY (tovar VARCHAR, pokup VARCHAR, zena INT);

Insert into TOVARY (tovar, pokup, zena) VALUES (“Цукор”, “Дет_яслі”, 5);

Мал. 15. Початкові таблиці даних перед внутрішнім з'єднанням

2. Вибрати всі записи про витрату товару з таблиці RASHOD і для кожного товару вказати його ціну з таблиці TOVARY (мал. 16) оператором:

SELECT RASHOD.*, TOVARY.ZENA

FROM RASHOD, TOVARY

WHERE RASHOD.TOVAR = TOVARY.TOVAR;

Мал. 16 – З'єднання таблиць RASHOD і TOVARY.

При виконанні цього оператора для кожного запису з таблиці RASHOD шукається запис в таблиці TOVARY, у якої значення в полі TOVAR співпадає із значенням в полі TOVAR поточного запису таблиці RASHOD. При цьому байдуже, в якому порядку перераховувати таблиці в умові пошуку, тобто байдуже, яка з таблиць буде згадана зліва, а яка справа. Наступні умови пошуку ідентичні:

RASHOD.TOVAR - TOVARY.TOVAR TOVARY.TOVAR = RASHOD.TOVAR

Такий спосіб з'єднання таблиць називається внутрішнім з'єднанням. При внутрішньому з'єднанні таблиць А і В порядок формування результуючого набору даних можна уявити собі таким чином.

1. Із стовпців, що стоять після слова SELECT, складається проміжний набір даних (НД) шляхом зчеплення результуючих стовпців кожного запису з таблиці А і результуючих стовпців запису з таблиці В.

2. З отриманого таким чином набору даних вилучаються всі записи, що не задовольняють умові пошуку в пропозиції WHERE.

Завдання 7. Створити внутрішнє з’єднання таблиць бази даних, за допомогою пропозиції INNER JOIN:

SELECT Список_столбцов

FROM Таблица1 INNER JOIN Таблица2 ON Условие

Порядок виконання завдання 7.

Реализуйте внутреннее соединение таблицы TOVARY и таблицы RASHOD по столбцу tovar (рис. 17) с использованием команды:

SELECT Rashod.dat_rash, Rashod.tovar, Rashod.kol_vo, Tovary.zena

FROM Rashod, Tovary

WHERE Rashod.tovar = Tovary.tovar

ORDER BY Rashod.kol_vo;

Рисунок 17 – Выбор данных на основе предложения WHERE

Перед выбором данных из нескольких таблиц осуществляется соединение данных из нескольких таблиц в одном результирующем множестве. Простейшим соединением в SQL является внутреннее соединение. Для внутреннего соединения нужно указать две таблицы, которые должны быть соединены, и столбец, на базе которого строится соединение. При этом используется такой синтаксис:

Select Список_столбцов_из_которых_формируется_результат

FROM Таблица1 INNER JOIN Таблица2

ON Условие_типа_Таблица1.СтолбецA = Таблица2.СтолбецB

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

Создайте внутреннее соединение таблиц на основе предложения FROM Таблица1 INNER JOIN Таблица2 (рис. 18) командой:

SELECT Rashod.tovar, Rashod.kol_vo, Tovary.zena, Rashod.dat_rash

FROM Rashod INNER JOIN Tovary

ON Rashod.tovar = Tovary.tovar

ORDER BY Tovary.zena;

Рисунок 18 – Выбор данных на основе INNER JOIN

Для выполнения запроса необходимо: закрыть окно с кодом запроса, сохранить запрос , войти в окно объектов и реализовать созданный запрос.

Завдання для самостійного виконання лабораторної роботи.

Завдання 1. Виконати запит на попереднє злиття таблиць з подальшим вибором книг, виданих після 2002 року, інструкцією SELECT:

SELECT authors.author, titles.title, titles.yearpub, publishers.publisher

FROM titles, publishers, titleauthors, authors

WHERE titleauthors.au_id=authors.au_id

AND titleauthors.title_id=titles.title_id

AND titles.pub_id=publishers.pub_id

AND titles.yearpub > 2002;

Завдання 2. Виконати попереднє завдання з пропозицією INNER JOIN:

SELECT authors.author,titles.title,titles.yearpub, publishers.publisher

FROM ((titles INNER JOIN publishers ON titles.pub_id =

publishers.pub_id) INNER JOIN titleauthors ON titleauthors.title_id=

titles.title_id) INNER JOIN authors ON titleauthors.au_id=authors.au_id

WHERE titles.yearpub > 1996;

3.5 Контрольні питання:

1. Які пропозиції SELECT є обов'язковими?

2. Що задає пропозицію WHERE?

3. Які типи з'єднань (JOIN) підтримує інструкція SELECT?

4. Яка послідовність пропозицій інструкції SELECT?

5. У якому випадку обов'язково указувати ім'я таблиці перед ім'ям поля?

6. Як формувати обчислювані поля в SELECT?

7. Чи можна сполучати більше двох таблиць операцією JOIN?

3.6 Рекомендована література:

1. Чаповська Р.Б., Жмуркевич А.Є. Робота з базами даних Microsoft Access 2000. – К.: ЦУЛ, 2003. – 324 с.

2. Рамський Ю.С., Цибко Г.Ю. Проектування й опрацювання баз даних. – Тернопіль: Навчальна книга – Богдан, 2005. – 116 с.

3. Золотова C.B. Практикум по Access. – М.: ФиС, 2004. – 144 с.

4. Тимошок Т.В. Microsoft Access 2003. – М.: Вильямс, 2005. – 320 с.