Изучение SQL с нуля самостоятельно
В данной статье мы наметим ориентиры, как можно изучить самостоятельно язык SQL — основной язык извлечения данных из базы данных.
Руководство не содержит справочных данных, вместо этого мы ссылаемся на другие ресурсы.
Основная идея — SQL это навык, а не теоретические знания. Т.е. чтобы эффективно использовать SQL, в первую очередь, необходимо нарабатывать практику запросов, а не проходить обучающие курсы с упором на теорию баз данных.
Что такое SQL?
SQL — это язык извлечения данных из базы данных.
В базе может содержаться множество таблиц, каждая таблица может иметь миллионы строк. SQL позволяет очень быстро извлекать данные из таблиц.
Сама база управляется через специальную программу СУБД (система управления базами данных).
Наиболее популярные СУБД — Oracle, SQL Server, MySQL, PostrgreSQL.
В статье мы будем говорить о SQL Server (СУБД от Microsoft). MS SQL база является основой в рамках веб-платформы Falcon Space.
Зачем изучать SQL?
Практически любая программа обрабатывает данные и хранит их в своей базе данных.
Таким образом в любой системе используется SQL язык (иногда он скрыт за фасадом некоторых оберток, например, ORM-систем).
В нашей платформе Falcon Space мы сделали SQL центральным звеном. Т.е. зная только один SQL можно создавать сложные веб-приложения.
Нет необходимости знать серверные языки типа Java, C#, Python, NodeJS и т.д.
Язык SQL может быть использован не только для разработки, но и для построения аналитических отчетов. Если у вас есть некая система и прямой доступ к базе данных, вы можете делать различные выборки и получать нужные данные из системы.
SQL — одна из ключевых технологий IT, которая используется практически везде.
Что значит «знать SQL»?
В первую очередь, это умение быстро извлекать нужную информацию из базы данных.
Используя арсенал SQL, вы можете строить очень сложные запросы и извлекать информацию из базы в нужном виде:
- сгруппировать по определенному признаку и получить агрегированные данные,
- отфильтровать по сложным критериям,
- собрать данные из разных таблиц и баз данных,
- отсортировать данные в отчете по сложному условию.
Если вы имеете общее представление, как это работает, но не можете на практике извлечь данные из базы, то это ничего не дает в практическом плане.
Начало изучения SQL
Вы можете параллельно выполнять следующие шаги:
1. Изучите текстовый бесплатный курс по SQL Server на Метанит — https://metanit.com/sql/sqlserver/
- общее представление об SQL Server.
- хорошая инструкция по установке SQL Server локально на ваш компьютер
- справочник, к которому потом вы сможете возвращаться для практики
- Во-первых, это раздел Введение в SQL Server
- Во-вторых, позже вам понадобятся некоторые типовые функции, которые есть в этой базе знаний
- В-третьих, раздел по оптимизации запросов даст понимание, как сделать так, чтобы запросы выполнялись быстрее.
3. Найдите одну книгу по теории баз данных. Это необходимо, чтобы понимать как создавать структуры баз данных.
Структура БД — это правильное определение таблиц и связей между ними.
Если база данных спроектирована плохо, то сопровождать такую базу будет непросто, и запросы будут работать неэффективно.
4. Подготовьте рабочее место:
Необходимо установить SQL Server (СУБД) и MS SQL Management Studio (программа для доступа к SQL Server). Установка описана в курсе Метанита.
После установки попробуйте подключиться к локальному серверу SQL и выполнить один простой запрос (например, select 1).
В дальнейшем вся практика будет проходить в MS SQL management Studio.
Практика по SQL — ключевой момент
Установка SQL Server локально:
- https://falconspace.ru/list/sqlserver/ustanovka-ms-sql-server-2019-express-edition—487
- https://falconspace.ru/list/sqlserver/ustanovka-sql-server-management-studio—488
- https://metanit.com/sql/sqlserver/1.2.php
Практика по SQL состоит из 2 частей:
- Создание структуры базы данных,
- Написание запросов.
Создание структуры базы данных
Структура определяется выделением таблиц, определением состава этих таблиц и также связями между таблицами.
Чем больше вы практикуетесь в выделении таблиц для разных предметных областей, тем более точно вы будете это делать в реальных проектах.
Выполняя запросы на вашей базе, вы будете подмечать свои ошибки по структуре данных и с каждым разом больше учитывать неточностей при проектировании структуры базы данных.
Возьмите 10 разных областей, которые вам понятны (работа кинотеатра, ВУЗ, записная книжка, сотрудники завода, социальная сеть, CRM, учет рабочего времени, приложение для молодых родителей, служба такси и т.д.) и создайте для них свои структуры базы данных.
Что важно учитывать при создании структуры базы данных:
- У объектов есть статусы, эти статусы меняются во времени, важно вести лог изменения статусов.
- Некоторые важные изменения в объектах нужно логировать (кто когда какой элемент менял)
- В целом по сущностям полезно хранить данные кто когда создал, обновил или закрыл.
- Таблицы должны учитывать возможность будущего расширения (структура должна быть достаточно гибкой для расширений)
Практика написания запросов
В первую очередь это запрос SELECT. Из-за Join и подзапросов SELECT запросы могут быть бесконечно длинными и сложными.
Начинайте с самых простых и постепенно усложняйте примеры:
- сначала просто select from
- добавьте where
- добавьте join
- добавьте подзапрос в select
- добавьте подзапрос в where
- сортирока
- сложные условия в where
- обработка условий с датами (выборка за последние полгода)
- объединение 2 запросов
- подзапрос в from
- алиасы (в том числе с пробелами)
- группировка
- группировка и having
- группировка по 2 параметрам
- разные агрегирующие функции
Возьмите 1 хорошо проработанную структуру базы данных и создайте для нее по меньшей мере 200 запросов SELECT.
В итоге у вас получится большой список из 2 колонок:
- смысл запроса (на языке обычных людей: «найти наиболее продаваемые товары за квартал», а не «взять из таблицы t1 данные, отсортированные по столбцу x1»)
- сам запрос (работу запроса проверить на практике).
Примечание. Ищите сложные запросы SQL в реальных потребностях. Попробуйте вжиться в предметную область — какие интересные выборки вам могли бы понадобиться? Например, есть приложение для бега — что я хотел бы узнать по своему прогрессу:
- сколько я пробегаю в разрезе месяцев?
- какая у меня средняя скорость?
- в какие дни я бегаю быстрее?
- с кем из партнеров я бегал больше всего?
- в каких локациях сколько и как быстро я пробегал?
- сколько в среднем раз в неделю я бегал и какую среднюю дистанцию за 1 раз.
С запросами update, delete, insert все намного проще. Их дополнительная сложность может возникнуть только в случае использования подзапросов SELECT.
В файле можно занести по 2-3 примера на запросы изменения данных.
Про запросы выборки и обновления данных в базе данных:
Результат практики
В результате практики у вас будет наработано 10 структур баз данных и 200 запросов SELECT различной сложности.
Оформите запросы в файле на Google Docs (в виде таблицы).
Структуры можно изобразить в виде скринов диаграмм SQL для наглядности.
Проделав подобную работу, вы уже имеете на руках некое портфолио по SQL, на которое вы можете ссылаться в реллевантных вакансиях.
Но главный результат выполеннной работы — ваш навык быстро извлекать нужные данные и создавать структуры данных.
Простые запросы вы должны писать практически не задумываясь, и уже тем более не спотыкаясь на синтаксисе или каких-то тактических вопросах.
Написание SQL запросов сродни печати вслепую на клавиатуре — вы просто думаете над смыслом текста, а руки сами что-то пишут.
Заключение
Присылайте ваши наработки нам в телеграм @hecrus (ссылку на ваш гугл диск документ с доступом на комментирование по ссылке), и мы постараемся дать вам обратную связь по неточностям в структуре и запросах.
Дополнительно прикрепляем полезные ресурсы по теме SQL:
- https://www.mssqltips.com/sqlservertip/6818/sql-select-examples/
- https://www.sql-ex.ru/?Lang=0
- https://sql-academy.org/ru/guide
Изучаем SQL с нуля: курсы, книги, полезные ссылки
SQL — необходимый инструмент в работе многих специалистов: разработчиков, маркетологов, тестировщиков, аналитиков и др. Мы сделали подборку с ссылками на полезные ресурсы, которые помогут с нуля изучить SQL, чтобы вы смогли украсить свое резюме этим важным навыком.
Что такое SQL
SQL или Structured Query Language (язык структурированных запросов) — это язык программирования, предназначенный для управления данными в СУБД (система управления базами данных). Все современные СУБД поддерживают SQL.
Где используется SQL
Язык SQL используется в любой программе и на любом сайте, где идет работа с базами данных. SQL — связующее звено, которое обеспечивает взаимодействие приложения или сайта с базой данных и информацией, которая там хранится.
Разработчики используют SQL для обеспечения функциональности приложений, тестировщики — в ручном и автоматическом тестировании. Аналитикам вообще не жить без SQL — это один из основных инструментов в работе. Как и у Data Scientist и Data Analyst!
На языке SQL выражаются все действия, которые можно провести с данными. Что можно делать с помощью SQL:
- создавать таблицы данных;
- получать, изменять и хранить данные;
- выполнять вычисления;
- обеспечивать защиту данных;
- администрировать сервер СУБД.
Если вы планируете работать в IT, без знаний, хотя бы базовых, SQL — не обойтись.
Основные команды SQL, которые нужно знать
Кратко перечислим списком команды SQL, которые рекомендуем изучить в первую очередь, т.к. они являются базой. Можете использовать этот список как чек-лист и контролировать, чему уже обучились, а что еще нужно изучить:
- SELECT
- SELECT DISTINCT
- SHOW DATABASES
- CREATE DATABASE
- DROP DATABASE
- WHERE
- USE
- SOURCE
- SHOW TABLES
- DROP TABLE
- CREATE TABLE
- DESCRIBE
- INSERT
- UPDATE
- DELETE
- GROUP BY
- HAVING
- ORDER BY
- BETWEEN
- LIKE
- IN
- JOIN
- VIEW
Бесплатные курсы по SQL для начинающих
На рынке образования представлено множество курсов, онлайн и офлайн, обучающих работе с SQL, но мы решили выделить именно бесплатные курсы, так как они хорошо подходят для новичков. Вникнув в суть с помощью бесплатных источников, вы сможете дальше самостоятельно решить, нужно ли вам подтянуть знания на платных курсах или вашего уровня вам пока хватает. Кликайте на название курса, чтобы попасть на сайт с подробной информацией.
Чтобы получить доступ к бесплатным видеоурокам, нужно всего лишь зарегистрироваться на сайте. Курс станет отличной базой для начинающего специалиста.
Как утверждает создатель курса, энтузиаст-разработчик во ВКонтакте, «после прохождения вы сможете самостоятельно проектировать базы данных и писать 90% SQL-запросов, требующихся в работе разработчика». Заманчиво!

