Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [SQL] - left join? 
:(
    Опции темы
devyshko
Дата 11.12.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 2.12.2007

Репутация: нет
Всего: нет



Оч прошу объяснить мне как работает left join
желательно на примере  smile 
PM   Вверх
Akina
Дата 11.12.2007, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 17
Всего: 454



Допустим, есть таблицы:

t1
Код

id  val1
 1  1-1
 2  1-2

t2
Код

id  val2
 1  2-1
 3  2-3

Код

select t1.*, t2.*
from t1 left join t2
on t1.id=t2.id

результат:
Код

t1.id val1  t2.id  val2
  1   1-1     1    2-1
  2   1-2
        
т.е. взята ВСЯ таблица, которая слева (t1), и к тем записям, для которых есть соответствие, добавлены соответствующие строки второй таблицы.
Если надо наоборот - то следует либо поменять местами таблицы (t2 left join t1), либо оставить, но использовать right join.
Если надо, чтобы были выбраны только пары, встречающиеся в обеих таблицах, используется inner join, а если нужны все записи из обеих таблиц, в т.ч. соотвестсвующие - вместе, то используется full join.

Какой именно (inner или full) используется, если написано просто join, без указания модификатора - зависит от конкретного сервера БД, стандарта нет. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
devyshko
Дата 11.12.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 2.12.2007

Репутация: нет
Всего: нет



Akina, спасибо большое.
Скажите, а почему 'on'  а не 'where'?
PM   Вверх
skyboy
Дата 11.12.2007, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



devyshko, where - это список условия фильтрации конечного результата.
on - это условия связывания.
т.е. если надо будет соединить между собой 3 таблицы по каким-то условиям, то каждое связывание(join) будет сопровождаться секцией on, где будет указано, как присоединить очередную таблицу.
секция where же может быть только одна и фильтровать будет уже результат соединения таблиц.
PM MAIL   Вверх
Akina
Дата 11.12.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 17
Всего: 454



дополнение - если есть join, то ОБЯЗАН быть on - причем ровно столько раз, сколько join. А where может быть только один либо ни одного.
При наличии подзапросов - один where на каждый подзапрос и один where - на основной запрос.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
devyshko
Дата 11.12.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 2.12.2007

Репутация: нет
Всего: нет



ясно! спасибо)
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.