Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 217
от 06.02.2007, 17:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 404, Экспертов: 61
В номере:Вопросов: 1, Ответов: 3


Вопрос № 73510: В продолжении вопроса №73486 хочу задать вопросы далее. Возможно они глупые возможно наивные или же что-то еще. Но я пишу базу данных под маленькую поисковую систему. и у меня встал влпрос как объеденить в запросе несколько таблиц. дам пример...

Вопрос № 73.510
В продолжении вопроса №73486 хочу задать вопросы далее.
Возможно они глупые возможно наивные или же что-то еще. Но я пишу базу данных под маленькую поисковую систему. и у меня встал влпрос как объеденить в запросе несколько таблиц.
дам пример из трех таблиц (см приложение). я взял учебник Поля Дюбуа, но не совсем понял как объеденять таблицы, если не пользовать одинковые имена. Мне надо что бы при вводе той же фамилии, или же имени, а может номера предприятие база данных вывела мне всю информацию. Три базы содержат имя, фамилию, и идентификатор,
вторая база содержит название предприятия и период работы,
а треться содержит школу в котором учился искомый объект.
Возможно я чего-то глупо недопонимаю. Хотелось бы узнать алгоритм "связывания" одно базы с другими, тремя, пятью, да сколько угодно. Заранее благодарю и извиняюсь, если некорреткно поставлен вопрос.

Приложение:

Отправлен: 31.01.2007, 18:49
Вопрос задал: Чинга (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Чинга!

ВАриантов здесь очень много и коротко не ответишь.
Наверное лучше почитать книгу Мартина Грабера "Введение в SQL" (изд.Лори). (другое название "Понимание SQL"
Именно эту первую книгу, так как в ней очень просто и понятно разьяснены эти вопросы без лишней информации по различным стандартам.

Можно также посмотреть описание оператора Select
http://www.az-design.ru/Support/DataBase/SQL/SQL92/SQL92-2Select.shtml

---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 31.01.2007, 18:59
Оценка за ответ: 4

Отвечает: Heartwork
Здравствуйте, Чинга! Хорошо бы создать четвертую таблицу, создать в ней поля идентичные ключам (Primary Key) для первых трех таблиц, расположить в каждой строке номера ключей (т.н. внешние ключи), соответствующие записям из первых таблиц, тогда данные будут правильно реляционно связаны.
Например, строка из первой таблицы Names
Name Family LastName Id_Fam
-----------------------------------------
Вася Иванович Пупкин 1

строка из второй таблицы Jobs

Predpriyatie PeriodRaboty Gorod_Rab Id_Predpr
--------------------------------------------------------------
Beeline 2 Moscow 4

Строка из третьей таблицы Schools
_
NomerSchool GorodUcheby VremyaUcheby Id_School
-------------------------------------------------------------------
150 Moscow 11 3

Для таких данных строка из связывающей все эти три таблицы четвертой таблицы (назовем её CommonTable)
будет иметь вид

Id_Fam Id_Work Id_School
------------------------------------------
1 4 3

А данные (например, об имени, фамилии, месте работы и номере школы) поможет выбрать вот такой запрос, использующий внутреннее связывание (ключевая фраза INNER JOIN) этих таблиц по ключам:

SELECT Names.Name, Names.LastName, Jobs.Predpriyatie, Schools.NomerSchool
FROM CommonTable
INNER JOIN Names ON Names.Id_Fam = CommonTable.Id_Fam
INNER JOIN Jobs ON Jobs.Id_Predpr = CommonTable.Id_Work
INNER JOIN Schools ON Schools.Id_School = CommonTable.Id_School

Мог ошибиться в написании имен полей, но в целом примерно так.
---------
Вода - Это Огромная Дорога Среди Красоты
Ответ отправил: Heartwork (статус: 2-ой класс)
Ответ отправлен: 31.01.2007, 19:27

Отвечает: Grigory
Здравствуйте, Чинга!
Вот, что пишет по этому поводу Александр Дворжецкий в своей книжке "Руководство пользователя SQL":
Соединения - это подмножества декартова произведения. Так как декартово произведение n таблиц - это таблица, содержащая все возможные строки r, такие, что r является сцеплением какой-либо строки из первой таблицы, строки из второй таблицы,... и строки из n-ой таблицы, то осталось лишь выяснить, можно ли с помощью SELECT получить декартово произведение. Для получения декартова произведения надо указать во фразе FROM перечень перемножаемых таблиц, а во фразе SELECT - все их столбцы.
Если из декартова произведения убрать ненужные строки и столбцы, то можно получить актуальные таблицы, соответствующие любому из соединений.
Очевидно, что отбор актуальных строк обеспечивается вводом в запрос WHERE фразы, в которой устанавливается соответствие между:

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

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

Надеюсь, этот пример Вам поможет разобраться.

Удачи!

Григорий
---------
Если хочешь быть счастливым - будь им! (Козьма Прутков)
Ответ отправил: Grigory (статус: Студент)
Ответ отправлен: 31.01.2007, 20:18


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.43 beta от 26.01.2007
Яндекс Rambler's Top100

В избранное