Это не на 100% бесплатный курс, в открытом доступе только первые три урока, а остальные доступны по подписке. Но подписка стоит 90 рублей в месяц, а это почти даром, так что не могли не добавить этот курс в подборку.

Курс из 8 уроков с практическими заданиями. Сами уроки опубликованы на YouTube, но на сайте программы есть еще и текстовые пояснения + ссылки на полезные источники.

Коротенький курс, который вы сможете освоить за 1,5 часа. Тут выжимка только самых главных понятий и терминов для начинающих погружение в SQL.

Отличный курс, направленный именно на практику создания SQL-запросов. Но и теоретическая база тут тоже дается.

Дополнительные ресурсы для изучения SQL
Помимо курсов, SQL можно изучать по другим открытым материалам. Что предлагаем:
- «Уроки по SQL для начинающих» на канале ГАУС
- «SQL Access для начинающих» на канале Уроки по Microsoft Access
- «Курс SQL, базы данных, Oracle» на канале Prime Soft
- «Видеоуроки по SQL и основам реляционных баз данных на примере библиотеки SQLite» на канале Кирилла Антонова
- «Изучение программирования на SQL» на канале Петра Радько
Заглянуть в книжный магазин
- Изучаем SQL. Алан Бьюли
- SQL. Полное руководство. Джеймс Р. Грофф, Пол Н. Вайнберг, Эндрю Дж. Оппель
- SQL для чайников. Аллен Тейлор
- SQL. Сборник рецептов. Энтони Молинаро
- SQL: Руководство по изучению языка. Крис Фиайли
Обратиться к учебникам
- Интерактивный учебник по SQL
- Учебник HTML Academy
- SQL Учебник
Не забудьте добавить владение SQL в свое резюме после прохождения курса!

