• Топ-50 ІТ-компаній України, січень 2020: плюс чотири продуктові компанії та подолання відмітки «8000 фахівців»

    Живее всех живых. ~500 человек

    Поддержали: Mariia Bielan, Vitaliy Snihur
  • Гід IT-спеціальностями СумДУ

    Можно попросить еще 2 минорных изменения: NetCracker->Netcracker. И подпись к первому фото на 2-й карусели ( с девушкой и постером на заднем плане) «Аудиторія кафедри комп’ютерних наук»->"Аудиторія, яку підтримує компанія Netcracker", чтобы было так же как и на остальных фото из этого слайдера.

  • Гід IT-спеціальностями СумДУ

    Поправьте по тексту аббревиатуру: СДУ -> СумДУ

    Поддержал: Oleg Kotok
  • Техническое собеседование: 10 каверзных вопросов по SQL

    Для того что-бы выполнить, TRUNCATE нужно иметь права DROP ANY TABLE. Потому всегда думал, что в этом случае старая таблица отправляется в корзину, а на его месте создается такая же.
    Перечитал документацию. Действительно, там другой механизм удаления. В результате ни Rollback ни Flashback не работает. «You cannot roll back a TRUNCATE TABLE statement, nor can you use a FLASHBACK TABLE statement to retrieve the contents of a table that has been truncated.»

  • Техническое собеседование: 10 каверзных вопросов по SQL

    Хорошее решение. Спасибо. Многое почерпнул для себя. Сказывается, то на MySQL я написал всего десятка два запросов.

    1) Если прицельно смотреть на решение, сразу бросается в глаза, что оно работает до тех пор пока GROUP BY ym, кроме группировки выполняет еще и сортировку. Это характерно только для MySQL и может поменяться в любой момент.
    2) Как только мы захотим, чтобы в списке дат не было пропусков решение нужно менять полностью.
    3) В моем, действительно боле неуклюжем, запросе:
    а) сомневаюсь, что будет индекс включающий только дату и сумму. Хотя-бы потому что MySQL сразу засунет туда и первичный ключ, и мы получим ту же самую таблицу повторенную еще раз.
    в) DATE_FORMAT, вероятно, и так убьет попытки оптимизатора применить индекс, если индекс не по вычислимой колонке с DATE_FORMAT.
    г) вероятно, на одну дату приходится много записей, потому сомнительно, чтобы index sacn + row fetch давал бы выигрыш. Но, тут действительно нужно смотреть на план запроса.
    д) соглашусь, рост сета, но запрос легко исправить:
    select start.day, sum(records.amount)
    from (select DATE_FORMAT(created_at, ’%Y-%m-%d’) day from data_table group by 1) start,
    (select DATE_FORMAT(created_at, ’%Y-%m-%d’) day, sum(amount) amount from data_table group by 1) records
    where start.day >= records.day
    group by start.day;

    В этом случае nested loop будет гоняться по двум небольшим таблицам в памяти. Первый запрос легко заменить на другой эмиттер дат, например stackoverflow.com/...​eries-equivalent-in-mysql

    5) Давай согласимся, что как раз для этого и были придуманы оконные функции. И, слава Богу, они появились и в MySQL

  • Техническое собеседование: 10 каверзных вопросов по SQL

    Сбила с толку фраза

    текущем месяце

    . В сумму шли только данные из того-же месяца, что и дата.

    Убираем «and DATE_FORMAT(dates.created_at, ’%Y-%m-01′) = DATE_FORMAT(data_table.created_at , ’%Y-%m-01’)» из 4-й строки

  • Техническое собеседование: 10 каверзных вопросов по SQL

  • Техническое собеседование: 10 каверзных вопросов по SQL

    Это Вы о оконных функциях или рекурсивных запросах? Можно и так и так. И то и то есть в mysql.

  • Техническое собеседование: 10 каверзных вопросов по SQL

    docs.microsoft.com/...​-and-unknown-transact-sql

    в других БД ( постгре, оракл) тоже самое

  • Техническое собеседование: 10 каверзных вопросов по SQL

  • Техническое собеседование: 10 каверзных вопросов по SQL

    Плюс еще и в том, что TRUNCATE можно откатить, а значит эта команда поддерживает транзакции.

    TRUNCATE, как и остальной DDL транзакционен только в Постгре. Исправьте, меня если я не прав.
    Тот же Оракл, городят костыли с корзиной для удаленных таблиц.

  • Техническое собеседование: 10 каверзных вопросов по SQL

    В Postgres обычно хранят в text, все равно в TOAST уедет. varchar нужен, только чтобы ограничить длину строки.

    Поддержал: Dmitry Astapov
  • Техническое собеседование: 10 каверзных вопросов по SQL

    1. Что вернет условие 2 <> NULL

    ?
    такое условие возвращает UNDEFINED. Выглядит оно как False, только потому-что условия where и having пропускают дальше только истинные значения.

    3. Выполнится ли этот запрос?

    Как ни странно, тут поведение MySQL вполне правильное, из-за опциональной фичи из срандрата SQL T301, Functional dependencies. Слава Богу, другие производители не спешат ее внедрять. Хотя в том же MS SQL можно ее включить.

    4. Почему не выполнится этот запрос?

    Запрос выполнится в MySQL. Потому-что у него парсер лох. Этот же парсер проигнорирует inline объявление foreign key и разрешит on в cross join.
    Другие БД — молодцы.

    5. Имеет ли значение порядок колонок в составном индексе?

    Объяснение — ересь. Всех по этому поводу нужно отправлять на use-the-index-luke.com
    Если говорить о каверзных вопросах и MySQL, то нужно спрашивать про его дурную реализацию, когда в индекс включается не адрес строки, а целиком первичный ключ.

    6. Какая разница между TRUNCATE TABLE table_name и DELETE FROM table_name?
    Как следствие первого пункта, команда TRUNCATE не вызывает срабатывание триггеров и правил внешних ключей, то есть, очищая таблицу таким способом, можно не бояться каскадного удаления или изменения данных в других таблицах.

    — то есть данные в БД станут не консистентными?
    Тот же Постгре и Оракл не даст сделать TRUNCATE если есть данные связанные по внешним ключам

    В отличие от DELETE команда TRUNCATE не транзакционная. То есть, если в момент ее вызова, таблица table_name будет заблокирована какой-либо транзакцией — может возникнуть ошибка.

    А тут кандидата нужно попросить привести примеры DDL и DML команд. TRUNCATE, действительно DDL команда. А транзакции это про DML, куда, внезапно, относится и SELECT. Если вдаваться в деали — в Постгре DDL тоже транзакционен и TRUNCATE можно откатить.

    7. Какая разница между типами CHAR и VARCHAR?
    Для типа CHAR используется статическое распределение памяти, из-за чего операции с ним быстрее, чем с VARCHAR.

    из за страничной организации таблиц это далеко не всегда так и сильно зависит от длины данных. В большинстве случаев хранить данные комплектнее более выгодно, чем выравнивать их. Потому что стоимость чтения с диска больше стоимости разбора блока данных процессором.
    Боле того, в том же Постгре все, что длиннее N символов автоматом хранится в TOAST таблице, а все, что длиннее 2000 автоматом архивируется.

    8. Какая разница между типами VARCHAR и NVARCHAR?

    Давай еще спросим:
    1) Почему («AAA» = «aaa») может быть true
    2) Почему (some_long_string = some_other_long_string ) может быть true, даже если строки разные
    3) Почему column_name = ’STRING’ и column_name like ’STRING’ могут давать разные результаты

    9. Какая разница между UNION и UNION ALL?

    Забыл, что UNION делает сортировку данных.

    10. Какая разница между выражениями WHERE и HAVING?

    страх и ужас.

    Если задавать «каверзные» вопросы, тогда:
    сколько будет
    select 1 from any_table where 1!=1 having count(*)=0;