Помните, как вы были студентами, и готовились к экзаменам по ночам?  Предлагаю вашему вниманию простую шпаргалку по SQL с теорией и практикой, которой вы сможете воспользоваться в любое время. Статья пригодится: ИТ специалисту, которому необходимо быстро освоить минимальный уровень SQL для выполнения рабочих задач, Системному аналитику, которому требуется освежить знания перед собеседованием или научиться, если раньше не было задач с SQL. В статье есть: Минимум теории для задач на работе или собеседовании (прим. операторов в SQL больше, но в своей работе использовала чаще всего эти); Практические задания, которые можно выполнить у себя на ПК бесплатно, предварительно установив сервер баз данных. SQL (structured query language) - язык структурированных запросов, который позволяет работать с данными (найти, изменить, удалить или создать) в реляционной базе данных (БД). Реляционные БД  - это базы, где связанная информация, представленная в виде двумерных таблиц (например, Postgres, Mysql, Oracle и др.).  СУБД - система управления БД, программа с помощью которой можно создавать, наполнять и просматривать БД . ER диаграммы (Entity-Relationship model) - показывает структуру и связи таблиц в БД. Помогает в написании SQL запросов. Для работы мозга студенту нужна энергия. Проще всего ее получить из сладкого. Значит будем учиться на примере базы данных сладостей. Изучать теорию мы с вами будем на реальном примере. Наша БД состоит из таблиц: (прим. показана часть БД с необходимыми таблицами для выполнения практических заданий) Столбец Тип данных Обязательность Описание id integer not null (должно быть значение) Идентификатор вида сладости. PK name character varying not null Вид сладости    Столбец Тип данных Обязательность Описание id integer not null Идентификатор производителя.  PK name character varying not null Производитель phone character varying  Телефон adress character varying  Адрес city character varying not null Населенный пункт country character varying not null Страна    Столбец Тип данных Обязательность Описание id integer not null Идентификатор склада. PK name character varying not null Название склада adress character varying  Адрес city character varying not null Населенный пункт country character varying not null Страна  Столбец Тип данных Обязательность Описание id integer not null Идентификатор связи. PK storehouses_id character varying not null Идентификатор склада. FK manufacturers_id character varying  Идентификатор производителя. FK  Столбец Тип данных Обязательность Описание id integer not null Идентификатор сладости. PK sweets_types_id integer  Идентификатор вида.  FK name character varying not null Название сладости cost character varying not null Стоимость weight character varying not null Вес manufacturer_id integer not null Идентификатор производителя.  FK with_sugar boolean  С сахаром? true - да, false - нет requires_freezing boolean  Требует заморозки? true - да, false - нет production_date date not null Дата изготовления expiration_date date not null Срок годности  В таблице есть: Столбцы (поля), Строки (записи), Ячейки (значение поля), Ограничения поля (constraint): PK (primary key) - первичный ключ, FK (foreign key) - внешний ключ, Тип данных поля. В SQL выделяют основные 4 группы операторов: DDL (Data Definition Language) – работа со структурой БД, DML (Data Manipulation Language) – работы с данными таблиц, DCL (Data Control Language) – работа с правами, TCL (Transaction Control Language) – работа с транзакциями. DML чаще всего спрашивают на собеседовании. DCL/DML нужны в работе системного аналитика. DCL, TCL в моей практике не приходилось пользоваться ни на собеседовании, ни в работе системного аналитика, поэтому в данной статье не будем их рассматривать, так как за ночь нужно выучить или вспомнить то, что действительно могут спросить на собеседовании (экзамене) или пригодиться в работе. А теперь шпаргалки SQL операторов CREATE. Создание таблицы. Имя создаваемой таблицы указано в формате: Имя схемы.Имя таблицы. Например, схема = public, имя таблицы = sweets_types, тогда имя создаваемой таблицы = public.sweets_types Конструкция GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 ) позволяет задать генерацию значения поля id от 1 с увеличением +1. ALTER. Добавление, изменение или удаление столбцов в таблице. Пример SQL запроса, который добавит столбец name_english с типом данных character varying в таблицу sweets_types DROP. Удаление целиком таблицы из БД. TRUNCATE. Удаление всех записей из таблицы.  INSERT. Добавление строки в таблицу. Столбец id в таблице sweets_types является PK и сгенерится автоматом при добавлении, поэтому  в INSERT добавляем значение столбца name UPDATE. Обновление данных строки в таблице. DELETE. Удаление строки из таблицы. SELECT. Просмотр данных из таблицы. Все виды сладостей (идентификатор и имя) Только имена видов сладостей  Ниже приведены операторы условия, группировки, сортировки, объединения и агрегатные функции.  Структура запроса для поиска данных: DISTINCT. Возвращает уникальные значения, без повторений. COUNT. Количество строк (записей). Посчитать количество сладостей, у которых вес равен 300 WHERE. Условие фильтрации записей при выборе данных. Список сладостей, у которых стоимость равна 100 LIKE. Поиск значения по совпадению с выражением в столбце. С оператором LIKE используются два подстановочных знака: % - любое количество символов; _ - один символ. Найти список сладостей, которые начинаются на М. AND, OR, BETWEEN. Оператор «И», «Или», «Между». Список сладостей, у которых стоимость равна 100 и вес равен 100  Список сладостей, у которых стоимость от 100 до 150 Примечание: в выборку попадут сладости, у которых стоимость равно 100 и равна 150. ORDER BY ASC, DESC. Сортировка в порядке возрастания (asc) или убывания (desc). ASC можно не указывать. GROUP BY. Группировка столбцов. HAVING. Используется для фильтрации по условию, когда есть группировка. Найти склады, в которых количество сладостей больше 8   Сначала сгруппируем сладости по складам, а затем через условие HAVING найдем те, у которых количество сладостей больше 8 SUM, MAX, MIN, AVG. Сумма значений, максимальное, минимальное, среднее значение. JOIN или INNER JOIN, LEFT JOIN, RIGHT JOIN. Объединение двух таблиц. JOIN или INNER JOIN -  возвращает записи, имеющие в обеих таблицах   LEFT JOIN - возвращает все записи из левой таблицы и те, которые есть в левой и правой таблице RIGHT JOIN - возвращает все записи из правой таблицы и те, которые есть в правой таблице Подробная работа с JOIN описана в статье.  Для выполнения практических заданий берем базу данных - Postgres и СУБД - pgAdmin. Скачать Postgres и pgAdmin можно по ссылке, Поставить показано в видео по ссылке, Настроить подключение к серверу через pgAdmin описано в статье по ссылке, раздел 2. Запуск В  pgAdmin есть форма создания таблиц: Схемы -> public -> Таблицы -> Создать. Заполните вкладки General, Столбцы.  Для столбцов id в таблицах устанавливаем ограничения   ✅ Таблицы созданы! Наполняем таблицы данными с помощью SQL скрипта. Используем оператор INSERT INTO ... VALUES В pgAdmin заходим в таблицу sweets_types и создаем скрипт Insert: Схемы -> public -> Таблицы -> sweets_types (правая кнопка мыши) -> Scripts -> Insert. Аналогично наполняем данными другие таблицами.   ✅ Таблицы наполнены! Предлагаю вам сначала самим написать SQL запросы, а потом смотреть решение. Так вы научитесь искать данные на практических задачах и закрепите теоретические знания №1. Какие компании производители есть в базе? Выгрузите все столбцы из таблицы manufacturers №2. Найдите все виды сладостей. Примечание: виды сладостей в таблице не повторяются  №3. В каких городах есть склады?  №4. Найти сладости с истекшим срок годности. Подсказка: используйте для условия переменную current_date.  №5. Найти сладости, у которых стоимость от 200 до 300 Так как в условии задачи не сказано нужно ли включать в выборку стоимость равную 200 и равную 300, то запрос SELECT * FROM public.sweets WHERE cost BETWEEN '200' AND '300'; даст включая стоимость 200 и 300, а запрос SELECT * FROM public.sweets WHERE cost>='200' AND cost<'300'; не включит стоимость 300. №6. Найти сладости, у которых название начинается на букву М  №7. Составить список сладостей, отсортированных от А до Я  №8. Найти количество сладостей по каждому виду. В ответе вывести имя вида и количество  №9. Найти виды сладостей, у которых количество больше 2.   №10. Найти производителей, которые есть в более одном городе  №11. В каких городах есть склады со сладостями Мильтик?  №12. Какое максимальное значение идентификатора у сладости?  №13. Какое количество сладостей на каждом складе? Используем LEFT JOIN, чтобы склады с нулевым количеством сладостей попали в выборку ✅ Обучился несложным запросам SQL! Конечно за ночь весь SQL не изучить, но разобраться с необходимым минимум для несложных задач или собеседования вполне реально. Главное - желание учиться! А какие каверзные задачки по SQL задавали вам на собеседовании или встречались в вашей работе?  Solution архитектор