А еще у нас есть бесплатный конструктор резюме
с красивыми шаблонами, полезными советами
и импортом из hh
Уроки SQL

Уроки SQL для начинающих / #1 — Что такое SQL? Введение
Язык SQL используется в любой программе и на любом веб сайте, где идет работа с базами данных. В ходе курса вы изучите язык SQL, а также научитесь работать с базами данных на примере MySQL.
Видеоурок
Полезные ссылки:
- Программа XAMPP ;
- Программа OpenServer ;
- Программа MAMP .
Начиная с этого урока мы приступаем к курсу по изучению языка SQL для новичков с нуля. В ходе курса мы не будем изучать SQL на примере какого-либо языка. Мы изучим синтаксис команд языка SQL и научимся прописывать запросы для работы с базами данных.
Информация про SQL
Немного информации про язык. Язык SQL появился еще в 70-х годах, но до сих пор остается мега популярным и востребованным языком. SQL используется для написания всевозможных запросов к базе данных: выборка, обновление, добавление, удаление записей и многое другое.
При создании программы, мобильного приложения или же веб сайта, использующего базы данных, вам с вероятностью практически 100% придется работать с языком SQL.
Так что же такое SQL? SQL это язык запросов к реляционной базе данных ( РСУБД ). На его основе нельзя построить программу или веб сайт, единственную функцию которую он выполняет, это формулирует запрос к БД и на основе запроса производит различные манипуляции внутри БД.
Компании зачастую требуют навыки и знаний языка SQL при трудоустройстве на работу. В ходе видеокурса вы познакомитесь с написанием команд для работы с базой данных и на основе этих команд вы сможете работать с БД используя любой другой язык: Python , C# , C++ , PHP и так далее. Все языки используют различные варианты для подключения к БД, но принцип отправки запросов к БД остаются одинаковыми, так как они пишутся на языке SQL.
SQL используется во множестве реляционных баз данных. Среди таковых можно выделить: MySQL, SQLite, Oracle, PostgreSQL, Microsoft SQL Server и многие многие другие.
Роль SQL в проектах
Sql выполняет роль посредника, между базами данных и проектом. Рассмотрим работу SQL на реально примере. Предположим, что у вас есть веб программа, написанная на PHP или Python . Также у вас есть база данных, к примеру MySQL, хотя на самом деле не важно какая БД у вас будет. Чтобы соединить обе технологии между собой нужен язык, понимающий как первую, так и вторую часть вышеуказанной логики. Таким языком является SQL. В нем вы записываете команду, при чем эта команда будет одинаковой что для PHP, что для Python, что для других языков программирования. После выполнения команды вы сможете получить данные из БД, записать данные или проделать другие манипуляции.
Информация про курс
В курсе «Уроки SQL для чайников с нуля » мы установим локальный сервер, а также запустим PhpMyAdmin. Это специальная программа, имеющая графический интерфейс для работы с базой данных MySQL. Внутри программы мы будем записывать все SQL команды, создавая таблицы и базы данных, а также работая с записями внутри них. Подобных программ существуют тысячи, но мы выбрали PhpMyAdmin, так как постоянно с ней работаем, плюс она имеет красивый интерфейс и идеально подходит под наши нужды.
SQL не сложный язык и его будет легко изучить даже чайникам в сфере программирования. За курс мы изучим основы SQL и доберемся до более сложных концепций SQL запросов.
Видео по работе с графическим интерфейсом PhpMyAdmin можно посмотреть ниже:
Вы можете выбрать другую программу, если хотите, синтаксис языка SQL отличаться не будет.
Задание к уроку
Выполните установку локального сервера и запустите графический редактор PhpMyAdmin.
Как изучить SQL за ночь или шпаргалка для системного аналитика
Помните, как вы были студентами, и готовились к экзаменам по ночам?
Предлагаю вашему вниманию простую шпаргалку по SQL с теорией и практикой, которой вы сможете воспользоваться в любое время.

