русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Необходимо вывести список домашних животных и имена их владельцев.


Дата добавления: 2015-07-09; просмотров: 724; Нарушение авторских прав


Как видно из схемы данных, в таблице ANIMALS определено поле owner_id, которое является внешним ключом: в этом поле содержится идентификационный номер владельца для каждого животного (считается, что у одного животного может быть только один владелец). Именно благодаря связи между полями owner_id и id (из таблицы OWNERS) для каждого животного можно узнать имя его владельца.

Очевидно, что для получения требуемого результата нам потребуются обе таблицы. Для начала будем считать, что нам требуется полная информация о животных и их владельцах.

Тогда первые два предложения искомого запроса можно записать так:

SELECT *

FROM ANIMALS, OWNERS

 

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

Так как в предложении FROM перечислены названия двух таблиц, то SQL выполнит декартово произведение (умножение) этих двух таблиц и сформирует одну результирующую таблицу (таблицу произведения). При этом результирующая таблица будет содержать все возможные комбинации строк первой и второй таблиц, т.е. «на всякий случай» каждому животному будет поставлен в соответствие каждый владелец. Количество строк в результирующей таблице будет равно количеству строк первой таблицы, умноженному на количество строк во второй таблице. В нашем случае результирующая таблица будет содержать 4x3=12 строк.

Так как в предложении SELECT указана звездочка, то результирующая таблица будет содержать все столбцы таблицы ANIMALS и следующие за ними все столбцы таблицы OWNERS.

Таким образом, в результате выполнения выше приведенного запроса получим следующий результат:

 

Очевидно, что нас не устраивают такие результаты. Получается, что каждое животное принадлежит сразу всем владельцам (и наоборот), что, конечно же, неверно (как видно из содержимого исходных таблиц). Другими словами, таблица произведения содержит много лишних, некорректных строк, в которых представлена неверная (несвязанная) информация. Справедливости ради отметим, что наряду с некорректными строками данная таблица произведения содержит также и все нужные нам, «правильные» строки со связанной информацией, как видно из следующей таблицы.



В этих «правильных» строках в связанных столбцах (согласно схеме данных это столбцы owner_id и OWNERS.id) находятся одинаковые значения, т.е. эти строки удовлетворяют следующему условию (условию равенства связанных столбцов):

Owner_id=OWNERS.id

Таким образом, из всех строк результирующей таблицы необходимо оставить только нужные, или, другими словами, отбросить некоторые ненужные.

Произведение двух таблиц, из которого удалены некоторые строки, называется соединением этих таблиц.

Из вышесказанного следует вывод, что для правильной работы многотабличного запроса необходимо получить не произведение всех исходных таблиц (что осуществляется при указании названий всех таблиц в предложении FROM), а соединение всех исходных таблиц, в котором остаются только строки со связанной корректной информацией.

Следовательно, для получения соединения всех исходных таблиц (фактически для отбрасывания из таблицы произведения некоторых некорректных строк), в многотабличном запросе обязательно присутствует предложение WHERE, в котором указывается условие (или несколько условий) равенства связанных столбцов.

В нашем случае предложение WHERE будет выглядеть так:

WHERE owner_id=OWNERS.id

 

Введя псевдонимы для обеих таблиц и учитывая то, что согласно заданию в качестве возвращаемых столбцов нам потребуются только столбцы vid, nickname и name, окончательный правильный вариант требуемого запроса запишем в следующем виде:

 

SELECT A.vid, A.nickname, O.name

FROM ANIMALS A, OWNERS О

WHERE A.owner_id=O.id;

 

В результате выполнения этого запроса мы получим требуемую информацию:

 

Пример 20. Вывести список контактов и номеров телефонов.

Пример 21. Вывести список контактов-женщин.

Пример 22. Вывести список контактов с указанием групп контактов.

Пример 23. Вывести список вызовов определенного контакта.

Пример 24. Вывести список контактов, с которыми состоялся хотя бы один телефонный

Пример 25. Вывести подробную информацию о вызовах (в хронологическом порядке) с указанием типа вызова, номера телефона, типа номера телефона, контакта и мелодии контакта.

SELECT V.ID, TV.NAZV,K.NAME1, N.NOMER,TN.NAZV,V.VREMYA,V.DLIT, V.STOIM, M.NAZV

FROM VYZOVY V, TIPY_VYZ TV, NOMERA N, TIPY_NOM TN, KONTAKTY K, MELODII M

WHERE (V.TIP_ID=TV.ID) AND (V.NOMER_ID=N.ID) AND (N.TIP_ID=TN.ID)

AND (N.KONT_ID=K.ID) AND (K.MEL_ID=M.ID)

ORDER BY V.VREMYA

 



<== предыдущая лекция | следующая лекция ==>
Учебная база данных | Группировка строк (предложение GROUP BY)


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.132 сек.