Реляционные БД и основы SQL-запросов (`SELECT`, `INSERT`, `UPDATE`, `DELETE`, `JOIN`) - Python с нуля до Junior: Путь к первой работе в IT - Qpel.AI

Реляционные БД и основы 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.