Статья пригодится:
- ИТ специалисту, которому необходимо быстро освоить минимальный уровень SQL для выполнения рабочих задач,
- Системному аналитику, которому требуется освежить знания перед собеседованием или научиться, если раньше не было задач с SQL.
В статье есть:
- Минимум теории для задач на работе или собеседовании (прим.операторов в SQL больше, но в своей работе использовала чаще всего эти);
- Практические задания, которые можно выполнить у себя на ПК бесплатно, предварительно установив сервер баз данных.
SQL теория
SQL (structured query language) — язык структурированных запросов, который позволяет работать с данными (найти, изменить, удалить или создать) в реляционной базе данных (БД).
Реляционные БД — это базы, где связанная информация, представленная в виде двумерных таблиц (например, Postgres, Mysql, Oracle и др.).
СУБД — система управления БД, программа с помощью которой можно создавать, наполнять и просматривать БД .
ER диаграммы (Entity-Relationship model) — показывает структуру и связи таблиц в БД. Помогает в написании SQL запросов.
Для работы мозга студенту нужна энергия. Проще всего ее получить из сладкого. Значит будем учиться на примере базы данных сладостей. Изучать теорию мы с вами будем на реальном примере.
Наша БД состоит из таблиц:

(прим. показана часть БД с необходимыми таблицами для выполнения практических заданий)
sweets_types — виды сладостей
Столбец
Тип данных
Обязательность
Описание
not null (должно быть значение)
Идентификатор вида сладости.
manufacturers — производители
Столбец
Тип данных
Обязательность
Описание
storehouses — склады
Столбец
Тип данных
Обязательность
Описание
manufacturers_storehouses — связь производителя со складом
Столбец
Тип данных
Обязательность
Описание
sweets — сладости
Столбец
Тип данных
Обязательность
Описание
true — да, false — нет
true — да, false — нет

