Читать книгу SQL для аналитика. 50 задач с решениями на PostgreSQL - Ар'лан ис'Дрекхэм - Страница 5

Часть 1. Установка. Повторение SQL
Глава 3. Повторяем базовый SQL (CREATE, INSERT, SELECT, UPDATE, DELETE)

Оглавление

Описание задачи

Повторим основные знакомые команды SQL. Для этого создадим таблицу-пример и заполним её данными. Потом попробуем обновить или удалить некоторые записи.

Так мы сможем потренировать и вспомнить основные команды SQL на готовом примере.

Основные SQL-конструкции

Нам понадобятся следующие команды:

– CREATE TABLE – создаёт новую таблицу

– INSERT INTO – добавляет строки


– SELECT – показывает данные

– UPDATE – изменяет данные

– DELETE – удаляет строки


– WHERE – фильтрует строки для SELECT, UPDATE, DELETE (AND и OR – логика)

– LIKE – ищет по шаблону внутри WHERE


Расскажем кратко о каждой команде:

CREATE TABLE имя_таблицы (колонка1 ТИП, колонка2 ТИП)


Создаёт пустую таблицу с заданной структурой.

INSERT INTO имя_таблицы (колонки) VALUES (значения)


Добавляет одну или несколько строк.

SELECT колонки FROM имя_таблицы WHERE условие


Показывает строки, которые подходят под условие. В условиях бывает логика – AND или OR.

UPDATE имя_таблицы SET колонка = значение WHERE условие


Изменяет заданные колонки, где строки подходят под условие.

DELETE FROM имя_таблицы WHERE условие


Удаляет строки из таблицы, подходящие под условие.


WHERE условие

Используется с SELECT, UPDATE, DELETE.

Возможные примеры:

text

SELECT * FROM test_table WHERE city = «Москва»/* выбираем все строки, где город Москва */


text

UPDATE users SET age = age +1 WHERE age> 18 /* обновляем возраст, где он больше 18 */


text

DELETE FROM temp_orders WHERE status IS NULL /* удаляем строки с пустым статусом */


Типичная ошибка

Забыть WHERE в DELETE или UPDATE. Без WHERE удаляются или изменяются ВСЕ строки таблицы. Всегда сначала напишите SELECT с тем же WHERE, чтобы проверить, какие строки попадут под действие.


LIKE «шаблон»/*like*/

Используется внутри WHERE для поиска по тексту.

Символ % заменяет любую последовательность символов (даже пустую).


Примеры:

– WHERE name LIKE «А%' – имена, начинающиеся на А

– WHERE name LIKE '%ов» – имена, заканчивающиеся на «ов».

– WHERE name LIKE '%а%' – имена, содержащие букву «а» в любом месте

– WHERE email LIKE '%@gmail.com' – адреса gmail

– WHERE name LIKE «А__' – имена из трёх букв, начинающиеся на А

Символ _ заменяет ровно один любой символ.


Примеры:

– WHERE name LIKE «А___' – имена из четырёх букв, начинающиеся на А

– WHERE name LIKE '_а%' – имена, где вторая буква «а».


Совет

LIKE чувствителен к регистру. «А%' не найдёт «алексей». Если регистр не важен, используйте ILIKE. Например: WHERE name ILIKE «а%' найдёт и «Алексей», и «алексей».

Основные типы данных в PostgreSQL

– SERIAL – последовательность, заполняется автоматически (1, 2, 3…). Для первичных ключей.

– VARCHAR (n) – строка длиной до n символов.

– TEXT – большой текст, строка без ограничения длины.

– DATE – хранит даты (год-месяц-день, например 2026-01-01).

– TIMESTAMP – хранит и дату, и время.

– BOOLEAN – истина или ложь (true/false).

– DECIMAL (10,2) – число с двумя знаками после запятой. Подходит для денег (например, 11.22, 10.50, 110.00).

SQL-запросы с объяснением

