Реляционные БД и основы SQL-запросов (`SELECT`, `INSERT`, `UPDATE`, `DELETE`, `JOIN`)

Вы уже умеете хранить данные в переменных, списках и словарях. Но что, если данных очень много? Например, информация о миллионах пользователей, товарах в интернет-магазине или банковских транзакциях. Хранить всё это в оперативной памяти или в файлах неэффективно, а порой и невозможно. Здесь на помощь приходят базы данных (БД).

Что такое базы данных и зачем они нужны?

База данных — это организованная структура для хранения, управления и быстрого доступа к большим объёмам информации. Представьте огромную картотеку, где каждая карточка — это запись, а все карточки упорядочены по правилам.

БД нужны, потому что они:

  • Надёжны: данные не потеряются даже при сбоях системы.
  • Быстры: вы мгновенно найдёте нужную информацию.
  • Доступны: множество пользователей или программ могут работать с данными одновременно, не мешая друг другу.
  • Удобны: легко добавлять, изменять и удалять информацию.

Существует много типов баз данных, но для большинства веб-приложений и корпоративных систем чаще всего используют реляционные базы данных (РБД).

Реляционные базы данных: таблицы и связи

В реляционных БД данные хранятся в таблицах, похожих на таблицы в Excel. Каждая таблица состоит из:

  • Строк (записей): каждая строка — это отдельный объект или сущность (например, пользователь, товар).
  • Столбцов (полей/атрибутов): каждый столбец содержит определённый тип данных для этой сущности (например, имя пользователя, цена товара).

Каждая таблица имеет первичный ключ (Primary Key, PK) — столбец или набор столбцов, значения которых уникально идентифицируют каждую строку. Это как уникальный ID для каждой записи.

Пример: Таблица Пользователи может иметь столбцы id, имя, email. Столбец id будет первичным ключом.

Связи между таблицами: РБД позволяют связывать таблицы между собой. Это делают с помощью внешних ключей (Foreign Key, FK). Внешний ключ в одной таблице ссылается на первичный ключ в другой таблице.

Пример: У нас есть таблица Заказы и таблица Пользователи. В таблице Заказы может быть столбец user_id, который является внешним ключом и ссылается на id в таблице Пользователи. Это позволяет узнать, какой пользователь сделал конкретный заказ.

SQL: язык для работы с базами данных

Для взаимодействия с реляционными базами данных используют специальный язык — SQL (Structured Query Language, язык структурированных запросов). SQL позволяет:

  • Создавать и изменять структуру баз данных (таблицы, индексы).
  • Вставлять, обновлять, удалять данные.
  • Выбирать данные по заданным условиям.

Давайте рассмотрим основные команды SQL, которые вы будете использовать чаще всего.

1. SELECT — выборка данных

Это самая частая команда. Она извлекает данные из одной или нескольких таблиц.

-- Выбрать все столбцы из таблицы "Пользователи"
SELECT * FROM Пользователи;

-- Выбрать только столбцы "имя" и "email" из таблицы "Пользователи"
SELECT имя, email FROM Пользователи;

-- Выбрать пользователей, у которых возраст больше 25
SELECT * FROM Пользователи WHERE возраст > 25;

-- Выбрать пользователей, отсортированных по имени в алфавитном порядке
SELECT * FROM Пользователи ORDER BY имя ASC; -- ASC - по возрастанию, DESC - по убыванию

2. INSERT — добавление данных

Эта команда добавляет новые строки (записи) в таблицу.

-- Добавить нового пользователя
INSERT INTO Пользователи (имя, email, возраст) VALUES ('Иван', 'ivan@example.com', 30);

-- Добавить пользователя, указывая значения для всех столбцов (порядок должен совпадать)
INSERT INTO Пользователи VALUES (2, 'Мария', 'maria@example.com', 25);

3. UPDATE — изменение данных

Используется для изменения существующих данных в таблице.

-- Изменить email пользователя с id = 1
UPDATE Пользователи SET email = 'new_ivan@example.com' WHERE id = 1;

-- Увеличить возраст всех пользователей на 1 год
UPDATE Пользователи SET возраст = возраст + 1;

Внимание! Всегда используйте WHERE с UPDATE и DELETE, если не хотите изменить или удалить все записи в таблице!

4. DELETE — удаление данных

Эта команда удаляет строки из таблицы.

-- Удалить пользователя с id = 1
DELETE FROM Пользователи WHERE id = 1;

-- Удалить всех пользователей, у которых возраст меньше 18
DELETE FROM Пользователи WHERE возраст < 18;

5. JOIN — объединение (деятельность организации запрещена на территории РФ) данных из нескольких таблиц

JOIN объединяет строки из двух или более таблиц на основе связанных столбцов. Это мощный инструмент для получения полной картины данных.

Самый распространённый тип — INNER JOIN, который возвращает только те строки, для которых есть совпадения в обеих таблицах.

-- Пример: Получить имя пользователя и название заказа, который он сделал
-- Таблица Пользователи: id, имя
-- Таблица Заказы: id, user_id, название_заказа

SELECT
    Пользователи.имя,
    Заказы.название_заказа
FROM
    Пользователи
INNER JOIN
    Заказы ON Пользователи.id = Заказы.user_id;

Здесь мы связываем таблицу Пользователи с таблицей Заказы по условию, что id пользователя в таблице Пользователи совпадает с user_id в таблице Заказы.

Практическое задание 🚀

Представьте, что вы работаете с базой данных книжного магазина. У вас есть две таблицы:

  1. Авторы:

    • id (первичный ключ, целое число)
    • имя (строка)
    • страна (строка)
  2. Книги:

    • id (первичный ключ, целое число)
    • название (строка)
    • год_издания (целое число)
    • автор_id (внешний ключ, ссылается на Авторы.id)

Попробуйте написать SQL-запросы для следующих задач:

  1. Выбрать все книги, изданные после 2000 года.
  2. Добавить нового автора: "Анна Петрова", страна "Россия".
  3. Изменить год издания книги "Война и мир" на 1869 (предположим, что она уже есть в таблице Книги).
  4. Удалить всех авторов из "США".
  5. Получить список всех книг с указанием имени автора для каждой книги.

Вы можете использовать онлайн-SQL-песочницы (например, SQL Fiddle или W3Schools SQL Tryit Editor) для практики, создав эти таблицы и вставив в них несколько тестовых данных.

Что дальше?

Мы только что прикоснулись к основам работы с реляционными базами данных и языком SQL. Это фундамент для любого серьёзного приложения. В следующем разделе мы углубимся в работу с одной из самых популярных и мощных реляционных баз данных — PostgreSQL, и научимся подключаться к ней из Python.

Понравился урок?

Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей

Продолжить в Telegram