В таком случае, нет, скорее всего не будет быстрее. В таком случае я бы сослался на Роберта Мартина, он советует бизнес-логику даржать не в БД. Плюс в независимости от "деталей".
Павел, правильно советуют насчет одного запроса. Не понятна до конца задача. Требуется исключить из итоговой суммы SUM(user_dolg.hours) AS sub_hours дни, которые содержатся в dayoff? Если да, то нужно делать left join c dayoff по дате, а не union. В сумме потом вставить case с проверкой, есть ли off_date имеет значение.
Да не бессмыссленные названия таблиц это :)
Как только таблица появляется в секции FROM к ней тут же приписывается алиас, а потом исользуется в запросе <алиас>.<имя_столбца> в секции ON, WHERE, SELECT, GROUP BY, etc (везде, в общем).
Можно двумя последовательными выражениями: сначала выбрать первые три слова. Затем из получившегося результата взять одно слово с конца.
Можно одним выражением, если известны грамматики всех съедобных вещей.