Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите, где прочесть теорию оп объединению таблиц? / 14 сообщений из 14, страница 1 из 1
13.07.2005, 13:53:51
    #33163450
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
сосбственно - сабж.
интересует линка, где описано как для тех, кто в танке.
конкретно, не могу понять, как работает LEFT JOIN. Прочел ману раз 50, думал, что понял - написал запрос - оказалось, что ничего я не понял.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
13.07.2005, 14:31:05
    #33163633
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
Если есть возможность то растолкуйте тезисы из маны
manual
Выражение "A LEFT JOIN B" в MySQL реализовано следующим образом:
Таблица B устанавливается как зависимая от таблицы A и от всех таблиц, от которых зависит A.
Таблица A устанавливается как зависимая ото всех таблиц (кроме B), которые используются в условии LEFT JOIN.
Все условия LEFT JOIN перемещаются в предложение WHERE.
Выполняются все стандартные способы оптимизации соединения, за исключением того, что таблица всегда читается после всех таблиц, от которых она зависит. Если имеется циклическая зависимость, MySQL выдаст ошибку.
Выполняются все стандартные способы оптимизации WHERE.
Если в таблице A имеется строка, соответствующая выражению WHERE, но в таблице B ни одна строка не удовлетворяет условию LEFT JOIN, генерируется дополнительная строка B, в которой все значения столбцов устанавливаются в NULL.
Если LEFT JOIN используется для поиска тех строк, которые отсутствуют в некоторой таблице, и в предложении WHERE выполняется следующая проверка: column_name IS NULL, где column_name - столбец, который объявлен как NOT NULL, MySQL пререстанет искать строки (для отдельной комбинации ключа) после того, как найдет строку, соответствующую условию LEFT JOIN.

>Таблица B устанавливается как зависимая от таблицы A и от всех таблиц, от которых зависит A.
Если помимо таблицы А и В есть еще и С, которое учавствует в запросе что-то вроде "SELECT ... FROM C, A LEFT JOIN C ..." То как происходит объединение?

>Все условия LEFT JOIN перемещаются в предложение WHERE.
Т.е. я пишу условие после слова ON и в процессе выполнения запроса MySQL перемещает условие в WHERE? или как?

>Если в таблице A имеется строка, соответствующая выражению WHERE,
>но в таблице B ни одна строка не удовлетворяет условию LEFT JOIN,
>генерируется дополнительная строка B, в которой все значения столбцов
>устанавливаются в NULL.
Опять же, если таблиц несколько, то происходит объединение всех таблиц, кроме той, которая объеденяется по LEFT JOIN по условию в WHERE, а затем проверяется условие, которое объявлено после слова ON?
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
13.07.2005, 14:45:15
    #33163683
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
А тебе это для чего все? Быстродействие оценить?

Если нет - тогда создай пяток таблиц с 3,5,7 записями в каждой и проэксперементируй с ними с разными JOIN :)

Код: plaintext
mahoune
...
Рейтинг: 0 / 0
13.07.2005, 14:55:18
    #33163718
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
Я не могу составить запрос. О Быстродейсвии пока что не может быть и речи... Я мог бы выложить дамп, но там 9 таблиц (основных - 3-4)... Но в такое глобальное врядли кто-то будет вдумываться... Да и на будущее, не всег да же за апросами в форум ходить... Мне бы понять...
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
13.07.2005, 17:06:55
    #33164224
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
4m@t!cЯ не могу составить запрос. О Быстродейсвии пока что не может быть и речи... Я мог бы выложить дамп, но там 9 таблиц (основных - 3-4)... Но в такое глобальное врядли кто-то будет вдумываться... Да и на будущее, не всег да же за апросами в форум ходить... Мне бы понять...
----------------------------------------
Артисты не приехали, приехали цыгане

Всё просто.
Джойнится первая (среди указанных) тбл со второй,
результат джоина первой со второй джойнится с третьей,
предыдущий результат джойнится с четвертой,
............
...
Рейтинг: 0 / 0
13.07.2005, 17:24:56
    #33164284
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
JohnmenВсё просто.
Джойнится первая (среди указанных) тбл со второй,
результат джоина первой со второй джойнится с третьей,
предыдущий результат джойнится с четвертой,
Т.е. если есть запрос
SELECT ... FROM B, D, E, A LEFT JOIN C ...
То сначало объеденяются таблицы B*D=DB, потом DB*E=DBE, потом DBE*A=DBEA (при этом используются соответсвующие условия WHERE), а потом и С (с соотвествущими условиями в ON, которые автоматически переносятся в WHERE). Я все правильно понял?
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
13.07.2005, 17:29:52
    #33164305
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
4m@t!c JohnmenВсё просто.
Джойнится первая (среди указанных) тбл со второй,
результат джоина первой со второй джойнится с третьей,
предыдущий результат джойнится с четвертой,
Т.е. если есть запрос
SELECT ... FROM B, D, E, A LEFT JOIN C ...
То сначало объеденяются таблицы B*D=DB, потом DB*E=DBE, потом DBE*A=DBEA (при этом используются соответсвующие условия WHERE), а потом и С (с соотвествущими условиями в ON, которые автоматически переносятся в WHERE). Я все правильно понял?
----------------------------------------
Артисты не приехали, приехали цыгане