- Столбцы (поля),
- Строки (записи),
- Ячейки (значение поля),
- Ограничения поля (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 операторов
Работа со структурой БД (DDL)
CREATE. Создание таблицы.
CREATE TABLE public.sweets_types ( id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 ), name character varying NOT NULL, PRIMARY KEY (id)
Имя создаваемой таблицы указано в формате:
Имя схемы.Имя таблицы .
Например, схема = 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
ALTER TABLE IF EXISTS public.sweets_types ADD COLUMN name_english character varying;
DROP. Удаление целиком таблицы из БД.
DROP TABLE public.sweets_types;
TRUNCATE. Удаление всех записей из таблицы.
TRUNCATE TABLE public.sweets_types;
Работа с данными таблиц (DML)
INSERT. Добавление строки в таблицу.
INSERT INTO public.sweets_types(name) VALUES ('вафли'), ('конфеты');
Столбец id в таблице sweets_types является PK и сгенерится автоматом при добавлении, поэтому в INSERT добавляем значение столбца name
UPDATE. Обновление данных строки в таблице.
UPDATE public.sweets_types SET name = 'вафли новые' WHERE >DELETE. Удаление строки из таблицы.
DELETE FROM public.sweets_types WHERE name = 'вафли';
SELECT. Просмотр данных из таблицы.
Все виды сладостей (идентификатор и имя)
SELECT * FROM public.sweets_types;
Только имена видов сладостей
SELECT name FROM public.sweets_types;
Другие операторы, которые можно использовать с DML (работа с данными)
Ниже приведены операторы условия, группировки, сортировки, объединения и агрегатные функции.
Структура запроса для поиска данных:
SELECT 'что' FROM 'из какой таблицы' JOIN 'с другой таблицей' WHERE 'условие' ORDER BY 'сортировка'
SELECT 'что' FROM 'из какой таблицы' JOIN 'с другой таблицей' GROUP BY 'группировка' HAVING 'условие'
DISTINCT. Возвращает уникальные значения, без повторений.
SELECT DISTINCT city FROM public.storehouses
COUNT. Количество строк (записей).
Посчитать количество сладостей, у которых вес равен 300
SELECT COUNT(id) FROM public.sweets WHERE weight = '300';
WHERE. Условие фильтрации записей при выборе данных.
Список сладостей, у которых стоимость равна 100
SELECT name FROM public.sweets WHERE cost = '100';
LIKE. Поиск значения по совпадению с выражением в столбце.
С оператором LIKE используются два подстановочных знака:
- % — любое количество символов;
- _ — один символ.
Найти список сладостей, которые начинаются на М.
SELECT * FROM public.sweets WHERE name LIKE 'М%';
AND, OR, BETWEEN. Оператор «И», «Или», «Между».
Список сладостей, у которых стоимость равна 100 и вес равен 100
SELECT name FROM public.sweets WHERE cost = '100' AND weight = '100';
Список сладостей, у которых стоимость от 100 до 150
SELECT name FROM public.sweets WHERE cost BETWEEN '100' AND '150';
Примечание: в выборку попадут сладости, у которых стоимость равно 100 и равна 150.
ORDER BY ASC, DESC. Сортировка в порядке возрастания (asc) или убывания (desc).
ASC можно не указывать.
SELECT * FROM public.sweets ORDER BY name DESC;
GROUP BY. Группировка столбцов.
SELECT sweets_types_id FROM public.sweets GROUP BY sweets_types_id;
HAVING. Используется для фильтрации по условию, когда есть группировка.
Найти склады, в которых количество сладостей больше 8
SELECT s.name FROM public.storehouses s LEFT JOIN public.manufacturers_storehouses ms ON s.id = ms.storehouses_id LEFT JOIN public.sweets sw ON sw.manufacturer_id = ms.manufacturers_id GROUP BY s.name HAVING COUNT (sw.id) > 8;
Сначала сгруппируем сладости по складам, а затем через условие HAVING найдем те, у которых количество сладостей больше 8
SUM, MAX, MIN, AVG. Сумма значений, максимальное, минимальное, среднее значение.
SELECT SUM(id) FROM public.sweets; SELECT MAX(id) FROM public.sweets; SELECT MIN(id) FROM public.sweets; SELECT AVG(id) FROM public.sweets;
JOIN или INNER JOIN, LEFT JOIN, RIGHT JOIN. Объединение двух таблиц.
- JOIN или INNER JOIN — возвращает записи, имеющие в обеих таблицах
- LEFT JOIN — возвращает все записи из левой таблицы и те, которые есть в левой и правой таблице
- RIGHT JOIN — возвращает все записи из правой таблицы и те, которые есть в правой таблице
Подробная работа с JOIN описана в статье.
SELECT * FROM public.sweets s JOIN public.sweets_types st ON s.sweets_types_id = st.id WHERE st.name = 'шоколад';
SQL практика
Шаг 1. Установить инструменты для работы
Для выполнения практических заданий берем базу данных — Postgres и СУБД — pgAdmin.
- Скачать Postgres и pgAdmin можно по ссылке,
- Поставить показано в видео по ссылке,
- Настроить подключение к серверу через pgAdmin описано в статье по ссылке, раздел 2. Запуск
ШАГ 2. Создаем таблицы в БД
В pgAdmin есть форма создания таблиц: Схемы -> public -> Таблицы -> Создать.
Заполните вкладки General, Столбцы.
Посмотреть картинки как это сделать в pgAdmin

Для столбцов id в таблицах устанавливаем ограничения

Скрипт SQL на создание таблиц в БД
CREATE TABLE public.sweets_types ( id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 ), name character varying NOT NULL, PRIMARY KEY (id) ); ALTER TABLE IF EXISTS public.sweets_types OWNER to postgres; COMMENT ON TABLE public.sweets_types IS 'Виды сладостей'; CREATE TABLE public.sweets ( id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 ), sweets_types_id integer, name character varying NOT NULL, cost character varying NOT NULL, weight character varying NOT NULL, manufacturer_id integer NOT NULL, with_sugar boolean, requires_freezing boolean, production_date date NOT NULL, expiration_date date NOT NULL, PRIMARY KEY (id) ); ALTER TABLE IF EXISTS public.sweets OWNER to postgres; COMMENT ON TABLE public.sweets IS 'Записи о сладостях'; CREATE TABLE public.manufacturers_storehouses ( id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 ), storehouses_id integer NOT NULL, manufacturers_id integer NOT NULL, PRIMARY KEY (id) ) TABLESPACE pg_default; ALTER TABLE IF EXISTS public.manufacturers_storehouses OWNER to postgres; COMMENT ON TABLE public.manufacturers_storehouses IS 'Связь компании производителя и склада'; CREATE TABLE public.manufacturers ( id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 ), name character varying NOT NULL, phone character varying, adress character varying, city character varying NOT NULL, country character varying NOT NULL, PRIMARY KEY (id) ); ALTER TABLE IF EXISTS public.manufacturers OWNER to postgres; COMMENT ON TABLE public.manufacturers IS 'Компании производители'; CREATE TABLE public.storehouses ( id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 ), name character varying NOT NULL, adress character varying, city character varying NOT NULL, country character varying NOT NULL, PRIMARY KEY (id) ); ALTER TABLE IF EXISTS public.storehouses OWNER to postgres; COMMENT ON TABLE public.storehouses IS 'Склады';
ШАГ 3. Добавляем записи в БД
Наполняем таблицы данными с помощью SQL скрипта. Используем оператор INSERT INTO . VALUES
В pgAdmin заходим в таблицу sweets_types и создаем скрипт Insert: Схемы -> public -> Таблицы -> sweets_types (правая кнопка мыши) -> Scripts -> Insert.
Аналогично наполняем данными другие таблицами.
Посмотреть картинки как это сделать в pgAdmin

