MySQL SELECT LEFT JOIN etc.

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…

Créer deux tables:

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);

Si on fait:

 SELECT *
FROM `a` , `b`
WHERE a.id = b.a_id
LIMIT 0 , 30 

mysql retourne

a  	a  	1
a 	a 	2
b 	b 	1
b 	b 	3

on n'a donc pas les enregistrements c

pour les avoir:

SELECT *
FROM a
LEFT JOIN b ON a.id = b.a_id

renvoie

a  	a  	1
a 	a 	2
b 	b 	1
b 	b 	3
c 	NULL 	NULL
d 	NULL 	NULL

Pour nettoyer

 SELECT b.a_id, b.b
FROM a
LEFT JOIN b ON a.id = b.a_id
LIMIT 0 , 30 

renvoie

a  	1
a 	2
b 	1
b 	3
NULL 	NULL
NULL 	NULL
SELECT *
FROM b
LEFT JOIN a ON a.id = b.a_id

ne retourne que

a  	a  	1
a 	a 	2
b 	b 	1
b 	b 	3
  • info/mysql_join_left.txt
  • Dernière modification: 2018/07/18 09:46
  • par radeff