info:mysql:mysql_join_left

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
info:mysql:mysql_join_left [2023/03/20 14:35] – supprimée - modification externe (Unknown date) 127.0.0.1info:mysql:mysql_join_left [2023/03/20 14:37] (Version actuelle) radeff
Ligne 1: Ligne 1:
 +====== MySQL SELECT LEFT JOIN etc. ======
 +===== Doc =====
 +  * http://dev.mysql.com/doc/refman/5.0/fr/left-join-optimization.html|7.2.9. Comment MySQL optimise les clauses LEFT JOIN et RIGHT JOIN
 +  * http://www.trucsweb.com/asp/trucs.asp?no=104&type=7|Jointures et relations INNER, LEFT, RIGHT, UNION...
  
 +===== Exemple =====
 +Créer deux tables:
 +<code mysql>
 +CREATE TABLE IF NOT EXISTS `a` (
 +  `id` varchar(3) NOT NULL,
 +  PRIMARY KEY  (`id`)
 +) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 +
 +--
 +-- Contenu de la table `a`
 +--
 +
 +INSERT INTO `a` (`id`) VALUES
 +('a'),
 +('b'),
 +('c'),
 +('d');
 +
 +
 +CREATE TABLE IF NOT EXISTS `b` (
 +  `a_id` varchar(3) NOT NULL,
 +  `b` tinyint(4) NOT NULL
 +) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 +
 +--
 +-- Contenu de la table `b`
 +--
 +
 +INSERT INTO `b` (`a_id`, `b`) VALUES
 +('a', 1),
 +('a', 2),
 +('b', 1),
 +('b', 3);
 +</code>
 +
 +Si on fait:
 +<code mysql>
 +SELECT *
 +FROM `a` , `b`
 +WHERE a.id = b.a_id
 +LIMIT 0 , 30 
 +</code>
 +
 +mysql retourne
 +
 +<code>
 +a  a  1
 +a a 2
 +b b 1
 +b b 3
 +</code>
 +
 +on n'a donc pas les enregistrements c
 +
 +pour les avoir:
 +
 +<code mysql>
 +SELECT *
 +FROM a
 +LEFT JOIN b ON a.id = b.a_id
 +</code>
 +
 +renvoie
 +
 +<code>
 +a  a  1
 +a a 2
 +b b 1
 +b b 3
 +c NULL NULL
 +d NULL NULL
 +</code>
 +
 +Pour nettoyer
 +
 +<code mysql>
 + SELECT b.a_id, b.b
 +FROM a
 +LEFT JOIN b ON a.id = b.a_id
 +LIMIT 0 , 30 
 +</code>
 +
 +renvoie
 +
 +<code>
 +a  1
 +a 2
 +b 1
 +b 3
 +NULL NULL
 +NULL NULL
 +</code>
 +
 +===== attention à l'ordre: =====
 +<code mysql>
 +SELECT *
 +FROM b
 +LEFT JOIN a ON a.id = b.a_id
 +</code>
 +ne retourne que
 +<code>
 +a  a  1
 +a a 2
 +b b 1
 +b b 3
 +</code>
 +
 +{{tag>mysql}}