Язык запросов SQL 🗄️💾
SQL (читается как «эс-кью-эл») — это специальный язык для работы с базами данных. Представь, что у тебя есть огромная библиотека с миллионами книг, и тебе нужно быстро найти конкретную книгу. SQL помогает компьютерам делать то же самое с информацией! Это один из самых востребованных навыков в IT-индустрии.
Что такое SQL?
SQL расшифровывается как Structured Query Language — «Структурированный язык запросов». Это значит, что мы можем задавать компьютеру вопросы о данных, и он даст нам точные ответы.
💡 Интересный факт: SQL был создан в начале 1970-х годов в IBM двумя учёными — Дональдом Чемберлином и Рэймондом Бойсом. Изначально язык назывался SEQUEL (Structured English Query Language), но из-за торговой марки название сократили до SQL.
SQL — это не язык программирования в классическом понимании. Это язык запросов, предназначенный специально для управления данными в реляционных базах данных. С его помощью можно:
- Создавать и изменять структуру баз данных
- Добавлять, изменять и удалять данные
- Извлекать нужную информацию из огромных объёмов данных
- Управлять правами доступа к данным
- Анализировать и агрегировать информацию
Что такое база данных?
База данных — это организованное хранилище информации. Представь её как Excel на стероидах! Данные хранятся в таблицах, которые состоят из строк (записей) и столбцов (полей).
Пример: База данных школы
| ID |
Имя |
Класс |
Возраст |
Любимый предмет |
| 1 |
Анна |
5А |
11 |
Математика |
| 2 |
Максим |
5Б |
10 |
Физкультура |
| 3 |
София |
5А |
11 |
Рисование |
🔑 Важные понятия:
- Таблица — набор связанных данных (например, список учеников)
- Строка (запись) — одна единица данных (один ученик)
- Столбец (поле) — характеристика данных (имя, возраст и т.д.)
- Первичный ключ (ID) — уникальный идентификатор каждой записи
Основные команды SQL
SQL состоит из различных типов команд. Давай разберём самые важные!
1. SELECT — Выбрать данные
Команда SELECT используется для получения данных из таблицы. Это самая часто используемая команда в SQL!
-- Выбрать все данные из таблицы
SELECT * FROM students;
-- Выбрать конкретные столбцы
SELECT name, age FROM students;
-- Выбрать с условием
SELECT * FROM students
WHERE age > 10;
-- Выбрать учеников из класса 5А
SELECT name, favorite_subject
FROM students
WHERE class = '5А';
Результат:
name | favorite_subject
---------|------------------
Анна | Математика
София | Рисование
2. INSERT — Добавить данные
Команда INSERT добавляет новые записи в таблицу.
-- Добавить нового ученика
INSERT INTO students (name, class, age, favorite_subject)
VALUES ('Дмитрий', '5Б', 11, 'Информатика');
-- Добавить несколько учеников сразу
INSERT INTO students (name, class, age, favorite_subject)
VALUES
('Елена', '5А', 10, 'Литература'),
('Игорь', '5В', 11, 'Физика');
3. UPDATE — Обновить данные
Команда UPDATE изменяет существующие записи.
-- Изменить любимый предмет у Анны
UPDATE students
SET favorite_subject = 'Программирование'
WHERE name = 'Анна';
-- Увеличить возраст всех учеников на 1
UPDATE students
SET age = age + 1;
-- Изменить класс для всех 11-летних
UPDATE students
SET class = '6А'
WHERE age = 11;
⚠️ Осторожно! Если забыть условие WHERE в команде UPDATE, изменятся ВСЕ записи в таблице! Всегда проверяй свои запросы перед выполнением.
4. DELETE — Удалить данные
Команда DELETE удаляет записи из таблицы.
-- Удалить ученика по имени
DELETE FROM students
WHERE name = 'Максим';
-- Удалить всех учеников младше 10 лет
DELETE FROM students
WHERE age < 10;
⚠️ Будь осторожен! DELETE без WHERE удалит ВСЕ данные из таблицы! Это необратимая операция.
Создание таблиц
Прежде чем работать с данными, нужно создать структуру таблицы с помощью команды CREATE TABLE.
Типы данных в SQL
| Тип данных |
Описание |
Пример |
| INT |
Целые числа |
1, 42, -5, 1000 |
| VARCHAR(n) |
Текст переменной длины (до n символов) |
'Привет', 'SQL' |
| DATE |
Дата |
2025-10-29 |
| DECIMAL(m,n) |
Дробные числа |
3.14, 99.99 |
| BOOLEAN |
Логическое значение |
TRUE, FALSE |
| TEXT |
Большой текст |
Длинное описание |
Пример создания таблицы
-- Создать таблицу книг
CREATE TABLE books (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200) NOT NULL,
author VARCHAR(100) NOT NULL,
publication_year INT,
price DECIMAL(10, 2),
in_stock BOOLEAN DEFAULT TRUE
);
-- Создать таблицу игр
CREATE TABLE games (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
genre VARCHAR(50),
rating DECIMAL(3, 1),
release_date DATE,
developer VARCHAR(100)
);
📝 Ключевые слова:
PRIMARY KEY — уникальный идентификатор записи
AUTO_INCREMENT — автоматическое увеличение значения
NOT NULL — поле обязательно для заполнения
DEFAULT — значение по умолчанию
Фильтрация и условия WHERE
Условие WHERE позволяет отфильтровать данные по различным критериям. Это как использовать фильтры при поиске!
Операторы сравнения
-- Равно
SELECT * FROM students WHERE age = 11;
-- Не равно
SELECT * FROM students WHERE class <> '5А';
-- Больше, меньше
SELECT * FROM books WHERE price > 500;
SELECT * FROM books WHERE publication_year < 2020;
-- Больше или равно, меньше или равно
SELECT * FROM games WHERE rating >= 8.0;
Логические операторы
-- AND (И) - оба условия должны быть истинны
SELECT * FROM students
WHERE class = '5А' AND age > 10;
-- OR (ИЛИ) - хотя бы одно условие должно быть истинно
SELECT * FROM students
WHERE favorite_subject = 'Математика' OR favorite_subject = 'Физика';
-- NOT (НЕ) - отрицание
SELECT * FROM books
WHERE NOT in_stock = TRUE;
-- Комбинация условий
SELECT * FROM games
WHERE (genre = 'RPG' OR genre = 'Action')
AND rating >= 8.5;
Специальные операторы
-- BETWEEN (между значениями)
SELECT * FROM books
WHERE price BETWEEN 300 AND 700;
-- IN (входит в список значений)
SELECT * FROM students
WHERE class IN ('5А', '5Б', '5В');
-- LIKE (поиск по шаблону)
SELECT * FROM books
WHERE title LIKE 'Гарри%'; -- Начинается с "Гарри"
SELECT * FROM books
WHERE author LIKE '%Толстой'; -- Заканчивается на "Толстой"
SELECT * FROM games
WHERE name LIKE '%Mario%'; -- Содержит "Mario"
-- IS NULL (проверка на отсутствие значения)
SELECT * FROM students
WHERE favorite_subject IS NULL;
SELECT * FROM books
WHERE publication_year IS NOT NULL;
Сортировка и ограничение результатов
ORDER BY — Сортировка
-- Сортировка по возрасту (по возрастанию)
SELECT * FROM students
ORDER BY age ASC;
-- Сортировка по цене (по убыванию)
SELECT * FROM books
ORDER BY price DESC;
-- Сортировка по нескольким полям
SELECT * FROM students
ORDER BY class ASC, age DESC;
-- Сортировка по рейтингу игр
SELECT name, rating FROM games
ORDER BY rating DESC;
LIMIT — Ограничение количества
-- Выбрать первых 5 учеников
SELECT * FROM students
LIMIT 5;
-- Выбрать 3 самые дорогие книги
SELECT title, price FROM books
ORDER BY price DESC
LIMIT 3;
-- Топ-10 игр по рейтингу
SELECT name, rating FROM games
ORDER BY rating DESC
LIMIT 10;
-- Пропустить первые 5 и взять следующие 10 (пагинация)
SELECT * FROM books
LIMIT 10 OFFSET 5;
Агрегатные функции
Агрегатные функции позволяют выполнять вычисления над группами данных: считать суммы, средние значения, находить максимумы и минимумы.
-- COUNT - посчитать количество записей
SELECT COUNT(*) AS total_students FROM students;
SELECT COUNT(*) FROM students WHERE class = '5А';
-- SUM - сумма значений
SELECT SUM(price) AS total_price FROM books;
-- AVG - среднее значение
SELECT AVG(age) AS average_age FROM students;
SELECT AVG(rating) AS avg_rating FROM games;
-- MAX и MIN - максимальное и минимальное значения
SELECT MAX(price) AS most_expensive FROM books;
SELECT MIN(publication_year) AS oldest_book FROM books;
-- Комбинация функций
SELECT
COUNT(*) AS total_games,
AVG(rating) AS avg_rating,
MAX(rating) AS best_rating
FROM games;
GROUP BY — Группировка
GROUP BY позволяет группировать данные и применять агрегатные функции к каждой группе отдельно.
-- Посчитать количество учеников в каждом классе
SELECT class, COUNT(*) AS student_count
FROM students
GROUP BY class;
-- Средний возраст в каждом классе
SELECT class, AVG(age) AS avg_age
FROM students
GROUP BY class;
-- Количество игр по жанрам
SELECT genre, COUNT(*) AS game_count
FROM games
GROUP BY genre
ORDER BY game_count DESC;
-- Средний рейтинг по жанрам
SELECT genre, AVG(rating) AS avg_rating
FROM games
GROUP BY genre
HAVING AVG(rating) > 8.0;
🔍 HAVING vs WHERE:
WHERE фильтрует строки ДО группировки.
HAVING фильтрует группы ПОСЛЕ группировки.
Объединение таблиц (JOIN)
JOIN позволяет объединять данные из нескольких таблиц. Это одна из самых мощных возможностей SQL!
Пример: База данных библиотеки
-- Создаём таблицу авторов
CREATE TABLE authors (
id INT PRIMARY KEY,
name VARCHAR(100),
country VARCHAR(50)
);
-- Создаём таблицу книг с ссылкой на автора
CREATE TABLE books (
id INT PRIMARY KEY,
title VARCHAR(200),
author_id INT,
year INT,
FOREIGN KEY (author_id) REFERENCES authors(id)
);
INNER JOIN
Возвращает только те записи, для которых есть соответствие в обеих таблицах.
-- Получить список книг с именами авторов
SELECT books.title, authors.name, books.year
FROM books
INNER JOIN authors ON books.author_id = authors.id;
-- С использованием псевдонимов (короче и читабельнее)
SELECT b.title, a.name, a.country, b.year
FROM books AS b
INNER JOIN authors AS a ON b.author_id = a.id
WHERE a.country = 'Россия';
LEFT JOIN
Возвращает все записи из левой таблицы и соответствующие из правой (или NULL, если соответствий нет).
-- Получить всех авторов и их книги (даже если книг нет)
SELECT a.name, b.title
FROM authors AS a
LEFT JOIN books AS b ON a.id = b.author_id;
Практические примеры
Пример 1: База данных зоопарка
-- Создание таблицы
CREATE TABLE zoo_animals (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
species VARCHAR(100),
diet_type VARCHAR(50),
age INT,
habitat VARCHAR(100)
);
-- Добавление данных
INSERT INTO zoo_animals (name, species, diet_type, age, habitat)
VALUES
('Симба', 'Лев', 'Хищник', 5, 'Саванна'),
('Дамбо', 'Слон', 'Травоядный', 12, 'Саванна'),
('Чико', 'Обезьяна', 'Всеядный', 3, 'Джунгли'),
('Белла', 'Панда', 'Травоядный', 7, 'Бамбуковый лес');
-- Найти всех хищников
SELECT name, species FROM zoo_animals
WHERE diet_type = 'Хищник';
-- Найти животных старше 5 лет
SELECT * FROM zoo_animals
WHERE age > 5
ORDER BY age DESC;
-- Посчитать животных по среде обитания
SELECT habitat, COUNT(*) AS animal_count
FROM zoo_animals
GROUP BY habitat;
Пример 2: Игровая коллекция
-- Создание таблицы игр
CREATE TABLE my_games (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(150),
genre VARCHAR(50),
platform VARCHAR(50),
hours_played INT,
completed BOOLEAN
);
-- Добавление игр
INSERT INTO my_games (title, genre, platform, hours_played, completed)
VALUES
('Minecraft', 'Песочница', 'PC', 250, FALSE),
('The Legend of Zelda', 'Adventure', 'Switch', 85, TRUE),
('Fortnite', 'Battle Royale', 'PC', 120, FALSE),
('Super Mario Odyssey', 'Platformer', 'Switch', 45, TRUE);
-- Найти игры, в которые играли больше 100 часов
SELECT title, hours_played FROM my_games
WHERE hours_played > 100
ORDER BY hours_played DESC;
-- Найти все пройденные игры
SELECT title, genre FROM my_games
WHERE completed = TRUE;
-- Посчитать общее время игры по платформам
SELECT platform, SUM(hours_played) AS total_hours
FROM my_games
GROUP BY platform;
Пример 3: Учёт расходов
-- Создание таблицы расходов
CREATE TABLE expenses (
id INT PRIMARY KEY AUTO_INCREMENT,
category VARCHAR(50),
description VARCHAR(200),
amount DECIMAL(10, 2),
expense_date DATE
);
-- Добавление расходов
INSERT INTO expenses (category, description, amount, expense_date)
VALUES
('Еда', 'Обед в школе', 250.00, '2025-10-28'),
('Транспорт', 'Проезд на автобусе', 50.00, '2025-10-28'),
('Развлечения', 'Кино с друзьями', 500.00, '2025-10-29'),
('Книги', 'Учебник по программированию', 800.00, '2025-10-29');
-- Найти все расходы за сегодня
SELECT * FROM expenses
WHERE expense_date = '2025-10-29';
-- Посчитать общие расходы по категориям
SELECT category, SUM(amount) AS total
FROM expenses
GROUP BY category
ORDER BY total DESC;
-- Найти самую дорогую покупку
SELECT description, amount, expense_date
FROM expenses
ORDER BY amount DESC
LIMIT 1;
Плюсы и минусы SQL
Плюсы 😊
- Стандартизированный язык — работает с разными СУБД
- Простой и понятный синтаксис
- Очень быстрая работа с большими объёмами данных
- Высокая востребованность на рынке труда
- Мощные инструменты для анализа данных
- Надёжность и проверенность временем
- Используется везде: от сайтов до банков
Минусы 🤔
- Различия в диалектах разных СУБД
- Сложность при работе со сложными иерархиями
- Может быть медленным без правильной оптимизации
- Требуется понимание структуры данных
- Ограниченные возможности для обработки неструктурированных данных
Популярные системы управления базами данных
| СУБД |
Тип |
Особенности |
| MySQL |
Бесплатная |
Самая популярная, используется в веб-разработке |
| PostgreSQL |
Бесплатная |
Мощная, расширенные возможности, строгие стандарты |
| SQLite |
Бесплатная |
Лёгкая, встраиваемая, для мобильных приложений |
| Microsoft SQL Server |
Коммерческая |
Для Windows-серверов, интеграция с Microsoft |
| Oracle Database |
Коммерческая |
Для крупных предприятий, максимальная надёжность |
💡 Совет для начинающих: Начни с MySQL или SQLite — они бесплатные, имеют отличную документацию и огромное сообщество. SQLite вообще не требует установки сервера!
Упражнения для практики
📝 Задача 1: Музыкальная коллекция
Создай таблицу для хранения твоей музыкальной коллекции с полями: название песни, исполнитель, альбом, год выпуска, длительность. Добавь 10 песен и напиши запросы для:
- Поиска всех песен определённого исполнителя
- Нахождения самой длинной песни
- Подсчёта песен по годам выпуска
📝 Задача 2: Спортивная команда
Создай таблицу с данными о членах спортивной команды: имя, позиция, номер, количество голов, возраст. Напиши запросы для:
- Вывода топ-3 бомбардиров
- Нахождения среднего возраста команды
- Списка всех нападающих
📝 Задача 3: Расписание уроков
Создай таблицу расписания: день недели, номер урока, предмет, учитель, кабинет. Напиши запросы для:
- Вывода расписания на понедельник
- Нахождения всех уроков математики
- Подсчёта количества уроков в каждом кабинете
📝 Задача 4: Интернет-магазин
Создай две таблицы: "Товары" (название, категория, цена, количество) и "Заказы" (номер заказа, ID товара, количество, дата). Напиши запросы с JOIN для:
- Вывода всех заказов с названиями товаров
- Подсчёта общей суммы продаж
- Нахождения самого популярного товара
📝 Задача 5: YouTube-канал
Создай таблицу видео: название, категория, количество просмотров, лайков, дата публикации. Напиши запросы для:
- Топ-5 видео по просмотрам
- Среднего количества лайков по категориям
- Всех видео, опубликованных в этом месяце
Глоссарий терминов
База данных (Database)
Организованная коллекция структурированных данных, хранящихся в компьютерной системе.
СУБД (Система Управления Базами Данных)
Программное обеспечение для создания, управления и работы с базами данных.
Таблица (Table)
Набор связанных данных, организованных в строки и столбцы.
Запись (Row / Record)
Одна строка в таблице, представляющая один элемент данных.
Поле (Column / Field)
Столбец в таблице, определяющий один атрибут данных.
Первичный ключ (Primary Key)
Уникальный идентификатор каждой записи в таблице.
Внешний ключ (Foreign Key)
Поле, которое ссылается на первичный ключ другой таблицы, создавая связь между таблицами.
Запрос (Query)
Команда на языке SQL для извлечения или изменения данных.
Индекс (Index)
Структура данных, ускоряющая поиск и сортировку в таблице.
Транзакция (Transaction)
Последовательность операций с базой данных, выполняемых как единое целое.
NULL
Специальное значение, обозначающее отсутствие данных.
Нормализация
Процесс организации данных для уменьшения избыточности и улучшения целостности.
Где и как изучать SQL
🌐
Онлайн-платформы
SQLBolt, SQLZoo, W3Schools — бесплатные интерактивные курсы с практическими заданиями
💻
Практика
Установи SQLite или MySQL и создавай свои базы данных. Практика — лучший учитель!
📱
Мобильные приложения
SQL Tutorial, Learn SQL — приложения для изучения SQL на смартфоне в любое время
🎮
Игровые платформы
SQL Murder Mystery, SQL Island — изучай SQL через решение интересных задач и головоломок
Почему SQL важен
SQL — это фундаментальный навык для любого, кто работает с данными. Вот почему его стоит изучить:
🔍
Универсальность
SQL используется везде: в интернет-магазинах, социальных сетях, банках, больницах, играх. Практически любое приложение использует базы данных!
💼
Востребованность
Знание SQL требуется для множества профессий: разработчик, аналитик данных, data scientist, администратор баз данных и многих других.
🧠
Логическое мышление
SQL учит структурировать информацию, формулировать точные вопросы и работать с данными эффективно.
⚡
Быстрый старт
Базовые операции SQL можно освоить за несколько дней. Это один из самых доступных языков для начинающих!
Заключение
SQL — это мощный инструмент для работы с данными, который остаётся актуальным уже более 50 лет! Он прост в изучении, но при этом невероятно полезен. Знание SQL открывает двери во многие IT-профессии и помогает лучше понимать, как устроен цифровой мир вокруг нас.
Начни с простых запросов, экспериментируй с данными, создавай свои таблицы и базы данных. С каждым днём ты будешь становиться увереннее, и скоро сможешь работать даже с самыми сложными запросами!
🚀 Следующие шаги: Установи SQLite или MySQL, создай свою первую базу данных и начни практиковаться! Помни: лучший способ научиться SQL — это писать запросы. Чем больше практики, тем лучше результат!