join исключает записи которые не совпадают по условию
left join добавляет запсиси из смежной таблицы как null при условии несовпадения
Дальше все в ваших руках
Для начала уточните кол-во строк в таблице, есть их не так много, то разницы в принципе не будет. А вообще да, если вся строка не имеет фиксированной длины, то эффективность CHAR будет меньше.
SELECT dates.begin, count( events.id )
SELECT `events` as `dates`
LEFT JOIN `events` as `events` on ( dates.begin <= events.begin
AND dates.end >= events.end )
GROUP BY dates.begin
«SQL менеджер, аналогичный клиенту mysql»
«удобным механизмом редактирования запросов»
На сколько я понял Вам нужен консольный клиент? На сколько мне не изменяет память, консоль и удобный механизм редактирования это разные вещи. Консоль — очень удобна для ввода, но для редактирования она плоха.
Используйте ифы и переменные вместо кейсов, это сократит дублирование, в первый раз все вычисляете и пишете в переменную, во второй раз используйте переменную вместо всего выражения