name1 создана так:
create table name1(id int(3) auto_increment, name varchar(10), primary key(id))
name2 создана так:
create table name2(id int(3) auto_increment, name varchar(10), primary key(id),foreign key(name) references name1)
Вот так заполнены таблицы:

Скажите, чем отличается это:
select * from name1 left join name2 on name1.name=name2.name;
от этого?
select * from name1 left outer join name2 on name1.name=name2.name;
Результат выдает один и тот же
Спустя 48 минут, 36 секунд (13.07.2012 - 22:44) kilogram написал(а):
left join должен искать все строки в таблице name1 с величиной name, которая не присутствует в таблице name2, но в name2 присутствует Петя, почему оно все равно его выводит при этом запросе ниже?
select name1.name from name1 left join name2 on name1.name=name2.name
Спустя 10 минут, 23 секунды (13.07.2012 - 22:55) Placido написал(а):
Цитата (kilogram @ 13.07.2012 - 21:56) |
Скажите, чем отличается это: select * from name1 left join name2 on name1.name=name2.name; от этого? select * from name1 left outer join name2 on name1.name=name2.name; Результат выдает один и тот же |
В MySQL это одно и то же.
Цитата (kilogram @ 13.07.2012 - 22:44) |
left join должен искать все строки в таблице name1 с величиной name, которая не присутствует в таблице name2, но в name2 присутствует Петя, почему оно все равно его выводит при этом запросе ниже? select name1.name from name1 left join name2 on name1.name=name2.name |
С чего бы это? См. http://ru.wikipedia.org/wiki/Join_(SQL)#LEFT_OUTER_JOIN
Спустя 1 минута, 22 секунды (13.07.2012 - 22:56) kilogram написал(а):
Там http://ru.wikipedia.org/wiki/Join_(SQL) написано такое:
Цитата |
LEFT OUTER JOIN К левой таблице присоединяются все записи из правой, соответствующие условию (по правилам inner join), плюс все не вошедшие записи из левой таблицы, поля правой таблицы заполняются значениями NULL. |
А как знать где левая таблица, а где правая?
Спустя 2 минуты, 39 секунд (13.07.2012 - 22:59) Placido написал(а):
Та, что слева от слова LEFT - левая. В примере выше, соответственно, таблица name1.
Спустя 4 минуты, 41 секунда (13.07.2012 - 23:03) kilogram написал(а):
select name1.name from name1 left join name2 on name2.name=name1.name
name2.name - это всегда считается левая таблица,
name1.name - это всегда считается правая таблица?
Спустя 6 минут, 24 секунды (13.07.2012 - 23:10) Placido написал(а):
name1(слева от join, значит, левая) left join name2(справа от join, значит, правая)
Спустя 13 минут, 1 секунда (13.07.2012 - 23:23) kilogram написал(а):
Перед джоином обязательно должна стоять таблица которая ссылается, а после джоина таблица на которую ссылаются?
Спустя 5 минут, 31 секунда (13.07.2012 - 23:28) Placido написал(а):
К таблице, имя которой стоит перед джойном, присоединяется таблица, имя которой идет после джойна.
Спустя 32 минуты, 8 секунд (14.07.2012 - 00:00) kilogram написал(а):
Вот написал запрос:
К таблице, имя которой стоит перед джойном - name1,
присоединяется таблица, имя которой идет после джойна - name2
Далее стоит условие, согласно которому выводить. Условие такое:
Выводить, все строки из таблицы name1 с полем name, которые не присутствуют в таблице name2.
У меня такие записи в таблице name2, добавил 2 записи:

Почему в результате выводит?
select *from name1 right join name2 on name1.name=name2.name where name1.name is not NULL
К таблице, имя которой стоит перед джойном - name1,
присоединяется таблица, имя которой идет после джойна - name2
Далее стоит условие, согласно которому выводить. Условие такое:
Выводить, все строки из таблицы name1 с полем name, которые не присутствуют в таблице name2.
У меня такие записи в таблице name2, добавил 2 записи:

Почему в результате выводит?
1 Петя 1 Петя