Скрипт SQL на наполнение данными таблиц
INSERT INTO public.sweets_types( name) VALUES ('вафли'), ('конфеты'), ('мармелад'), ('печенье'), ('шоколад'); INSERT INTO public.storehouses( name, adress, city, country) VALUES ('MSK-1', '109235, г. Москва, Проектируемый проезд 4386, д.8', 'Moscow', 'Russia'), ('SPB-1', '197375, г. Санкт-Петербург, Суздальское шоссе, д. 26', 'Saint-petersburg', 'Russia'), ('EKB-1', '620137, г. Екатеринбург, Шефская улица, д. 1А', 'Ekaterinburg', 'Russia'), ('EKB-2', '620137, г. Екатеринбург, Шефская улица, д. 2А', 'Ekaterinburg', 'Russia'); INSERT INTO public.manufacturers( name, phone, adress, city, country) VALUES ('Мишаня', '', '109235, г. Москва, Проектируемый проезд, д.15', 'Moscow', 'Russia'), ('Собакен', '78125748899', '197375, г. Санкт-Петербург, Суздальское шоссе, д. 75', 'Saint-petersburg', 'Russia'), ('Мартыха', '74657896525', '620137, г. Екатеринбург, Шефская улица, д. 5А', 'Ekaterinburg', 'Russia'), ('Мишаня', '', '109235, г. Казань, Проектируемая улица, д.15', 'Kazan', 'Russia'); INSERT INTO public.manufacturers_storehouses( storehouses_id, manufacturers_id) VALUES (1, 1), (2, 2), (3, 3), (1, 2), (2, 1); INSERT INTO public.sweets( sweets_types_id, name, cost, weight, manufacturer_id, with_sugar, requires_freezing, production_date, expiration_date) VALUES (1, 'Мильтик', '100', '200',1, false, false, '2022-05-03', '2022-05-15'), (2, 'Микус', '150', '300', 1 , true, true, '2022-04-03', '2022-05-03'), (3, 'Миви', '110', '100', 1 , true, false, '2022-03-03', '2022-04-14'), (4, 'Ми', '120', '200', 1, false, true, '2022-03-04', '2022-04-04'), (5, 'Миса', '145', '570', 1, true, false, '2021-03-03', '2021-12-03'), (1, 'Сольтик', '115', '200', 2 , false, false, '2022-05-03', '2022-05-15'), (2, 'Сокус', '155', '300', 2 , true, true, '2022-03-03', '2022-05-03'), (3, 'Сови', '117', '500', 2 , true, false, '2022-03-03', '2022-04-14'), (4, 'Со', '129', '250', 2, false, true, '2022-03-04', '2022-04-04'), (5, 'Сор', '148', '500', 2, true, false, '2021-02-03', '2021-12-03'), (1, 'Мальтик', '210', '200', 3 , false, false, '2022-05-03', '2022-05-15'), (2, 'Макус', '350', '300', 3 , true, true, '2022-01-03', '2022-05-03');
ШАГ 4. Отрабатываем поиск данных
Предлагаю вам сначала самим написать SQL запросы, а потом смотреть решение. Так вы научитесь искать данные на практических задачах и закрепите теоретические знания

