Автор Тема: MySQL: JOINы  (Прочитано 3339 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн volod

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL: JOINы
« : 08 Февраля 2005, 11:35:45 »
Кто бы вот так внятно смог объяснить, как вообще работает  JOIN и чем он принципиально отличается от запято и., LEFT JOIN.
Или ссылку киньте на кой-то ресурс. Вот только этой (http://dev.mysql.com/doc/mysql/ru/join.html) не нужно! Написано там классно, но чуток не то. Механизма, механизма тама нету...

Оффлайн volod

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL: JOINы
« Ответ #1 : 09 Февраля 2005, 10:08:06 »
Все, нашел.
http://citforum.novgorod.net/database/dblearn/dblearn05.shtml
Все свободны, всем спасибо:)

Оффлайн volod

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL: JOINы
« Ответ #2 : 11 Февраля 2005, 14:30:24 »
Нет. Все-таки нашел, но не то.
Таки не роздуплил, чем концептуально отличаются, ну хотя бы LEFT JOIN и INNER JOIN?..
:/

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
MySQL: JOINы
« Ответ #3 : 11 Февраля 2005, 15:15:34 »
volod

INNER JOIN - выбираются ТОЛЬКО те записи из обоих таблиц которые удовлетворяют условию.

LEFT JOIN - Выбираются ВСЕ записи из первой таблицы; из второй таблицывыбираются ТОЛЬКО те записи, которые удовлетворяют условию.

Вообще попробовал бы у себя поэкспериментировать, иначе этот "чупа-чупс" будем долго обсасывать...

Оффлайн volod

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL: JOINы
« Ответ #4 : 11 Февраля 2005, 15:38:40 »
********************************************************
mysql> explain SELECT
    -> m.id_membership, m.code,
    -> p.price
    -> FROM memberships AS m
    -> LEFT JOIN membership_programs AS p ON (p.id_membership = m.id_membership AND p.suspended = 0)
    -> WHERE m.id_membership = 2 AND suspended = 0 AND site = "MS"
    -> ;
+----+-------------+-------+-------+------------------------------------------------------------+--------------------------+---------+-------+------+-------------+
| id | select_type | table | type  | possible_keys                                              | key                      | key_len | ref   | rows | Extra       |
+----+-------------+-------+-------+------------------------------------------------------------+--------------------------+---------+-------+------+-------------+
|  1 | SIMPLE      | m     | const | PRIMARY,XAK1_memberships,XAK2_memberships,XFK1_memberships | PRIMARY                  |       4 | const |    1 |             |
|  1 | SIMPLE      | p     | ref   | XFK1_membership_programs,XIE1_membership_programs          | XFK1_membership_programs |       4 | const |    2 | Using where |
+----+-------------+-------+-------+------------------------------------------------------------+--------------------------+---------+-------+------+-------------+
2 rows in set (0.02 sec)


*****************************************************
********* и ПОЧТИ такой же но INNER *******************
*****************************************************

mysql> explain SELECT
    -> m.id_membership, m.code,
    -> p.price
    -> FROM memberships AS m
    -> INNER JOIN membership_programs AS p ON (p.id_membership = m.id_membership AND p.suspended = 0)
    -> WHERE m.id_membership = 2 AND suspended = 0 AND site = "MS"
    -> ;
+----+-------------+-------+-------+------------------------------------------------------------+--------------------------+---------+-------+------+-------------+
| id | select_type | table | type  | possible_keys                                              | key                      | key_len | ref   | rows | Extra       |
+----+-------------+-------+-------+------------------------------------------------------------+--------------------------+---------+-------+------+-------------+
|  1 | SIMPLE      | m     | const | PRIMARY,XAK1_memberships,XAK2_memberships,XFK1_memberships | PRIMARY                  |       4 | const |    1 |             |
|  1 | SIMPLE      | p     | ref   | XFK1_membership_programs,XIE1_membership_programs          | XFK1_membership_programs |       4 | const |    2 | Using where |
+----+-------------+-------+-------+------------------------------------------------------------+--------------------------+---------+-------+------+-------------+
2 rows in set (0.00 sec)

********************************************************

Найдите десять отличий! Или я плохо смотрю?..
Каррроче, експлейн на всю эту фигню что тама что тама выдет для таблицы memberships AS m (которая, обратите ка ваше внимание, стоит в начале произведения) тип связывания CONST. !
Ну это ж никак ни ALL...

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
MySQL: JOINы
« Ответ #5 : 11 Февраля 2005, 16:05:44 »
volod

Я что-то не понял... то ты начинаешь "умничать" про индексы то не можешь понять разницу между INNER JOIN и LEFT JOIN...

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

Оффлайн volod

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL: JOINы
« Ответ #6 : 11 Февраля 2005, 16:14:15 »
Эхе-хе... Ну ладно. Не знаешь, как объяснить, либо не хочешь, так чего ж заводиться? Я и сам начитан, но нафиг мне эта теория, если я вот на EXPLAN смотрю, а он мне говорит: "Чувак, а запросики, че ты мне подсовываешь, есьм одинаковые". И вот как раз про этот случай я говорю.
Ладно. Если никто больше не объяснит это вот явление, сам как-нибуть додую.
Спасибо, Phoenix.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28