Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Организация Web-доступа к базам данных с использованием SQL-запросов

    |    |    |    |    |мясн|    |    |    |    |
|    |    |    |    |    |    |    |    |ой  |    |    |    |    |
|1   |З   |6   |1   |Завт|З   |Заку|3   |Сала|З   |Овощ|200.|4   |
|    |    |    |    |рак |    |ска |    |т   |    |и   |    |    |
|    |    |    |    |    |    |    |    |вита|    |    |    |    |
|    |    |    |    |    |    |    |    |минн|    |    |    |    |
|    |    |    |    |    |    |    |    |ый  |    |    |    |    |
|1   |З   |6   |1   |Завт|З   |Заку|4   |Сала|З   |Рыба|200.|4   |
|    |    |    |    |рак |    |ска |    |т   |    |    |    |    |
|    |    |    |    |    |    |    |    |рыбн|    |    |    |    |
|    |    |    |    |    |    |    |    |ый  |    |    |    |    |
|1   |З   |6   |1   |Завт|З   |Заку|5   |Пашт|З   |Рыба|120.|5   |
|    |    |    |    |рак |    |ска |    |ет  |    |    |    |    |
|    |    |    |    |    |    |    |    |из  |    |    |    |    |
|    |    |    |    |    |    |    |    |рыбы|    |    |    |    |
|1   |З   |6   |1   |Завт|З   |Заку|6   |Мясо|З   |Мясо|250.|3 * |
|    |    |    |    |рак |    |ска |    |с   |    |    |    |    |
|    |    |    |    |    |    |    |    |гарн|    |    |    |    |
|    |    |    |    |    |    |    |    |иром|    |    |    |    |
|. . |    |    |    |    |    |    |    |    |    |    |    |    |
|.   |    |    |    |    |    |    |    |    |    |    |    |    |


                                 Рисунок 2.6

   Очевидно, что отбор актуальных строк обеспечивается вводом в запрос 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   |
|    |    |    |    |    |    |ток |    |чный|    |ко  |    |    |
|    |    |    |    |    |    |    |    |напи|    |    |    |    |
|    |    |    |    |    |    |    |    |ток |    |    |    |    |



                       Естественное соединение таблиц
      Легко заметить, что в эквисоединение таблиц вошли дубликаты  столбцов,
по  которым  проводилось  соединение  (Т,  В  и  БЛ).  Для  исключения  этих
дубликатов можно создать естественное соединение тех же таблиц:

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    |
|     |     |     |      |к     |ый    |      |        |     |
|     |     |     |      |      |напито|      |        |     |
|     |     |     |      |      |к     |      |        |     |


                              Композиция таблиц
      Для исключения всех столбцов, по которым проводится соединение таблиц,
надо создать композицию

SELECT      Трапеза, Вид, Блюдо, Основа, Выход, Труд
FROM  Меню, Трапезы, Вид_блюд, Блюда
WHERE Меню.Т = Трапезы.Т
AND   Меню.В = Вид_блюд.В
AND   Меню.БЛ = Блюда.БЛ;
имеющую вид
|Трапеза  |Блюдо                  |Вид      |Основа  |Выход |Труд |
|Завтрак  |Салат витаминный       |Закуска  |Овощи   |200.  |4    |
|Завтрак  |Мясо с гарниром        |Закуска  |Мясо    |250.  |3    |
|Завтрак  |Омлет с луком          |Горячее  |Яйца    |200.  |5    |
|. . .    |                       |         |        |      |     |
|Ужин     |Драчена                |Горячее  |Яйца    |180.  |4    |
|Ужин     |Компот                 |Напиток  |Фрукты  |200.  |2    |
|Ужин     |Молочный напиток       |Напиток  |Молоко  |200.  |2    |


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