Создаём таблицу.

text

CREATE TABLE IF NOT EXISTS test_users (

user_id SERIAL PRIMARY KEY,

name VARCHAR (50),

city VARCHAR (50),

status VARCHAR (20)

);


Как это работает

– SERIAL – user_id будет заполняться автоматически (1, 2, 3, 4…).

– PRIMARY KEY – уникальный идентификатор каждой строки, не должен быть пустым и не должен дублироваться.

– VARCHAR (50) – имя и город не длиннее 50 символов.

– VARCHAR (20) – статус не длиннее 20 символов.


Вставляем данные.

text

INSERT INTO test_users (name, city, status) VALUES

(«Алексей», «Москва», ’active’),

(«Мария», «Санкт-Петербург», ’active’),

(«Иван», «Казань», ’inactive’),

(«Ольга», «Москва», ’active’);


Как это работает

Каждая строка в скобках – одна запись. Значения перечислены в том же порядке, что и колонки после INTO: в name – «Алексей», в city – «Москва», в status – ’active’.


Теперь посмотрим, что получилось.

text

SELECT * FROM test_users;


Как это работает

Звёздочка означает «все колонки». Без WHERE – показываем все строки.


Отбор с WHERE и LIKE.

Найдём пользователей из Москвы или Казани:

text

SELECT * FROM test_users WHERE city = «Москва» OR city = «Казань»;


Найдём пользователей, у которых имя начинается на «А»:

text

SELECT * FROM test_users WHERE name LIKE «А%»;


Найдём пользователей, у которых имя заканчивается на «я»:

text

SELECT * FROM test_users WHERE name LIKE '%я»;


Редактируем данные.

Сделаем всех пользователей из Москвы активными.

text

UPDATE test_users

SET status = ’active’

WHERE city = «Москва»;


Как это работает

– WHERE city = «Москва» – выбираем строки, где город Москва.

– SET status = ’active’ – меняем статус на active.

Проверим

SELECT * FROM test_users;


Удаляем данные с условием.

Удалим пользователей со статусом inactive.

text

DELETE FROM test_users WHERE status = ’inactive’;


Как это работает

– WHERE status = ’inactive’ – выбираем строки с неактивным статусом.

– DELETE удаляет их.


Снова смотрим результат.

text

SELECT * FROM test_users;

Остались только активные пользователи.

Вопросы и ответы

В: Зачем нам временная таблица test_users?

О: Чтобы не трогать основные таблицы (users, orders) во время тренировки.


В: Что будет, если в DELETE убрать WHERE?

О: Удалятся все строки таблицы. Будьте осторожны.


В: Как удалить саму таблицу?

О: Команда DROP TABLE test_users;


В: Можно ли вставить сразу несколько строк?

О: Да, как в примере выше – несколько строк через запятую.


В: Что делает SERIAL?

О: Автоматически увеличивает значение при каждой вставке. Последовательность. Не нужно указывать user_id руками.


В: Чем VARCHAR отличается от TEXT?

О: VARCHAR (n) ограничивает длину. TEXT может быть любой длины. Для коротких полей (имя, город) лучше VARCHAR.


В: Что значит % и _ в LIKE?

О: % – любая последовательность символов (может быть и пустой). _ – ровно один любой символ.

Что в итоге

Теперь мы создали таблицу, вставили данные, отредактировали, удалили что не нужно и проверили результат. Все эти команды пригодятся в следующих главах.

* Задание со звёздочкой

Создайте таблицу test_employees с колонками: employee_id SERIAL PRIMARY KEY, name VARCHAR (100), department VARCHAR (50), salary NUMERIC.

Вставьте одного сотрудника: «Иван Иванов», отдел «Аналитика», зарплата 100000.

Напишите запрос, который увеличивает зарплату на 10% для всех сотрудников отдела «Аналитика».

SQL для аналитика. 50 задач с решениями на PostgreSQL

Подняться наверх