Консультация № 74262
05.02.2007, 18:22
0.00 руб.
0 4 2
Здравствуйте уважаемые эксперты. У меня возник вопрос, возможно глупый, возможно нет. Цель впроса, систематизировать свои знания и узнать методы выборки данных и объженения таблиц, не только в запросах, но и при формировании базы данных.
См. приложение.

вот примерная труктура взятая с потолка. Единственно что соблюдено так это кол-во строк и в таблицах.
надо что бы при запросе к БД выдавались данные из всех таблиц
Например при вводе имени "Вася" выдавалась имя, фамилия, где работал, адрес города, область, период работы, номер предприятия - все данные из таблиц.
Как так сделать? Прошу описать все способы. Мне важна для систематиизирования свои знания и узнать другие способы объеденения, запросов. Синтаксис нужен языка SQl.

PS Это моя первая попытка создать БД с несоклькими таблицами и их связыванием. Раньше требований таких не было.

Заранее спасибо.

Приложение:
Например у меня есть три таблицы tbl1, tbl2, tbl3в таблице tbl1 поляid_usenicname,emailpasswordtbl2gorodstranaoblastadrestbl3mesto_rabotyperiod_rabid_predchto_eshe

Обсуждение

Неизвестный
05.02.2007, 19:55
общий
это ответ
Здравствуйте, Чинга!
У вас во всех таблицах должно быть общее поле, идентифицирующее определенного пользователя, например user_id. Создав такое поле во всех ваших таблицах, вы сможете создать первичный и вторичные ключи, связывающие ваши таблицы между собой. После того, как будут созданы связи между таблицами, можно будет их объеденить по общему ключевому полю и вытоащить всю, интересующую вас информацию по данному пользователю.

Пример:
tbl1
user_id, -- primary key
nicname,
email
password

tbl2
user_id, -- foreign key
gorod,
strana,
oblast,
adres

tbl3
user_id, -- foreign key
mesto_raboty,
period_rab,
id_pred,
chto_eshe

select t1.*, t2.*, t3.*
from tbl1 t1, tbl2 t2, tbl3 t3
where t1.user_id = 1
AND t1.user_id = t2.user_id
AND t1.user_id = t3.user_id

Удачи!

Григорий
Неизвестный
05.02.2007, 20:15
общий
Благодарю Григорий. А если это касаеться базы MySQL? На сколько я помню ключ foreign key нельзя там выставл\ть.
Неизвестный
06.02.2007, 11:47
общий
это ответ
Здравствуйте, Чинга!
Ну для начала, вам бы необходимо что нибудь почитать про нормализацию данных, это как бы общие принципы построения баз данных, ну а так в кратце:
Для вашего примера структура будет например такая:
Tab Peoples
PeopleID int IDENTITY(1,1) NOT NULL,
FirstName nvarchar(40) NULL,
MiddleName nvarchar(40) NULL,
LastName nvarchar(40) NULL,
и т.д.

Tab Companys
CompanyID int IDENTITY(1,1) NOT NULL,
Name nvarchar(40) NULL,
Adrees nvarchar(40) NULL,
и т.д.

Tab WorkHistory
WorkHistoryID int IDENTITY(1,1) NOT NULL,
PeopleID in NOT NULL,
CompanyID int NOT NULL,
DateWorkBegin datetime NULL,
DateWorkEnd datetime NULL
и т.д.

а далее с этим делаешь что хочешь, например

Select
FirstName , MiddleName , LastName , Name, DateWorkBegin , DateWorkEnd
From Peoples
Left Outer Join WorkHistory ON WorkHistory.PeopleID = Peoples.PeopleID
Left Outer Join Companys ON WorkHistory.CompanyID = Companys.CompanyID
Where Peoples.FirstName like ‘%Вася%‘
ну что то гдето здесь...
Left Outer Join - берет все из левой таблицы Peoples а из провой (WorkHistory) только то что поподает под условие WorkHistory.PeopleID = Peoples.PeopleID
давно
Мастер-Эксперт
425
4118
10.02.2007, 19:10
общий
То Чинга:В данном случае, <b>foreign key</b> - это обычный, уникальный индекс. При создании связи таблиц в запросах, заметно увеличивает скорость выполнения запроса. Впрочем, если у Вас таблицы небольшие, то присутствие или отсутствие индексов при запросах Вы не заметите.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа