Учебник SQLite для начинающих
Курс по SQLite — самой распространённой базе данных в мире, которая работает прямо внутри приложения и хранит все данные в одном файле. Идеальный курс для интерактива: песочница на этой странице — это и есть SQLite, поэтому почти каждый пример можно запустить кнопкой, поменять и тут же увидеть результат. Начнём с устройства SQLite и его необычной динамической типизации, разберём выборку данных (SELECT, WHERE, ORDER BY, NULL), изменение данных и ограничения целостности, связи и соединения таблиц (JOIN, подзапросы), агрегацию и группировку, оконные функции, а закончим практикой: индексами, представлениями, транзакциями и работой из кода. Базовых знаний не требуется — учим SQL с самого начала на живых примерах.
Курс «SQLite» состоит из 6 разделов и 24 уроков: Введение в SQLite, Выборка данных, Изменение данных и схема, Связи и соединения, Агрегация и группировка и Практика и возможности. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Введение в SQLite
- Что такое SQLite
SQLite — встраиваемая база данных в одном файле, без сервера. Разбираем, как она устроена, где применяется и чем отличается от «больших» СУБД.
- Утилита sqlite3 и создание базы
Командная строка sqlite3: как создать файл базы, выполнять SQL и пользоваться точечными командами .tables, .schema, .mode, .headers.
- Типы данных и динамическая типизация
Классы хранения SQLite и его необычная динамическая типизация: что такое type affinity и почему столбец может хранить значения «не своего» типа.
- Первая таблица: CREATE, INSERT, SELECT
Полный путь от пустой базы к данным: создаём таблицу командой CREATE TABLE, добавляем строки через INSERT и читаем их запросом SELECT.
- Что такое SQLite
2 Выборка данных
- SELECT, столбцы и псевдонимы
Учимся выбирать данные: перечисление столбцов, вычисляемые выражения и псевдонимы AS для удобных имён результата.
- WHERE и операторы сравнения
Фильтрация строк через WHERE: операторы =, <, >, диапазон BETWEEN, список IN и поиск по шаблону LIKE.
- Сортировка, LIMIT, DISTINCT
Упорядочиваем и ограничиваем выборку: ORDER BY с ASC/DESC, постраничный вывод через LIMIT и OFFSET, удаление дубликатов с DISTINCT.
- NULL и проверка на пустоту
Что такое NULL в SQLite, почему его нельзя сравнивать через = и как правильно фильтровать пустые значения через IS NULL и COALESCE.
- SELECT, столбцы и псевдонимы
3 Изменение данных и схема
- INSERT, UPDATE, DELETE
Изменяем данные: варианты INSERT, обновление строк через UPDATE с условием и удаление через DELETE. Главное правило — не забывать WHERE.
- Ограничения и первичный ключ
Ограничения целостности: PRIMARY KEY и rowid, AUTOINCREMENT, NOT NULL, UNIQUE, DEFAULT и проверки CHECK — как база сама защищает данные.
- ALTER TABLE: изменение схемы
Как менять структуру существующей таблицы в SQLite: добавление столбца, переименование таблицы и столбца, удаление столбца и ограничения ALTER TABLE.
- Внешние ключи и целостность
Внешние ключи FOREIGN KEY связывают таблицы и защищают целостность данных. Важная деталь SQLite: их проверку нужно включать через PRAGMA foreign_keys.
- INSERT, UPDATE, DELETE
4 Связи и соединения
- Моделирование связей: один-ко-многим
Как разбить данные на связанные таблицы: нормализация, связь один-ко-многим и внешний ключ на стороне «многих».
- INNER JOIN и LEFT JOIN
Соединяем таблицы: INNER JOIN берёт только совпавшие строки, LEFT JOIN сохраняет все строки левой таблицы, подставляя NULL при отсутствии пары.
- Подзапросы
Подзапрос — запрос внутри запроса: фильтрация через IN и NOT IN, скалярные подзапросы со сравнением и подзапросы в списке выбора.
- Самосоединение
Самосоединение (self-join) — соединение таблицы с самой собой через псевдонимы. Классический пример: сотрудники и их руководители в одной таблице.
- Моделирование связей: один-ко-многим
5 Агрегация и группировка
- Агрегатные функции
Считаем итоги по множеству строк: COUNT, SUM, AVG, MIN и MAX. Как они сворачивают много строк в одно число и как ведут себя с NULL.
- GROUP BY и HAVING
Группируем строки и считаем итоги по каждой группе через GROUP BY, а затем фильтруем сами группы условием HAVING.
- Встроенные функции, даты и CAST
Полезные встроенные функции SQLite: строковые (LENGTH, SUBSTR, REPLACE, TRIM), работа с датами как текстом (date, strftime) и приведение типов через CAST.
- CASE WHEN и оконные функции
Условные выражения CASE WHEN внутри запроса и оконные функции (RANK, SUM OVER, PARTITION BY), которые SQLite полностью поддерживает.
- Агрегатные функции
6 Практика и возможности
- Индексы и EXPLAIN QUERY PLAN
Зачем нужны индексы, как их создавать через CREATE INDEX и как с помощью EXPLAIN QUERY PLAN увидеть, использует ли запрос индекс или сканирует таблицу целиком.
- Представления (VIEW)
Представление (VIEW) — сохранённый запрос с собственным именем. Как создавать представления, обращаться к ним как к таблицам и зачем они нужны.
- Транзакции: BEGIN, COMMIT, ROLLBACK
Транзакции объединяют несколько операций в одно неделимое целое: либо всё применяется (COMMIT), либо всё отменяется (ROLLBACK). Основа надёжности данных.
- Особенности SQLite и работа из кода
Сильные и слабые стороны SQLite: хранение в файле и его ограничения, когда брать серверную СУБД, работа из Python через модуль sqlite3 и что учить дальше.
- Индексы и EXPLAIN QUERY PLAN