powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите, где прочесть теорию оп объединению таблиц?
14 сообщений из 14, страница 1 из 1
Подскажите, где прочесть теорию оп объединению таблиц?
    #33163450
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сосбственно - сабж.
интересует линка, где описано как для тех, кто в танке.
конкретно, не могу понять, как работает LEFT JOIN. Прочел ману раз 50, думал, что понял - написал запрос - оказалось, что ничего я не понял.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
Подскажите, где прочесть теорию оп объединению таблиц?
    #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
Подскажите, где прочесть теорию оп объединению таблиц?
    #33163683
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А тебе это для чего все? Быстродействие оценить?

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

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

Всё просто.
Джойнится первая (среди указанных) тбл со второй,
результат джоина первой со второй джойнится с третьей,
предыдущий результат джойнится с четвертой,
............
...
Рейтинг: 0 / 0
Подскажите, где прочесть теорию оп объединению таблиц?
    #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
Подскажите, где прочесть теорию оп объединению таблиц?
    #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
Подскажите, где прочесть теорию оп объединению таблиц?
    #33164309
коты
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ману читать бесполезно, возьми книгу по любой "большой" БД, в которой достаточно внимания уделено собственно сиквелу, там будет что ты хочешь и даже больше. вот у меня тут рядом валяется двухтомник роберт вьера "professional: ms sql server 2000 программирование" от издательства wrox там все супер. на английском есть в сети 100%..
...
Рейтинг: 0 / 0
Подскажите, где прочесть теорию оп объединению таблиц?
    #33164354
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JohnmenНе могу сказать, у меня таких запросов никогда не было и не будет.
Т.к. использую или только явное соединение или только неявное. Что и рекомендуется делать.
Ибо в противном случае, поведение парсера и оптимизатора непредсказуемо
Что есть "явное соединение" и что есть "неявное соединенеие" в вашем понимании? (пример?)
...
Рейтинг: 0 / 0
Подскажите, где прочесть теорию оп объединению таблиц?
    #33164382
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4m@t!c
Что есть "явное соединение" и что есть "неявное соединенеие" в вашем понимании? (пример?)

Явное: ...FROM T1 ... JOIN T2 ... ON <условие соединения>
Неявное: ... FROM T1, T2 ... WHERE <условие соединения>
...
Рейтинг: 0 / 0
Подскажите, где прочесть теорию оп объединению таблиц?
    #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
Подскажите, где прочесть теорию оп объединению таблиц?
    #33174161
OneOfGuests
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я , конечно, "дико извиняюсь", но как всё-таки по поводу
4m@t!cсосбственно - сабж.
интересует линка, где описано как для тех, кто в танке ?
...
Рейтинг: 0 / 0
Подскажите, где прочесть теорию оп объединению таблиц?
    #33174236
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OneOfGuestsЯ , конечно, "дико извиняюсь", но как всё-таки по поводу
4m@t!cсосбственно - сабж.
интересует линка, где описано как для тех, кто в танке ? JOIN SYNTAX
...
Рейтинг: 0 / 0
Подскажите, где прочесть теорию оп объединению таблиц?
    #33174505
OneOfGuests
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Berkut , спасибо
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите, где прочесть теорию оп объединению таблиц?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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