скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

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

Рисунок 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    Блюда Первая, Блюда Вторая

WHERE   Первая.Основа = Вторая.Основа

AND     Первая.Блюдо < Вторая.Блюдо;

Получим результат вида


Первая.Блюдо

Вторая.Блюдо

Основа

Морковь с рисом Помидоры с луком Овощи
Морковь с рисом Салат летний Овощи
Морковь с рисом Салат витаминный Овощи
Помидоры с луком Салат витаминный Овощи
Помидоры с луком Салат летний Овощи
Салат витаминный Салат летний Овощи
Бастурма Бефстроганов Мясо
Бастурма Мясо с гарниром Мясо
Бефстроганов Мясо с гарниром Мясо

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

Виды вложенных подзапросов

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

Существуют простые и коррелированные вложенные подзапросы. Они включаются в WHERE (HAVING) фразу с помощью условий IN, EXISTS или одного из условий сравнения ( = | < | < | <= | | = ). Простые вложенные подзапросы обрабатываютя системой «снизу вверх». Первым обрабатывается вложенный подзапрос самого нижнего уровня. Множество значений, полученное в результате его выполнения, используется при реализации подзапроса более высокого уровня и т.д.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.