SELECT `dates`.`date`, IFNULL(`t1`.`count`, 0) AS `cnt1`,
IFNULL(`t2`.`count`, 0) AS `cnt2`, IFNULL(`t3`.`count`, 0) AS `cnt3`
FROM (
SELECT `date` FROM `table1`
UNION SELECT `date` FROM `table2`
UNION SELECT `date` FROM `table3`
) AS `dates`
LEFT JOIN (
SELECT `date`, COUNT(*) AS `count` FROM `table1` GROUP BY `date`
) AS `t1` ON `t1`.`date` = `dates`.`date`
LEFT JOIN (
SELECT `date`, COUNT(*) AS `count` FROM `table2` GROUP BY `date`
) AS `t1` ON `t2`.`date` = `dates`.`date`
LEFT JOIN (
SELECT `date`, COUNT(*) AS `count` FROM `table3` GROUP BY `date`
) AS `t1` ON `t3`.`date` = `dates`.`date`
ORDER BY `dates`.`date`