Этот курс по SQL — отличный выбор для тех, кто хочет с нуля освоить работу с реляционными базами данных и уверенно применять SQL в реальных проектах. Обучение построено на примере PostgreSQL, одной из самых мощных и востребованных СУБД, но полученные навыки легко масштабируются на любые другие реляционные системы.
Что включает в себя обучение
Курс последовательно проводит студентов через все ключевые этапы изучения SQL и реляционных БД — от самых основ до продвинутых инструментов оптимизации и аналитики.
Три уровня подготовки
Материал разработан так, чтобы подойти как новичкам, так и специалистам, стремящимся структурировать знания:
Базовый уровень — знакомство с фундаментальными понятиями и структурой данных.
Стандартный уровень — уверенная работа с SQL‑запросами, аналитическими инструментами и структурой БД.
Продвинутый уровень — оптимизация, индексация, большие данные и архитектурные подходы.
Новички могут выполнить первые два уровня и позже вернуться к продвинутому блоку — но в идеале стоит освоить весь материал, так как он формирует полноценную картину работы с данными.
Ключевые темы курса
Обучение включает множество практических занятий и раскрывает полный функциональный спектр SQL и реляционных систем:
Работа со структурой данных
Создание и настройка баз данных, схем, таблиц и полей (DDL).
Операции модификации и выборки данных (DML).
Понимание связей между таблицами и принципов нормализации.
Запросы и аналитика
Создание простых и сложных SQL‑запросов.
Использование оконных функций для аналитических задач.
Работа с агрегатами, подзапросами и соединениями.
Оптимизация и производительность
Использование B‑Tree индексов и понимание их работы.
Чтение и анализ планов выполнения запросов.
Основы оптимизации запросов в PostgreSQL.
Практическая работа с СУБД
Работа с PostgreSQL через командную строку.
Создание dump‑файлов и восстановление данных из них.
Выход за рамки реляционных БД
Знакомство с DWH и системой BigQuery от Google.
Теорема CAP и введение в NoSQL‑подходы.
Результат обучения
После прохождения всех уровней курса вы будете уверенно владеть инструментами работы с реляционными базами данных, понимать принципы устройства NoSQL‑хранилищ и их роль в современной архитектуре. Эти знания позволят чувствовать себя уверенно в любом реальном проекте и профессионально решать задачи, связанные с данными.
Это пробный урок. Оформите подписку, чтобы получить доступ ко всем материалам курса. Премиум
Ограничение времени просмотра
Вы можете просматривать пробный урок только 10 минут. Получите полный доступ, чтобы смотреть без ограничений.
Dzianis Matveyenka (Denis.dmdev) — это Java-разработчик, преподаватель и автор образовательного проекта DMDev, ориентированного на обучение backend-разработке на Java.Кто этоПрофессиональный Java Software Engineer с опытом более 10 летРаботал в международных IT-компаниях: EPAM, IBA, Godel, FitbitВ настоящее время — разработчик в GoogleНачал преподавать с ~2017 года и развивает собственную образовательную платформуОсновной фокус обученияJava CoreS
Udemy — одна из самых масштабных платформ в мире, предлагающая обучающий контент от авторов и экспертов со всего света. Сервис объединяет миллионы учеников и десятки тысяч преподавателей, создающих курсы на самые разнообразные темы.Основные возможности платформыШирокий выбор тем: от программирования и дизайна до маркетинга, психологии и личной эффективности.Глобальное сообщество авторов: материалы создаются специалистами из разных стран.Удобный ф
у меня тоже Ошибка при скачивании архива и почемуто все курсы этого автора ЗАВИСАЮТ
Anonymous
не качает архивом(
Anonymous
@admin, please update the course
hazartilirot
Lesson 26, 37:31, опять неправильно! Во-первых, на мой взгляд, чересчур сложная конструкция, это лично моё мнение, у меня вариант проще для человеческого понимания. Во-вторых, в условиях задачи сказано МЕЖДУ Минском и Лондоном. Денис рассматривает только одно направление, почему? Я не вижу никаких ограничений, стало быть мы должны учитывать и обратный перелёт от Лондона до Минска.
select count(*) as "total flights", min(f.arrival_date - f.departure_date)::time as "min flight's duration", max(f.arrival_date - f.departure_date)::time as "max flight's duration" from flight f where ( (f.departure_airport_code = 'MNK' and f.arrival_airport_code = 'LDN') or (f.departure_airport_code = 'LDN' and f.arrival_airport_code = 'MNK') ) and f.status = 'ARRIVED';
Всего таких перелётов: 4 Минимальный перелёт: 03:11:00, Максимальный перелёт: 03:45:00
fatumepta hazartilirot
Решил интуитивно так же. Единственное - WHERE у меня, кмк, по проще. SELECT max(arrival_date - departure_date)::time max, min(arrival_date - departure_date)::time min, count(id) total FROM flight WHERE departure_airport_code IN ('MNK', 'LDN') AND arrival_airport_code IN ('MNK', 'LDN') AND status = 'ARRIVED';
redfan hazartilirot
А чего не продолжил дальше?) И 7 пункт тоже не совсем верно) Он находит процент от общего числа tickets, а нужно от общего числа имен без повторений)
hazartilirot
lesson 26 33:22 - ха-ха-ха, а вот, и неправильно)
select f.id, f.arrival_date - f.departure_date as "flight's duration" from flight f where f.status = 'ARRIVED' order by "flight's duration" desc limit 2;
А всё потому, что рейс под ID 6 имеет статус - отменён - то есть, как можно рассматривать его продолжительность, если самолёт никуда не летал? Нужно было исключить в условии, и рассматривать только те, которые ПРИБЫЛИ.
hazartilirot
lesson 26, 19:30 - Простите, какой позавчера? Позавчера это было у Дениса, а я смотрю в 2023 году, дата существенно отличается.))))) Интервалы полезно знать, однако, условия весьма странные)
В общем, я использовал вот этот сайт, сразу же будет писать разницу
https://howlongagogo.com/date/2020/december/18
кастить тип нужно с обоих сторон, чтобы сравнивать дату с датой, иначе, на найдётся, т.к. с левой стороны ещё и время указано. Уверен, Денис об этом скажет) Просто, я не дошёл ещё до этого
and departure_date::date = (now() - interval '2 years 3 months 8 days')::date;
hazartilirot
Lesson 26 04:34, ничего не понимаю
aircraft (самолет) id model (модель самолета - unique)
если уникальный, значит должно быть вот так:
create table aircraft ( id int primary key generated by default as identity, model varchar(64) unique not null )
видимо ошибся, Дёня.
hazartilirot
Lesson 16 - я не нашёл у него в репозитории данных запросов, поэтому пришлось самому набирать, оставляю здесь для манипуляций, всё остальное набираем и практикуем своими ручками)
create database book_repository;
jdbc:postgresql://localhost:5432/book_repository
create table author ( id int primary key generated by default as identity, first_name varchar(128) not null, last_name varchar(128) not null );
create table book ( id bigint primary key generated by default as identity, name varchar(128) not null, year smallint not null, pages smallint not null, author_id int references author (id) );
insert into book (name, year, pages, author_id) values ('Java. Библиотеку профессионала. Том 1', 2010, 1102, (SELECT id FROM author WHERE last_name = 'Хорстманн')), ('Java. Библиотеку профессионала. Том 2', 2012, 954, (SELECT id FROM author WHERE last_name = 'Хорстманн')), ('Java SE 8. Вводный курс', 2015, 203, (SELECT id FROM author WHERE last_name = 'Хорстманн')), ('7 навыков высокоэффективных людей', 1989, 396, (SELECT id FROM author WHERE last_name = 'Кови')), ('Разбуди в себе исполина', 1991, 576, (SELECT id FROM author WHERE last_name = 'Роббинс')), ('Думай и богатей', 1937, 336, (SELECT id FROM author WHERE Last_name = 'Хилл')), ('Богатый папа, бедный папа', 1997, 352, (SELECT id FROM author WHERE last_name = 'Кийосаки')), ('Квадрант денежного потока', 1998, 368, (SELECT id FROM author WHERE last_name = 'Кийосаки')), ('Как перестать беспокоиться и начать жить', 1948, 368, (SELECT id FROM author WHERE last_name = 'Карнеги')), ('Как завоевывать друзей и оказывать влияние на людей', 1936, 352, (SELECT id FROM author WHERE last_name = 'Карнеги'));
piraterover
Заставка как в новостях ЧП в 90-е))) Из всех курсов этот мне позволил понять материал лучше остальных!
ussick79
В курсе есть раскрытие понятий триггеры, процедуры, транзакции?
qooba
курс очень качественный!
Anonymous
Курс ужасный, не тратьте время на это
tsipotan.oleh Anonymous
и в чем же проблема данного курса?
grishachapliy1
лучший курс по sql)
panasonic-5670
спасибо, отличный курс, досматриваю, осталось 10 уроков. как нибудь куплю оригинал автора, чтобы поддержать
panasonic-5670
спасибо, отличный курс, досматриваю, осталось 10 уроков. как нибудь куплю оригинал автора, чтобы поддержать
select count(*) as "total flights",
min(f.arrival_date - f.departure_date)::time as "min flight's duration",
max(f.arrival_date - f.departure_date)::time as "max flight's duration"
from flight f
where
(
(f.departure_airport_code = 'MNK' and f.arrival_airport_code = 'LDN')
or
(f.departure_airport_code = 'LDN' and f.arrival_airport_code = 'MNK')
) and f.status = 'ARRIVED';
Всего таких перелётов: 4
Минимальный перелёт: 03:11:00,
Максимальный перелёт: 03:45:00
SELECT max(arrival_date - departure_date)::time max,
min(arrival_date - departure_date)::time min,
count(id) total
FROM flight
WHERE departure_airport_code IN ('MNK', 'LDN')
AND arrival_airport_code IN ('MNK', 'LDN')
AND status = 'ARRIVED';
select f.id, f.arrival_date - f.departure_date as "flight's duration"
from flight f
where f.status = 'ARRIVED'
order by "flight's duration" desc
limit 2;
А всё потому, что рейс под ID 6 имеет статус - отменён - то есть, как можно рассматривать его продолжительность, если самолёт никуда не летал? Нужно было исключить в условии, и рассматривать только те, которые ПРИБЫЛИ.
В общем, я использовал вот этот сайт, сразу же будет писать разницу
https://howlongagogo.com/date/2020/december/18
кастить тип нужно с обоих сторон, чтобы сравнивать дату с датой, иначе, на найдётся, т.к. с левой стороны ещё и время указано. Уверен, Денис об этом скажет) Просто, я не дошёл ещё до этого
and departure_date::date = (now() - interval '2 years 3 months 8 days')::date;
aircraft (самолет)
id
model (модель самолета - unique)
если уникальный, значит должно быть вот так:
create table aircraft
(
id int primary key generated by default as identity,
model varchar(64) unique not null
)
видимо ошибся, Дёня.
create database book_repository;
jdbc:postgresql://localhost:5432/book_repository
create table author
(
id int primary key generated by default as identity,
first_name varchar(128) not null,
last_name varchar(128) not null
);
create table book
(
id bigint primary key generated by default as identity,
name varchar(128) not null,
year smallint not null,
pages smallint not null,
author_id int references author (id)
);
INSERT INTO author (first_name, last_name)
VALUES ('Кей', 'Хорстманн'),
('Стивен', 'Кови'),
('Тони', 'Роббинс'),
('Наполеон', 'Хилл'),
('Роберт', 'Кийосаки'),
('Дейл', 'Карнеги');
insert into book (name, year, pages, author_id)
values ('Java. Библиотеку профессионала. Том 1', 2010, 1102, (SELECT id FROM author WHERE last_name = 'Хорстманн')),
('Java. Библиотеку профессионала. Том 2', 2012, 954, (SELECT id FROM author WHERE last_name = 'Хорстманн')),
('Java SE 8. Вводный курс', 2015, 203, (SELECT id FROM author WHERE last_name = 'Хорстманн')),
('7 навыков высокоэффективных людей', 1989, 396, (SELECT id FROM author WHERE last_name = 'Кови')),
('Разбуди в себе исполина', 1991, 576, (SELECT id FROM author WHERE last_name = 'Роббинс')),
('Думай и богатей', 1937, 336, (SELECT id FROM author WHERE Last_name = 'Хилл')),
('Богатый папа, бедный папа', 1997, 352, (SELECT id FROM author WHERE last_name = 'Кийосаки')),
('Квадрант денежного потока', 1998, 368, (SELECT id FROM author WHERE last_name = 'Кийосаки')),
('Как перестать беспокоиться и начать жить', 1948, 368, (SELECT id FROM author WHERE last_name = 'Карнеги')),
('Как завоевывать друзей и оказывать влияние на людей', 1936, 352,
(SELECT id FROM author WHERE last_name = 'Карнеги'));