800 SQL Questions.pdf
1 MB
Сборник из 800 вопросов по SQL, которые зададут на собеседовании
Вопросы и ответы по базовым и продвинутым темам: SQL-запросы, управление данными, оптимизация, администрирование и особенности различных версий Microsoft SQL Server вплоть до 2017.
Отправляйте друзьям, которые готовятся к интервью на позицию DBA или SQL-разработчика.
Веб-версия на Гитхабе.
#sql
Вопросы и ответы по базовым и продвинутым темам: SQL-запросы, управление данными, оптимизация, администрирование и особенности различных версий Microsoft SQL Server вплоть до 2017.
Отправляйте друзьям, которые готовятся к интервью на позицию DBA или SQL-разработчика.
Веб-версия на Гитхабе.
#sql
🔥6❤🔥4👍1🤡1
Хакеры взломали Минфин США с помощью SQL-инъекции и особенностями юникода в PostgreSQL
Критическую уязвимость нашли в программе управления привилегированным доступом от компании BeyondTrust, которая использовала PostgreSQL.
Что за уязвимость?
Хакеры обнаружили проблему в вызове внутри библиотеки
Они использовали два байта (c0 27), которые PostgreSQL принял за валидный юникод-символ. Так они внедрили неэкранированный апостроф и открыли себе возможность для SQL-инъекции.
Этот апостроф дал хакерам контроль над psql, CLI-интерфейсом PostgreSQL. Оттуда они использовали команду
Почему уязвимость не заметили раньше?
SQL-инъекции разбирают во всех учебниках, но эта оставалась незамеченной 9 лет, потому что:
- У PostgreSQL не было встроенной валидации юникод-символов в
- Она представляла угрозу только в командной строке
Какова мораль?
В Минфине полностью положились на надежность экранирования апострофов и опрометчиво разрешили пользователю выполнять произвольные команды в
Так не надо.
Никогда не передавайте клиентский код в
За комментарий спасибо Василию Пучкову, архитектору решений.
#sql #субд
Критическую уязвимость нашли в программе управления привилегированным доступом от компании BeyondTrust, которая использовала PostgreSQL.
Что за уязвимость?
Хакеры обнаружили проблему в вызове внутри библиотеки
libpq
функции pg_escape_string
. Она отвечает за экранирование пользовательского ввода. Они использовали два байта (c0 27), которые PostgreSQL принял за валидный юникод-символ. Так они внедрили неэкранированный апостроф и открыли себе возможность для SQL-инъекции.
Этот апостроф дал хакерам контроль над psql, CLI-интерфейсом PostgreSQL. Оттуда они использовали команду
\!
для выполнения произвольного кода на серверах Минфина. Почему уязвимость не заметили раньше?
SQL-инъекции разбирают во всех учебниках, но эта оставалась незамеченной 9 лет, потому что:
- У PostgreSQL не было встроенной валидации юникод-символов в
PQescapeStringInternal
.- Она представляла угрозу только в командной строке
psql
. Этот сценарий не рассмотрели. Какова мораль?
В Минфине полностью положились на надежность экранирования апострофов и опрометчиво разрешили пользователю выполнять произвольные команды в
psql
.Так не надо.
Никогда не передавайте клиентский код в
psql
, даже если считаете его проверенным. Всегда исходите из того, что один уровень защиты может быть обойден.За комментарий спасибо Василию Пучкову, архитектору решений.
#sql #субд
👍13🔥5⚡1❤1😱1
Третий сезон «Игры в кальмара» выйдет 27 июня 2025 года
Пока ждете, если ждете, можете окунуться в атмосферу сериала и поиграть:
Пройдите 9 испытаний в SQL Squid Game и попытайтесь остаться в живых.
#sql
Пока ждете, если ждете, можете окунуться в атмосферу сериала и поиграть:
Пройдите 9 испытаний в SQL Squid Game и попытайтесь остаться в живых.
#sql
🔥7❤🔥2
Как журналисты нашли должников за капремонт с помощью Pandas и SQLite
Журналисты издания «Деловой Петербург» изучили 20 тысяч отчетов Фонда капитального ремонта и выяснили, кто задолжал больше всего.
Разбираемся, как они анализировали данные.
На входе: архивы по 18 районам города, более 1000 html-файлов на каждый. В них информация о 2,8 млн помещений.
Очевидно, это результат выгрузки базы данных. Если бы к ней был доступ, все решалось бы SQL-запросами. Но доступа не было, так что пришлось работать с отчетами в html-файлах.
Напрашивающийся подход — прочитать таблицы с помощью read_html() в Pandas и объединить маленькие в одну большую.
Решение оказалось так себе:
Сперва индикатор
Медленно.
Причина задержки, судя по всему, в медленной работе метода
Подготовили пустой словарь-накопитель. Каждую прочитанную таблицу преобразовывали в словарь и добавляли к словарю-накопителю. Затем уже словарь-накопитель преобразовывали обратно в таблицу Pandas для анализа.
На все ушло 13 минут. Неплохо, но можно лучше.
Еще быстрее оказалась загрузка извлеченной из html-файлов информации в базу данных. Авторы обошлись без SQLAlchemy. Они напрямую отправляли несложные SQL-команды из Pandas в стандартный модуль SQLite.
На выполнение ушло 12 минут. Чуть быстрее варианта со словарем и намного быстрее первоначального подхода.
Что узнали?
Чаще всего за капремонт не платит бизнес. В центре Питера 85% задолженности образовано владельцами коммерческих помещений в многоквартирных домах.
Подробности читайте в статье на Хабре.
#sql #статьи
Журналисты издания «Деловой Петербург» изучили 20 тысяч отчетов Фонда капитального ремонта и выяснили, кто задолжал больше всего.
Разбираемся, как они анализировали данные.
На входе: архивы по 18 районам города, более 1000 html-файлов на каждый. В них информация о 2,8 млн помещений.
Очевидно, это результат выгрузки базы данных. Если бы к ней был доступ, все решалось бы SQL-запросами. Но доступа не было, так что пришлось работать с отчетами в html-файлах.
Напрашивающийся подход — прочитать таблицы с помощью read_html() в Pandas и объединить маленькие в одну большую.
Решение оказалось так себе:
Сперва индикатор
tqdm
показывал 5 минут на формирование единой таблицы. Когда индикатор подобрался к 20%, оставшееся время увеличилось уже до 30 минут, а скорость упала с 30 до 8 итераций в секунду. Затем прогноз оставшегося времени и вовсе вырос до 2 часов. Медленно.
Причина задержки, судя по всему, в медленной работе метода
append
в Pandas. Попробовали без него: нашли решение с двойным преобразованием. Подготовили пустой словарь-накопитель. Каждую прочитанную таблицу преобразовывали в словарь и добавляли к словарю-накопителю. Затем уже словарь-накопитель преобразовывали обратно в таблицу Pandas для анализа.
На все ушло 13 минут. Неплохо, но можно лучше.
Еще быстрее оказалась загрузка извлеченной из html-файлов информации в базу данных. Авторы обошлись без SQLAlchemy. Они напрямую отправляли несложные SQL-команды из Pandas в стандартный модуль SQLite.
На выполнение ушло 12 минут. Чуть быстрее варианта со словарем и намного быстрее первоначального подхода.
Что узнали?
Чаще всего за капремонт не платит бизнес. В центре Питера 85% задолженности образовано владельцами коммерческих помещений в многоквартирных домах.
Подробности читайте в статье на Хабре.
#sql #статьи
👍4🔥2❤1
10 трюков с SQLite, которые отличают мидла от джуна
Внешне простой SQLite скрывает крутые возможности, которые упрощают и ускоряют разработку.
В статье на примерах разбирают 10 полезных трюков, которыми редко пользуются джуны:
1. Использование Virtual Tables
2. Индексация по выражениям: Index on Expressions
3. Использование Common Table Expressions с рекурсией
4. Стратегическое использование PRAGMA для настройки производительности
5. Транзакции внутри транзакций: SAVEPOINT
6. Сжатие базы на лету с VACUUM INTO
7. Использование кастомных функций на C / Python / JavaScript
8. Журналирование и аудит с помощью триггеров
9. Использование Row Value Comparison для сложных условий
10. Имитация CHECK CONSTRAINT на уровне выражений
Вы круты, если в статье не нашли для себя ничего нового. Отправьте знакомому джуну — ему будет полезно. Или проверьте компетенцию коллеги.
#субд #sql
Внешне простой SQLite скрывает крутые возможности, которые упрощают и ускоряют разработку.
В статье на примерах разбирают 10 полезных трюков, которыми редко пользуются джуны:
1. Использование Virtual Tables
2. Индексация по выражениям: Index on Expressions
3. Использование Common Table Expressions с рекурсией
4. Стратегическое использование PRAGMA для настройки производительности
5. Транзакции внутри транзакций: SAVEPOINT
6. Сжатие базы на лету с VACUUM INTO
7. Использование кастомных функций на C / Python / JavaScript
8. Журналирование и аудит с помощью триггеров
9. Использование Row Value Comparison для сложных условий
10. Имитация CHECK CONSTRAINT на уровне выражений
Вы круты, если в статье не нашли для себя ничего нового. Отправьте знакомому джуну — ему будет полезно. Или проверьте компетенцию коллеги.
#субд #sql
👍3🔥3👌2🤡1
Может ли ИИ написать сложный SQL-запрос
Выясняем, каковы шансы сбыться у прогноза Gartner.
В статье автор сравнил свои SQL-запросы с теми, что написал ChatGPT. Формально нейросеть с задачей справилась, но есть нюансы:
- Когда смертный инженер пишет сложный запрос к БД, он учитывает контекст. Когда мы ставим задачу, то многое из того, что подразумевается, формально не произносится, и для нейросети это проблема.
- Если человек разумный все-таки учел в промпте все тонкости и подготовил четкую и детальную инструкцию, это ничего не гарантирует. Нейросеть может написать рабочий, но неоптимизированный и нечитабельный код.
В итоге автору пришлось потратить уйму времени на оптимизацию промпта. У инженера гораздо быстрее получится оптимизировать свой код, чем промпт для нейросети.
Главный вывод:
Нельзя сравнивать качество запроса, написанного человеком, и запроса, который написал ИИ.
Какой код напишет человек, зависит только от его квалификации. Какой код напишет нейросеть, зависит от нее, а еще от квалификации того, кто составляет промпт.
Представим, что и человек, и нейросеть написали одинаково хороший код. Сделает это машину ровней венцу творения? Нет. Это будет значить только то, что написавший промпт для нейросети делает свою работу так же хорошо, как и написавший код.
#субд #ии #sql #статьи
Выясняем, каковы шансы сбыться у прогноза Gartner.
В статье автор сравнил свои SQL-запросы с теми, что написал ChatGPT. Формально нейросеть с задачей справилась, но есть нюансы:
- Когда смертный инженер пишет сложный запрос к БД, он учитывает контекст. Когда мы ставим задачу, то многое из того, что подразумевается, формально не произносится, и для нейросети это проблема.
- Если человек разумный все-таки учел в промпте все тонкости и подготовил четкую и детальную инструкцию, это ничего не гарантирует. Нейросеть может написать рабочий, но неоптимизированный и нечитабельный код.
В итоге автору пришлось потратить уйму времени на оптимизацию промпта. У инженера гораздо быстрее получится оптимизировать свой код, чем промпт для нейросети.
Главный вывод:
Нельзя сравнивать качество запроса, написанного человеком, и запроса, который написал ИИ.
Какой код напишет человек, зависит только от его квалификации. Какой код напишет нейросеть, зависит от нее, а еще от квалификации того, кто составляет промпт.
Представим, что и человек, и нейросеть написали одинаково хороший код. Сделает это машину ровней венцу творения? Нет. Это будет значить только то, что написавший промпт для нейросети делает свою работу так же хорошо, как и написавший код.
#субд #ии #sql #статьи
👍4🔥4👌2💯2
Немного хардкорчика для SQL-спецов на вечер
Мы уже публиковали игры для изучения SQL.
Однако это другой уровень:
Datastar — обучающая многопользовательская текстовая космическая игра, полностью реализованная и запускаемая внутри базы данных PostgreSQL.
Игроки управляют действиями с помощью SQL-запросов, что делает игру одновременно учебной платформой для освоения SQL и увлекательным симулятором.
Механика
Игроки исследуют вселенную, торгуют, добывают ресурсы, улучшают корабли и соревнуются с другими игроками и NPC.
Геймплей
Выполняется через SQL-запросы (например, SELECT fly(3);), используя любой интерфейс PostgreSQL (например, psql или Edbit).
Цель
Заработать как можно больше денег, автоматизируя действия через скрипты и SQL-функции.
Глубина
Игра включает экономику, чат между игроками, таблицу лидеров, возможность скриптовать каждое действие и создавать автоматизированные стратегии.
Особенности
Можно сохранять исторические данные, создавать представления (VIEW), использовать автоматические команды (tick-commands), которые выполняются каждую игровую «тик-секунду».
Datastar — отличный способ погрузиться в практику SQL через геймплей и в то же время потренировать навыки анализа данных и оптимизации запросов.
Недостаток/преимущество
Datastar бесплатная, но чтобы поиграть, игру нужно будет развернуть у себя на машине.
Делитесь с друзьями и коллегами, которым уже некогда играть в Старкрафт.
#sql
Мы уже публиковали игры для изучения SQL.
Однако это другой уровень:
Datastar — обучающая многопользовательская текстовая космическая игра, полностью реализованная и запускаемая внутри базы данных PostgreSQL.
Игроки управляют действиями с помощью SQL-запросов, что делает игру одновременно учебной платформой для освоения SQL и увлекательным симулятором.
Механика
Игроки исследуют вселенную, торгуют, добывают ресурсы, улучшают корабли и соревнуются с другими игроками и NPC.
Геймплей
Выполняется через SQL-запросы (например, SELECT fly(3);), используя любой интерфейс PostgreSQL (например, psql или Edbit).
Цель
Заработать как можно больше денег, автоматизируя действия через скрипты и SQL-функции.
Глубина
Игра включает экономику, чат между игроками, таблицу лидеров, возможность скриптовать каждое действие и создавать автоматизированные стратегии.
Особенности
Можно сохранять исторические данные, создавать представления (VIEW), использовать автоматические команды (tick-commands), которые выполняются каждую игровую «тик-секунду».
Datastar — отличный способ погрузиться в практику SQL через геймплей и в то же время потренировать навыки анализа данных и оптимизации запросов.
Недостаток/преимущество
Datastar бесплатная, но чтобы поиграть, игру нужно будет развернуть у себя на машине.
Делитесь с друзьями и коллегами, которым уже некогда играть в Старкрафт.
#sql
👍13👾4❤🔥2🔥2
SQL Basics.pdf
102.8 KB
Если майские праздники пройдут по плану
И после вам понадобятся шпаргалки по SQL, вы знаете, где их найти.
- SQL для дата-аналитиков.
- Простые и сложные JOIN-операции.
- Оконные функции.
- SQL для самых маленьких.
Сохраняйте и поделитесь с коллегами.
#sql
И после вам понадобятся шпаргалки по SQL, вы знаете, где их найти.
- SQL для дата-аналитиков.
- Простые и сложные JOIN-операции.
- Оконные функции.
- SQL для самых маленьких.
Сохраняйте и поделитесь с коллегами.
#sql
👍6 5🔥3❤2❤🔥1💯1
Как разные LLM справляются с преобразованием запросов на естественном языке в SQL
В Tinybird опубликовали результаты бенчмарка по генерации SQL-запросов для 22 популярных моделей.
Топ 5:
1. claude-opus-4
2. claude-3.7-sonnet
3. o3-mini
4. claude-3.5-sonnet
5. gpt-4.1
Здорово, что авторы подробно описали методологию и позволяют сравнить результаты всех моделей со средними результатами человека (процентные значения в крайних правых столбцах).
По клику на название модели в таблице можно посмотреть подробности результатов.
#ии #sql
В Tinybird опубликовали результаты бенчмарка по генерации SQL-запросов для 22 популярных моделей.
Топ 5:
1. claude-opus-4
2. claude-3.7-sonnet
3. o3-mini
4. claude-3.5-sonnet
5. gpt-4.1
Здорово, что авторы подробно описали методологию и позволяют сравнить результаты всех моделей со средними результатами человека (процентные значения в крайних правых столбцах).
По клику на название модели в таблице можно посмотреть подробности результатов.
#ии #sql
❤🔥5👍4🔥3🏆3