Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LECTIONS_BDBZ.doc
Скачиваний:
22
Добавлен:
16.12.2018
Размер:
1.63 Mб
Скачать

2.2. Правила виконання однотабличних запитів на вибірку

Далі буде описана процедура генерації результату SQL – запита на вибірку (потім вона буде доповнюватися). Ці результати отримуються після почергового застосування секцій, які входять в оператор SELECT.

Спочатку виконується секція FROM, потім секція

WHERE, потім секція

SELECT

Дії:

  1. Взяти таблицю, вказану в секції FROM;

  2. Якщо є секція WHERE – застосувати умову до кожного рядка (запиши лише ті рядки, для яких умова = TRUE. Якщо умова = FALSE або = NULL – рядок відкидається);

  3. Для кожного рядка, що залишився – обчислити значення кожного елемента із списку полів секції SELECT – утворити рядок результуючої таблиці. При цьому: звертання до поля відповідає значенню стовпчика у даному біжучому рядку.

  4. Якщо є ключове слово DISTINCT – вилучити всі рядки – дублікати (залишити лише унікальні рядки).

3. Багатотабличні запити

Нехай

Відпуск

Дата

Кількість

Товар

Покупець

1

2.09.

150

цукор

Журавель

2

3.09.

3

дріжджі

Герило

Вибрати всю інформацію про відпуск товарів (із таблиці “Відпуск”) і для кожного товару вказати його ціну із таблиці “Товари”.

 потрібно виводити значення всіх стовпчиків із таблиці “Відпуск”. Якщо просто після SELECT вказати: * - то буде системі не відомо, з якої саме таблиці потрібно вибрати значення усіх стовпчиків – чи із таблиці “Відпуск”, чи із таблиці “Товари”. В таких випадках використовуються уточнені імена:

або, - щоб вибрати всі поля:

6). SELECT Vidpusk. , Tovary. Cina

FROM Vidpusk, Tovary

WHERE Vidpusk. Tovar = Tovary. Nazva

  • запит до двох таблиць.

Перед тим як продовжувати, розглянемо.

3.1. Правила виконання багатотабличних запитів на вибірку

Потрібно замінити дію 1. на таку:

  1. Сформувати декартовий добуток таблиць, вказаних в секції FROM. Всі інші дії – ті самі. Якщо після FROM вказане лише одне ім’я таблиці – то декартовим добутком буде саме ця таблиця.

Розглянемо, як поетапно буде виконуватися запит

6). SELECT Vidpusk . , Tovary . Cina

FROM Vidpusk, Tovary

WHERE Vidpusk. Tovar . = Tovary. Nazva

де

Tovary

Nazva

Odynyci

Cina

цукор

кг.

2.60

молоко

л.

1.00

хліб

Бух.

1.30

дріжджі

кг.

3.60

ковбаса

кг.

17.50

а

Vidpusk

Data

Kilkist

Tovar

Pokupets

1

2.09.

150

цукор

Журавель

2

3.09.

3

дріжджі

Герило

дія 1 – декартовий добуток. Таблиця – результат: (8 стовпчиків, 10 рядків).

Tovary  Vidpusk

T. Nazva

T. Odynyci

T. Cina

V. №

V. Data

V. Kilkist

V. Tovar

V. Pokupets

(цукор)

кг.

2.60

1

2.09

150

(цукор)

Журавель

молоко

л.

1.00

1

2.09

150

цукор

Журавель

хліб

бух.

1.30

1

2.09

150

цукор

Журавель

дріжджі

кг.

3.60

1

2.09

150

цукор

Журавель

ковбаса

кг.

17.50

1

2.09

150

цукор

Журавель

цукор

кг.

2.60

2

3.09

3

дріжджі

Герило

молоко

л.

1.00

2

3.09

3

дріжджі

Герило

хліб

бух.

1.30

2

3.09

3

дріжджі

Герило

(дріжджі)

кг.

3.60

2

3.09

3

(дріжджі)

Герило

ковбаса

кг.

17.50

2

3.09

3

дріжджі

Герило

дія 2 – відкидаються закреслені рядки.

Після виконання дії 2 – результуючий НД отримає вигляд:

Tovary  Vidpusk

T. Nazva

T. Odynyci

T. Cina

V. №

V. Data

V. Kilkist

V. Tovar

V. Pokupets

цукор

кг.

2.60

1

2.09.

150

цукор

Журавель

дріжджі

кг.

3.60

2

3.09.

3

дріжджі

Герило

Дія 3 – відкидаються непотрібні стовпчики, а потрібні – впорядковуються у належному порядку. Після виконання дії 3:

6)

Vidpusk, №

Vidpusk, Data

Vidpusk, Kilkist

Vidpusk, Tovar

Vidpusk, Pokupets

Tovary, Cina

1

2.09.

150

цукор

Журавель

2.60

2

3.09.

3

дріжджі

Герило

3.60

Для 4 – не виконується, бо в секції SELECT немає ключового слова DISTINCT.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]