Создание запросов в СУБД Access
Рефераты >> Программирование и компьютеры >> Создание запросов в СУБД Access

Рис. 3.1. Иллюстрация декартова произведения

Очевидно, что отбор актуальных строк обеспечивается вводом в запрос WHERE фразы, в которой устанавливается соответствие между:

  • кодами трапез (Т) в таблицах Меню и Трапезы (Меню.Т = Трапезы.Т),
  • кодами видов блюд (В) в таблицах Меню и Вид_блюд (Меню.В = Вид_блюд.В),
  • номерами блюд (БЛ) в таблицах Меню и Блюда (Меню.БЛ = Блюда.БЛ).

Такой скорректированный запрос SELECT Меню.*, Трапезы.*, Вид_блюд.*, Блюда.*FROM Меню, Трапезы, Вид_блюд, БлюдаWHERE Меню.Т = Трапезы.ТAND Меню.В = Вид_блюд.ВAND Меню.БЛ = Блюда.БЛ;

позволит получить эквисоединение таблиц Меню, Трапезы, Вид_блюд и Блюда:

Т

В

БЛ

Т

Трапеза

В

Вид

БЛ

Блюдо

В

Основа

Выход

Труд

1

З

3

1

Завтрак

З

Закуска

3

Салат витаминный

З

Овощи

200.

4

1

З

6

1

Завтрак

З

Закуска

6

Мясо с гарниром

З

Мясо

250.

3

1

Г

19

1

Завтрак

Г

Горячее

19

Омлет с луком

Г

Яйца

200.

5

. . .

 

3

Г

16

3

Ужин

Г

Горячее

16

Драчена

Г

Яйца

180.

4

3

Н

30

3

Ужин

Н

Напиток

30

Компот

Н

Фрукты

200.

2

3

Н

31

3

Ужин

Н

Напиток

31

Молочный напиток

Н

Молоко

200.

2

3.2.3. Естественное соединение таблиц

Легко заметить, что в эквисоединение таблиц вошли дубликаты столбцов, по которым проводилось соединение (Т, В и БЛ). Для исключения этих дубликатов можно создать естественное соединение тех же таблиц: SELECT Т, В, БЛ, Трапеза, Вид, Блюдо, Основа, Выход, ТрудFROM Меню, Трапезы, Вид_блюд, БлюдаWHERE Меню.Т = Трапезы.ТAND Меню.В = Вид_блюд.ВAND Меню.БЛ = Блюда.БЛ;

Реализация естественного соединения таблиц имеет вид

Т

В

БЛ

Трапеза

Вид

Блюдо

Основа

Выход

Труд

1

З

3

Завтрак

Закуска

Салат витаминный

Овощи

200.

4

1

З

6

Завтрак

Закуска

Мясо с гарниром

Мясо

250.

3

1

Г

19

Завтрак

Горячее

Омлет с луком

Яйца

200.

5

.

 

3

Г

16

Ужин

Горячее

Драчена

Яйца

180.

4

3

Н

30

Ужин

Напиток

Компот

Фрукты

200.

2

3

Н

31

Ужин

Напиток

Молочный напиток

Молоко

200.

2

3.2.4. Композиция таблиц

Для исключения всех столбцов, по которым проводится соединение таблиц, надо создать композицию SELECT Трапеза, Вид, Блюдо, Основа, Выход, ТрудFROM Меню, Трапезы, Вид_блюд, БлюдаWHERE Меню.Т = Трапезы.ТAND Меню.В = Вид_блюд.ВAND Меню.БЛ = Блюда.БЛ;

имеющую вид

Трапеза

Блюдо

Вид

Основа

Выход

Труд

Завтрак

Салат витаминный

Закуска

Овощи

200.

4

Завтрак

Мясо с гарниром

Закуска

Мясо

250.

3

Завтрак

Омлет с луком

Горячее

Яйца

200.

5

. . .

Ужин

Драчена

Горячее

Яйца

180.

4

Ужин

Компот

Напиток

Фрукты

200.

2

Ужин

Молочный напиток

Напиток

Молоко

200.

2

3.2.5. Тета-соединение таблиц

В базе данных ПАНСИОН трудно подобрать несложный пример, иллюстрирующий тета-соединение таблиц. Поэтому сконструируем такой надуманный запрос: SELECT Вид_блюд.*, Трапезы.*FROM Вид_блюд, ТрапезыWHERE Вид > Трапеза;

позволяющий выбрать из полученного в п.3.2.1 декартова произведения таблиц Вид_блюд и Трапезы лишь те строки, в которых значение трапезы "меньше" (по алфавиту) значения вида блюда:

В

Вид

Т

Трапеза

З

Закуска

1

Завтрак

С

Суп

1

Завтрак

С

Суп

2

Обед

Н

Напиток

1

Завтрак


Страница: