Реляционные БД и основы SQL-запросов (`SELECT`, `INSERT`, `UPDATE`, `DELETE`, `JOIN`)
Вы уже умеете хранить данные в переменных, списках и словарях. Но что, если данных очень много? Например, информация о миллионах пользователей, товарах в интернет-магазине или банковских транзакциях. Хранить всё это в оперативной памяти или в файлах неэффективно, а порой и невозможно. Здесь на помощь приходят базы данных (БД).
Что такое базы данных и зачем они нужны?
База данных — это организованная структура для хранения, управления и быстрого доступа к большим объёмам информации. Представьте огромную картотеку, где каждая карточка — это запись, а все карточки упорядочены по правилам.
БД нужны, потому что они:
- Надёжны: данные не потеряются даже при сбоях системы.
- Быстры: вы мгновенно найдёте нужную информацию.
- Доступны: множество пользователей или программ могут работать с данными одновременно, не мешая друг другу.
- Удобны: легко добавлять, изменять и удалять информацию.
Существует много типов баз данных, но для большинства веб-приложений и корпоративных систем чаще всего используют реляционные базы данных (РБД).
Реляционные базы данных: таблицы и связи
В реляционных БД данные хранятся в таблицах, похожих на таблицы в Excel. Каждая таблица состоит из:
- Строк (записей): каждая строка — это отдельный объект или сущность (например, пользователь, товар).
- Столбцов (полей/атрибутов): каждый столбец содержит определённый тип данных для этой сущности (например, имя пользователя, цена товара).
Каждая таблица имеет первичный ключ (Primary Key, PK) — столбец или набор столбцов, значения которых уникально идентифицируют каждую строку. Это как уникальный ID для каждой записи.
Пример: Таблица
Пользователиможет иметь столбцыid,имя,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 в таблице Заказы.
Практическое задание 🚀
Представьте, что вы работаете с базой данных книжного магазина. У вас есть две таблицы:
-
Авторы:id(первичный ключ, целое число)имя(строка)страна(строка)
-
Книги:id(первичный ключ, целое число)название(строка)год_издания(целое число)автор_id(внешний ключ, ссылается наАвторы.id)
Попробуйте написать SQL-запросы для следующих задач:
- Выбрать все книги, изданные после 2000 года.
- Добавить нового автора: "Анна Петрова", страна "Россия".
- Изменить год издания книги "Война и мир" на 1869 (предположим, что она уже есть в таблице
Книги). - Удалить всех авторов из "США".
- Получить список всех книг с указанием имени автора для каждой книги.
Вы можете использовать онлайн-SQL-песочницы (например, SQL Fiddle или W3Schools SQL Tryit Editor) для практики, создав эти таблицы и вставив в них несколько тестовых данных.
Что дальше?
Мы только что прикоснулись к основам работы с реляционными базами данных и языком SQL. Это фундамент для любого серьёзного приложения. В следующем разделе мы углубимся в работу с одной из самых популярных и мощных реляционных баз данных — PostgreSQL, и научимся подключаться к ней из Python.