🧠 Как не потерять интерес к SQL (если учишь сам)
Учить SQL — просто, но легко заскучать🙂. Вот как держать фокус:
1️⃣ Реальные данные — пиши запросы к таблицам с фильмами, заказами или играми. Учись на том, что интересно.
2️⃣ Своя база — попробуй сделать мини-ERP: товары, клиенты, заказы. И JOIN-ы сразу станут осмысленными.
3️⃣ Мини-задачи — решай 1 SQL-задачу в день: sqlbolt.com, LeetCode, Mode.
4️⃣ Связь с кодом — попробуй писать SQL-запросы в Go или Python. Реальный эффект = реальный интерес.
5️⃣ Маленькие шаги — 20 минут в день лучше попытки "проглотить всё за выходные".
🔥 SQL — это не только слово "SELECT", это умение говорить с базами данных. А базы — везде.
Учить SQL — просто, но легко заскучать🙂. Вот как держать фокус:
1️⃣ Реальные данные — пиши запросы к таблицам с фильмами, заказами или играми. Учись на том, что интересно.
2️⃣ Своя база — попробуй сделать мини-ERP: товары, клиенты, заказы. И JOIN-ы сразу станут осмысленными.
3️⃣ Мини-задачи — решай 1 SQL-задачу в день: sqlbolt.com, LeetCode, Mode.
4️⃣ Связь с кодом — попробуй писать SQL-запросы в Go или Python. Реальный эффект = реальный интерес.
5️⃣ Маленькие шаги — 20 минут в день лучше попытки "проглотить всё за выходные".
🔥 SQL — это не только слово "SELECT", это умение говорить с базами данных. А базы — везде.
❤17👍2🫡1
Всем отличного понедельника!
Есть таблица клиентов CLIENTS:
ID DATE_CREATE NAME
1 15.01.2024 ИП Иванов
2 27.01.2024 АО Вагон
3 04.02.2024 ИП Крупицкая
...
99 19.06.2025 АО Фонтанка
Требуется написать SQL-запрос, выводящий месяца за 2024 год, в которые было заведено более 10 клиентов (DATE_CREATE = дата заведения). В отчёте отобразить номер или название месяца и количество заведённых клиентов. Результат отсортироваить по убыванию. Вначале отобразить месяца, в которых заведено больше всего клиентов.
Задачу можно решить любым способом. Один из вариантов решения задачи опубликую чуть позже, сначала буду ждать работу от Вас 🤗
Есть таблица клиентов CLIENTS:
ID DATE_CREATE NAME
1 15.01.2024 ИП Иванов
2 27.01.2024 АО Вагон
3 04.02.2024 ИП Крупицкая
...
99 19.06.2025 АО Фонтанка
Требуется написать SQL-запрос, выводящий месяца за 2024 год, в которые было заведено более 10 клиентов (DATE_CREATE = дата заведения). В отчёте отобразить номер или название месяца и количество заведённых клиентов. Результат отсортироваить по убыванию. Вначале отобразить месяца, в которых заведено больше всего клиентов.
Задачу можно решить любым способом. Один из вариантов решения задачи опубликую чуть позже, сначала буду ждать работу от Вас 🤗
👍4
Спасибо всем за активное участие!
Очень рад Вашим решениям!
Для того, чтобы отобразить месяца 2024 года, в которых заведено более 10ти клиентов, для начала просто отберём клиентов, заведённых именно в 2024 году:
SELECT *
FROM CLIENTS
WHERE DATE_CREATE >= DATE '2024-01-01'
AND DATE_CREATE < DATE '2025-01-01'
Было бы неплохо, если бы на столбце DATE_CREATE был индекс.
Мы получили всех клиентов, которых завели в 2024ом году. Выводя клиентов, выведем и ещё один столбец, в который будем извлекать номер месяца из даты заведения клиента (для того, чтобы позже клиентов группировать по одинаковому номеру месяца). Новому столбцу дадим алиас "MM". Наш запрос получит вид:
SELECT CLIENTS. *,
EXTRACT(MONTH FROM DATE_CREATE) MM
FROM CLIENTS
WHERE DATE_CREATE >= DATE '2024-01-01'
AND DATE_CREATE < DATE '2025-01-01'
В запросе выше мы вывели все имеющиеся столбцы из таблицы CLIENTS и добавили ещё один новый, в него мы получили месяц заведения клиента. У некоторых клиентов месяц заведения одинаковый, сгруппируем строки по одинаковом получаемому месяцу заведения клиента, подсчитав сколько в каждую группу сгруппировалось строк:
SELECT
EXTRACT(MONTH FROM DATE_CREATE) MM, COUNT(*) CLIENTS_COUNT
FROM CLIENTS
WHERE DATE_CREATE >= DATE '2024-01-01'
AND DATE_CREATE < DATE '2025-01-01'
GROUP BY EXTRACT(MONTH FROM DATE_CREATE)
В результате получим таблицу вида:
MM CLIENTS_COUNT
1 5
2 7
3 12
...
Сгруппировав клиентов 2024 года по месяцу заведения и подсчитав сколько клиентов заведено в каждом месяце, используя HAVING теперь оставим тех, где подсчитанное количество больше 10:
SELECT
EXTRACT(MONTH FROM DATE_CREATE) MM, COUNT(*) CLIENTS_COUNT
FROM CLIENTS
WHERE DATE_CREATE >= DATE '2024-01-01'
AND DATE_CREATE < DATE '2025-01-01'
GROUP BY EXTRACT(MONTH FROM DATE_CREATE)
HAVING COUNT(*) > 10
Обратите внимание, что в HAVING-е недопустимо для большинства СУБД (да и по ANSI стандарту тоже) использовать алиас (новое имя) столбца, ведь столбец с данными ещё не создан. Но в HAVING-е можно использовать такой же расчёт количества, что и в SELECT-е. В итоге и получилось не:
HAVING CLIENTS_COUNT > 10
а:
HAVING COUNT(*) > 10
Осталось добавить упорядочивание месяцов по количеству заведенных в них клиентов. Месяца с наибольшим количеством заведённых клиентов должны отображаться сверху. А вот в сортировке можно использовать алиасы столбцов. Конечный вариант нашего запроса:
SELECT
EXTRACT(MONTH FROM DATE_CREATE) MM, COUNT(*) CLIENTS_COUNT
FROM CLIENTS
WHERE DATE_CREATE >= DATE '2024-01-01'
AND DATE_CREATE < DATE '2025-01-01'
GROUP BY EXTRACT(MONTH FROM DATE_CREATE)
HAVING COUNT(*) > 10
ORDER BY CLIENTS_COUNT DESC
Очень рад Вашим решениям!
Для того, чтобы отобразить месяца 2024 года, в которых заведено более 10ти клиентов, для начала просто отберём клиентов, заведённых именно в 2024 году:
SELECT *
FROM CLIENTS
WHERE DATE_CREATE >= DATE '2024-01-01'
AND DATE_CREATE < DATE '2025-01-01'
Было бы неплохо, если бы на столбце DATE_CREATE был индекс.
Мы получили всех клиентов, которых завели в 2024ом году. Выводя клиентов, выведем и ещё один столбец, в который будем извлекать номер месяца из даты заведения клиента (для того, чтобы позже клиентов группировать по одинаковому номеру месяца). Новому столбцу дадим алиас "MM". Наш запрос получит вид:
SELECT CLIENTS. *,
EXTRACT(MONTH FROM DATE_CREATE) MM
FROM CLIENTS
WHERE DATE_CREATE >= DATE '2024-01-01'
AND DATE_CREATE < DATE '2025-01-01'
В запросе выше мы вывели все имеющиеся столбцы из таблицы CLIENTS и добавили ещё один новый, в него мы получили месяц заведения клиента. У некоторых клиентов месяц заведения одинаковый, сгруппируем строки по одинаковом получаемому месяцу заведения клиента, подсчитав сколько в каждую группу сгруппировалось строк:
SELECT
EXTRACT(MONTH FROM DATE_CREATE) MM, COUNT(*) CLIENTS_COUNT
FROM CLIENTS
WHERE DATE_CREATE >= DATE '2024-01-01'
AND DATE_CREATE < DATE '2025-01-01'
GROUP BY EXTRACT(MONTH FROM DATE_CREATE)
В результате получим таблицу вида:
MM CLIENTS_COUNT
1 5
2 7
3 12
...
Сгруппировав клиентов 2024 года по месяцу заведения и подсчитав сколько клиентов заведено в каждом месяце, используя HAVING теперь оставим тех, где подсчитанное количество больше 10:
SELECT
EXTRACT(MONTH FROM DATE_CREATE) MM, COUNT(*) CLIENTS_COUNT
FROM CLIENTS
WHERE DATE_CREATE >= DATE '2024-01-01'
AND DATE_CREATE < DATE '2025-01-01'
GROUP BY EXTRACT(MONTH FROM DATE_CREATE)
HAVING COUNT(*) > 10
Обратите внимание, что в HAVING-е недопустимо для большинства СУБД (да и по ANSI стандарту тоже) использовать алиас (новое имя) столбца, ведь столбец с данными ещё не создан. Но в HAVING-е можно использовать такой же расчёт количества, что и в SELECT-е. В итоге и получилось не:
HAVING CLIENTS_COUNT > 10
а:
HAVING COUNT(*) > 10
Осталось добавить упорядочивание месяцов по количеству заведенных в них клиентов. Месяца с наибольшим количеством заведённых клиентов должны отображаться сверху. А вот в сортировке можно использовать алиасы столбцов. Конечный вариант нашего запроса:
SELECT
EXTRACT(MONTH FROM DATE_CREATE) MM, COUNT(*) CLIENTS_COUNT
FROM CLIENTS
WHERE DATE_CREATE >= DATE '2024-01-01'
AND DATE_CREATE < DATE '2025-01-01'
GROUP BY EXTRACT(MONTH FROM DATE_CREATE)
HAVING COUNT(*) > 10
ORDER BY CLIENTS_COUNT DESC
👍9❤1
Здравствуйте, друзья!
На следующей неделе планирую новую группу по SQL и PostgreSql, и в этот раз обучение будет по будням! 👌
- Он-лайн обучение по вторникам и четвергам 19:30 - 21:00;
- Закрытая Телеграм группа куда я буду выкладывать записи наших он-лайн встреч (на случай, если пропустите или захотите повторить материал);
- Будут самостоятельные практические задачи на тренеровочной базе данных. Я буду проверять Ваши решения, помогать оптимизировать их и находить ошибки!
Посмотреть программу обучения и записаться можно тут: https://prime-soft.biz/courses/postgresql
Оплатить можно в два этапа. Вначале 50% (7.450 ₽) и столько же после пятого урока. Всего будет 10 онлайн встреч.
График обучения:
- вт, чт 19:30 - 21:00;
- 08.07.2025 - 07.08.2025!
Оставляйте вопросы прямо под постом или отправляйте на почту: info@prime-soft.biz
На следующей неделе планирую новую группу по SQL и PostgreSql, и в этот раз обучение будет по будням! 👌
- Он-лайн обучение по вторникам и четвергам 19:30 - 21:00;
- Закрытая Телеграм группа куда я буду выкладывать записи наших он-лайн встреч (на случай, если пропустите или захотите повторить материал);
- Будут самостоятельные практические задачи на тренеровочной базе данных. Я буду проверять Ваши решения, помогать оптимизировать их и находить ошибки!
Посмотреть программу обучения и записаться можно тут: https://prime-soft.biz/courses/postgresql
Оплатить можно в два этапа. Вначале 50% (7.450 ₽) и столько же после пятого урока. Всего будет 10 онлайн встреч.
График обучения:
- вт, чт 19:30 - 21:00;
- 08.07.2025 - 07.08.2025!
Оставляйте вопросы прямо под постом или отправляйте на почту: info@prime-soft.biz
prime-soft.biz
Prime | Курс SQL, PostgreSql
Уроки и курсы SQL, PostgreSQL, Базы данных.
👍2
Интересно было бы узнать сколько сейчас работает удалённо.
Вы работаете в офисе или из дома?
Вы работаете в офисе или из дома?
Anonymous Poll
28%
Всегда работаю в офисе
21%
Несколько дней в неделю в офисе
10%
Редко работаю в офисе, почти всегда из дома
30%
У меня полный хом офис. Я работаю из дома
12%
Я не работаю
Всем привет!
Решая практические задачи и даже проходя небольшие тесты по SQL, мы становимся умнее: освежаем в памяти возможности языка SQL, узнаём и закрепляем новые знания! Поэтому, не ленимся и принимаем участие!😉
Предлагаю очередной интересный вопрос по базам данных.
В базе данных, среди прочих, есть таблица клиентов CLIENTS, определённая так:
CREATE TABLE CLIENTS (
ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
NAME VARCHAR(100) NOT NULL,
INN VARCHAR(20));
CREATE UNIQUE INDEX CLIENTS_INN ON CLIENTS (INN);
В таблице CLIENTS две строки:
ID NAME INN
1 АО Волга 12345
2 ИП Пятаков NULL
Что произойдёт при выполнении следующей команды?
INSERT INTO CLIENTS
(NAME, INN)
VALUES
('АО Зелёный дом', NULL)
Решая практические задачи и даже проходя небольшие тесты по SQL, мы становимся умнее: освежаем в памяти возможности языка SQL, узнаём и закрепляем новые знания! Поэтому, не ленимся и принимаем участие!😉
Предлагаю очередной интересный вопрос по базам данных.
В базе данных, среди прочих, есть таблица клиентов CLIENTS, определённая так:
CREATE TABLE CLIENTS (
ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
NAME VARCHAR(100) NOT NULL,
INN VARCHAR(20));
CREATE UNIQUE INDEX CLIENTS_INN ON CLIENTS (INN);
В таблице CLIENTS две строки:
ID NAME INN
1 АО Волга 12345
2 ИП Пятаков NULL
Что произойдёт при выполнении следующей команды?
INSERT INTO CLIENTS
(NAME, INN)
VALUES
('АО Зелёный дом', NULL)
Что произойдёт при выполнении SQL команды?
Anonymous Quiz
66%
В таблицу CLIENTS добавится строка
34%
Будет SQL-ошибка
👍2
В БД PostgreSQL в таблице CODES (CODE VARCHAR(10)) нет строк. Сколько строк вставит команда:
INSERT INTO CODES (CODE) SELECT 123 UNION SELECT 123
INSERT INTO CODES (CODE) SELECT 123 UNION SELECT 123
Anonymous Quiz
30%
Ни одной
52%
1
18%
2
Всем привет! Интересная задача от Александра (для тех, кто не читает комментарии 🙂).
Сколько строк вернёт следующий запрос (на примере PostgreSql):
select 123 union all select 123 union select 123
Сколько строк вернёт следующий запрос (на примере PostgreSql):
select 123 union all select 123 union select 123
Anonymous Quiz
5%
0
31%
1
31%
2
14%
3
19%
Запрос не сможет выполниться в СУБД PostgreSQL. Будет SQL-ошибка
😁1
Всем привет! Предлагаю очередную мини-задачу по SQL:
В таблице CLIENTS три строки:
ID NAME INN
-------------------------------------------------
1 ИП Иванов И.И. 690501019999
2 АО Рога и копыта 1234567890
3 АО ПАКС 2345678901
В таблице REG_INN две строки:
INN
--------------------
1234567890
NULL
В таблице CLIENTS три строки:
ID NAME INN
-------------------------------------------------
1 ИП Иванов И.И. 690501019999
2 АО Рога и копыта 1234567890
3 АО ПАКС 2345678901
В таблице REG_INN две строки:
INN
--------------------
1234567890
NULL
❤2
Сколько строчек вернёт запрос:
SELECT * FROM CLIENTS WHERE INN IN (SELECT INN FROM REG_INN)
SELECT * FROM CLIENTS WHERE INN IN (SELECT INN FROM REG_INN)
Anonymous Quiz
9%
0
81%
1
7%
2
3%
3
👍10
image_2025-08-04_00-25-22.png
16.4 KB
Всем доброго понедельника! Как насчет филворда на тему баз данных на русском?! Сложность не высокая. Всего спрятано 23 слова. Решение опубликую чуть позже.
Спасибо всем за участие! Ниже перечень слов, из которых составлен филворд:
База
Выборка
Да
Запись
Запрос
Зависимость
И
Или
Ключ
Код
Команда
Кортеж
Минус
Не
Объединение
Один
Множество
Нет
Поле
Связь
Столбец
СУБД
Таблица
База
Выборка
Да
Запись
Запрос
Зависимость
И
Или
Ключ
Код
Команда
Кортеж
Минус
Не
Объединение
Один
Множество
Нет
Поле
Связь
Столбец
СУБД
Таблица
👍5❤1🤮1
Курс Программирование в PL/SQL (ORACLE) доступен теперь и на Степике:
https://stepik.org/a/250244
https://stepik.org/a/250244
Stepik: online education
Программирование в PL/SQL ORACLE (С КУРАТОРОМ)
Курс обучения языку PL/SQL, внутреннему языку программирования ORACLE. На основе многолетнего опыта разработки программных продуктов, в том числе информационных систем с одновременных доступом в несколько тысяч человек, на основе значимого опыта работы с…
🔥10❤1
Сегодня нашёл интересный тест на тему соединений.
В чем разница между LEFT JOIN и RIGHT JOIN, если соединяемые таблицы в запросе поменять местами?
В чем разница между LEFT JOIN и RIGHT JOIN, если соединяемые таблицы в запросе поменять местами?
Anonymous Quiz
40%
Разницы нет, это эквивалентные операции
5%
LEFT JOIN всегда быстрее
6%
RIGHT JOIN не поддерживается в некоторых крупных СУБД
48%
Разный порядок столбцов в результате
image_2025-08-12_15-04-24.png
17.5 KB
Спасибо всем за активное участие и за дискуссию!
При соединении таблиц, LEFT и RIGHT JOIN-ы действительно равноценны и ничего не меняют в выводимом наборе данных, если таблицы в запросе поменять местами. Но, как Вы и написали, если порядок столбцов в блоке SELECT не указан явно (а указана звездочка), то в результирующем наборе столбцы таблиц будут выводиться в порядке указания таблиц в запросе: сначала будут выведены все столбцы первой таблицы запроса, затем столбцы второй таблицы, указанной в запросе и т.д.
При соединении таблиц, LEFT и RIGHT JOIN-ы действительно равноценны и ничего не меняют в выводимом наборе данных, если таблицы в запросе поменять местами. Но, как Вы и написали, если порядок столбцов в блоке SELECT не указан явно (а указана звездочка), то в результирующем наборе столбцы таблиц будут выводиться в порядке указания таблиц в запросе: сначала будут выведены все столбцы первой таблицы запроса, затем столбцы второй таблицы, указанной в запросе и т.д.
👍8❤1
Каким будет результат выполнения следующего запроса (на примере СУБД MySQL, PostgreSQL)? SELECT FLOOR(10.9), CEIL(10.1)
Anonymous Quiz
31%
10, 10
40%
10, 11
25%
11, 10
4%
11, 11
image_2025-08-18_08-40-18.png
7.7 KB
Любая СУБД может группировать данные на основе значения не только одного столбца, а, при необходимости, набора столбцов. Тогда строчки, с одинаковыми значениями, указанных в GROUP BY столбцах, будут сливаться в одну. Строчки, у которых, хотя бы в одном из указанных столбцов, значение другое - будут создавать новую группу. Например, подсчитаем сколько сотрудников работает в каждом филиале в каждом отделе:
👍3
image_2025-08-18_08-40-53.png
77.9 KB
Получаем итоги на каждое сочетание название филиала и название отдела:
👍5
Мини-тест на знание основ SQL ⭐️! Что вернёт запрос? SELECT COALESCE(NULL, NULL, 'SQL', 'DB');
Anonymous Quiz
27%
NULL
67%
SQL
6%
DB