SELECT      Вид_блюд.*, Трапезы.*
FROM  Вид_блюд, Трапезы
WHERE Вид  Трапеза;
позволяющий выбрать из полученного декартова произведения таблиц Вид_блюд  и
Трапезы лишь те строки, в которых значение трапезы  «меньше»  (по  алфавиту)
значения вида блюда:
|В       |Вид     |Т      |Трапеза |
|З       |Закуска |1      |Завтрак |
|С       |Суп     |1      |Завтрак |
|С       |Суп     |2      |Обед    |
|Н       |Напиток |1      |Завтрак |


                 Соединение таблиц с дополнительным условием
      При формировании  соединения  создается  рабочая  таблица,  к  которой
применимы  все  операции:  отбор  нужных  строк  соединения  (WHERE  фраза),
упорядочение получаемого  результата  (ORDER  BY  фраза)  и  агрегатирование
данных (SQL-функции и GROUP BY фраза).
      Например, для получения перечня блюд, предлагаемых в меню на  завтрак,
можно сформировать запрос на основе композиции:

SELECT      Вид, Блюдо, Основа, Выход, 'Номер –', БЛ
FROM  Меню, Трапезы, Вид_блюд, Блюда
WHERE Меню.Т = Трапезы.Т
AND   Меню.В = Вид_блюд.В
AND   Меню.БЛ = Блюда.БЛ
AND   Трапеза = ’Завтрак’;

|Вид   |Блюдо    |Основа |Выхо|'Номе|БЛ |
|      |         |       |д   |р –' |   |
|Закуск|Салат    |Овощи  |200.|Номер|3  |
|а     |витаминны|       |    |-    |   |
|      |й        |       |    |     |   |
|Закуск|Мясо с   |Мясо   |250.|Номер|6  |
|а     |гарниром |       |    |-    |   |
|Горяче|Омлет с  |Яйца   |200.|Номер|19 |
|е     |луком    |       |    |-    |   |
|Горяче|Пудинг   |Крупа  |160.|Номер|21 |
|е     |рисовый  |       |    |-    |   |
|Напито|Молочный |Молоко |200.|Номер|31 |
|к     |напиток  |       |    |-    |   |
|Напито|Кофе     |Кофе   |100.|Номер|32 |
|к     |черный   |       |    |-    |   |


                     Соединение таблицы со своей копией
      В ряде  приложений  возникает  необходимость  одновременной  обработки
данных какой-либо таблицы и одной или нескольких ее  копий,  создаваемых  на
время выполнения запроса.
      Например, при создании списков студентов (таблица  Студенты)  возможен
повторный ввод данных  о  каком-либо  студенте  с  присвоением  ему  второго
номера зачетной книжки. Для выявления таких ошибок можно  соединить  таблицу
Студенты с ее временной копией, установив в WHERE фразе  равенство  значений
всех одноименных столбцов этих таблиц  кроме  столбцов  с  номером  зачетной
книжки (для последних надо установить условие неравенства значений).
      Временную копию таблицы можно сформировать, указав имя  псевдонима  за
именем таблицы во фразе FROM. Так, с помощью фразы

FROM Блюда X, Блюда Y, Блюда Z
будут сформированы три копии таблицы Блюда с именами X, Y и Z.
      В качестве примера соединения таблицы с ней самой сформируем запрос на
вывод таких пар блюд таблицы Блюда, в которых совпадает основа,  а  название
первого блюда пары меньше (по алфавиту), чем номер второго блюда  пары.  Для
этого можно создать запрос с одной копией таблицы Блюда (Копия):

SELECT      Блюдо, Копия.Блюдо, Основа
FROM  Блюда, Блюда Копия
WHERE Основа = Копия.Основа
AND   Блюдо < Копия.Блюдо;
или двумя ее копиями (Первая и Вторая):

SELECT      Первая.Блюдо, Вторая.Блюдо, Основа
FROM  Блюда Перв
Пред.678910След.
скачать работу

Организация Web-доступа к базам данных с использованием SQL-запросов

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