№1. Какие компании производители есть в базе?
SELECT * FROM manufacturers;
Выгрузите все столбцы из таблицы manufacturers
№2. Найдите все виды сладостей.
Примечание: виды сладостей в таблице не повторяются
SELECT name FROM public.sweets_types;
№3. В каких городах есть склады?
SELECT DISTINCT city FROM storehouses;
№4. Найти сладости с истекшим срок годности.
Подсказка: используйте для условия переменную current_date.
SELECT name FROM public.sweets WHERE expiration_date
№5. Найти сладости, у которых стоимость от 200 до 300
SELECT * FROM public.sweets WHERE cost>='200' AND cost
Так как в условии задачи не сказано нужно ли включать в выборку стоимость равную 200 и равную 300, то запрос SELECT * FROM public.sweets WHERE cost BETWEEN '200' AND '300'; даст включая стоимость 200 и 300, а запрос SELECT * FROM public.sweets WHERE cost>='200' AND cost
№6. Найти сладости, у которых название начинается на букву М
SELECT * FROM public.sweets WHERE name LIKE 'М%';
№7. Составить список сладостей, отсортированных от А до Я
SELECT * FROM public.sweets ORDER BY name
№8. Найти количество сладостей по каждому виду. В ответе вывести имя вида и количество
SELECT COUNT (s.id), st.name FROM public.sweets s JOIN public.sweets_types st ON s.sweets_types_id = st.id GROUP BY st.name;
№9. Найти виды сладостей, у которых количество больше 2.
SELECT st.name FROM public.sweets s JOIN public.sweets_types st ON s.sweets_types_id = st.id GROUP BY st.name HAVING COUNT (s.id) > 2;
№10. Найти производителей, которые есть в более одном городе
Решение №10
SELECT name FROM public.manufacturers GROUP BY name HAVING COUNT (city) > 1;
№11. В каких городах есть склады со сладостями Мильтик?
Решение №11
SELECT DISTINCT s.city FROM public.storehouses s JOIN public.manufacturers_storehouses ms ON s.id = ms.storehouses_id JOIN public.sweets sw ON sw.manufacturer_id = ms.manufacturers_id WHERE sw.name = 'Мильтик';
№12. Какое максимальное значение идентификатора у сладости?
Решение №12
SELECT MAX(id) FROM public.sweets;
№13. Какое количество сладостей на каждом складе?
Решение №13
SELECT s.name, COUNT (sw.id) FROM public.storehouses s LEFT JOIN public.manufacturers_storehouses ms ON s.id = ms.storehouses_id LEFT JOIN public.sweets sw ON sw.manufacturer_id = ms.manufacturers_id GROUP BY s.name;
Используем LEFT JOIN , чтобы склады с нулевым количеством сладостей попали в выборку
✅ Обучился несложным запросам SQL!
Конечно за ночь весь SQL не изучить, но разобраться с необходимым минимум для несложных задач или собеседования вполне реально. Главное - желание учиться!
А какие каверзные задачки по SQL задавали вам на собеседовании или встречались в вашей работе?
