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

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

  Все выпуски  

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


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

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

Выпуск № 174
от 16.11.2006, 22:35

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


Вопрос № 62233: Уважаемые эксперты! Подскажите, пожалуйста, как создать запрос в Database Desktop, если необходимо вывести некоторые поля не из одной таблицы базы, а из нескольких? Заранее благодарна!...

Вопрос № 62.233
Уважаемые эксперты! Подскажите, пожалуйста, как создать запрос в Database Desktop, если необходимо вывести некоторые поля не из одной таблицы базы, а из нескольких? Заранее благодарна!
Отправлен: 11.11.2006, 22:25
Вопрос задала: Zinaida (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Grigory
Здравствуйте, Zinaida!
Для таких вещей обычно используется ОБЪЕДИНЕНИЕ - JOIN. Подробно об этом можно почитать вот тут:
http://sqlcourse2.com/joins.html
http://www.w3schools.com/sql/sql_join.asp
http://doc.mpv.ru/PostgreSQL7.1.3/sql-language.html

Удачи!
Ответ отправил: Grigory (статус: 4-ый класс)
Ответ отправлен: 12.11.2006, 04:00
Оценка за ответ: 5

Отвечает: Игорь Елизаров
Здравствуйте, Zinaida!
Связывание в разных SQL немного отличаются, но принцип один.
таблицы связываются между собой и выбираются как из одной, так и из другой таблицы.

Типичный пример - в таблице хранятся коды из справочника, а при запросе эти значения заменяются значением из соответствующего справочника.

Вот пример
таблца user имеет поле user_id - код юзера из справочника и содержит дату последней работы.
справочник юзеров spr_user содержит нахвание пользователя
Для того, чтобы вывести имя пользователя и дату его работы можно выполнить следующий запрос (MS SQL )
select user.date1, spr_user.name
from user inner join spr_user on user.user_id = spr_user.id

В MySQL запрос будет выглядеть чуть иначе но суть примерно та же:
select user.date1, spr_user.name
from user, spr_user // перечисляются все таблицы, учавствующие в запросе
where on user.user_id = spr_user.id // и их отношения
очень желательно, особенно для справочников, связывать таблицы по неповторяющемуся индексу, иначе можете иногда получить дублирующиеся записи и найти их будет довольно тяжело (ошибка будет иногда появляться, а иногда - нет, так называемая плавающая ошибка)

С уважением, Игорь

Ответ отправил: Игорь Елизаров (статус: 7-ой класс)
Ответ отправлен: 12.11.2006, 19:05
Оценка за ответ: 5

Отвечает: PaVeL_Ekt
Здравствуйте, Zinaida!

Собственно говоря, если нужно выводить не связанные значения то
select a.a1, a.a2, b.b1, b.b2 from Table_1 a, Table_2 b

А если таблицы нужно связать тогда нужно использовать Join
Select a.a1, a.a2, b.b2, c.c2, d.d2 from Table_1 a
Inner join Table_2 b on b.b1=a.a1 // Равнозначные таблицы
Left join Table_3 c on c.c1=a.a1 // Главная левая таблица
Right join Table_4 d on d.d1=a.a1 // Главная правая таблица

Если использовать inner тогда если в одной из таблиц нет записи, которая есть в другой то запись выводиться не будет.

При главенстве одной из таблиц: Если в главной таблице запись есть, а в другой нет, тогда запись выведеться, но поле подчиненной таблицы будет равняться NULL
---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 3-ий класс)
Ответ отправлен: 13.11.2006, 08:09
Оценка за ответ: 5


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

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

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

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

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


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


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

В избранное