Не могу сказать, у меня таких запросов никогда не было и не будет.
Т.к. использую или только явное соединение или только неявное. Что и рекомендуется делать.
Ибо в противном случае, поведение парсера и оптимизатора непредсказуемо
...
Рейтинг: 0 / 0
13.07.2005, 17:30:35
    #33164309
коты
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
ману читать бесполезно, возьми книгу по любой "большой" БД, в которой достаточно внимания уделено собственно сиквелу, там будет что ты хочешь и даже больше. вот у меня тут рядом валяется двухтомник роберт вьера "professional: ms sql server 2000 программирование" от издательства wrox там все супер. на английском есть в сети 100%..
...
Рейтинг: 0 / 0
13.07.2005, 17:42:32
    #33164354
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
JohnmenНе могу сказать, у меня таких запросов никогда не было и не будет.
Т.к. использую или только явное соединение или только неявное. Что и рекомендуется делать.
Ибо в противном случае, поведение парсера и оптимизатора непредсказуемо
Что есть "явное соединение" и что есть "неявное соединенеие" в вашем понимании? (пример?)
...
Рейтинг: 0 / 0
13.07.2005, 17:49:18
    #33164382
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
4m@t!c
Что есть "явное соединение" и что есть "неявное соединенеие" в вашем понимании? (пример?)

Явное: ...FROM T1 ... JOIN T2 ... ON <условие соединения>
Неявное: ... FROM T1, T2 ... WHERE <условие соединения>
...
Рейтинг: 0 / 0
14.07.2005, 05:29:49
    #33164821
Mandor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
Запрос:
Код: plaintext
SELECT * FROM t1, t2 WHERE t1.a = t2.a

Эквивалентен следующему:
Код: plaintext
SELECT * FROM t1 INNER JOIN t2 ON (t1.a = t2.a)
Т.е. в результат добавляются все возможные варианты сцепления строк, при которых t1.a = t2.a.

Код: plaintext
SELECT * FROM t1 LEFT JOIN t2 ON (t1.a = t2.a)
Здесь в результат добавляются все строчки из левой таблицы (t1), которые сцепляются со строками из правой (t2) по условию t1.a = t2.a, т.е. если таких строк в правой таблице нет, то вместо них используется NULL.

Пример LEFT JOIN'а:
Код: plaintext
SELECT * FROM T1 LEFT JOIN T2 ON (T1.surname = T2.surname)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
T1:                            T2:
+------------+-------------+   +-----+-------------+
| first_name | surname     |   | val | surname     |
+------------+-------------+   +-----+-------------+
| Yvonne     | Clegg       |   |  10   | Clegg       |
| Winston    | Powers      |   |  20   | Powers      |
| Patricia   | Mankunku    |   |  30   | Mankunku    |
| Yvonne     | Clegg       |   +-----+-------------+
| Johnny     | Chaka-Chaka |
| NULL       | NULL        |
+------------+-------------+

Результат:
+------+-------------+------------+
| val  | surname     | first_name |
+------+-------------+------------|
|  10    | Clegg       | Yvonne     |
|  20    | Powers      | Winston    |
|  30    | Mankunku    | Patricia   |
|  10    | Clegg       | Yvonne     |
| NULL | Chaka-Chaka | Johny      |
| NULL | NULL        | NULL       |
+------+-------------+------------|
Если бы вместа LEFT JOIN использовать INNER JOIN, то 5 и 6 строчки бы не было.

Надеюсь стало понятнее?
...
Рейтинг: 0 / 0
19.07.2005, 17:09:20
    #33174161
OneOfGuests
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
Я , конечно, "дико извиняюсь", но как всё-таки по поводу
4m@t!cсосбственно - сабж.
интересует линка, где описано как для тех, кто в танке ?
...
Рейтинг: 0 / 0
19.07.2005, 17:29:34
    #33174236
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
OneOfGuestsЯ , конечно, "дико извиняюсь", но как всё-таки по поводу
4m@t!cсосбственно - сабж.
интересует линка, где описано как для тех, кто в танке ? JOIN SYNTAX
...
Рейтинг: 0 / 0
19.07.2005, 19:02:36
    #33174505
OneOfGuests
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, где прочесть теорию оп объединению таблиц?
Berkut , спасибо
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите, где прочесть теорию оп объединению таблиц? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]