Практический курс по SQL для начинающих - #3 Соединения (JOIN)

  Рет қаралды 82,827

EngineerSpock - IT & программирование

EngineerSpock - IT & программирование

Күн бұрын

Данный курс на KZbin - сильно укороченная (демо) версия полного курса, который вы можете приобрести на stepik (с карточкой из РФ) или Udemy (с карточкой не из РФ)
Купить полный курс на stepik:
www.engineerspock.com/buy-pos... - получите скидку 30%
Купить полный курс на udemy:
www.engineerspock.com/buy-pos...
Все курсы от EngineerSpock: www.engineerspock.com/offer-s...
Подпишись на канал в Telegram: t.me/engineerspock_it
Подписка на Boosty: boosty.to/engineerspock
Донаты на развитие: pay.cloudtips.ru/p/1f080f72
Чат в Telegram: t.me/python_devs
Ссылка на репозиторий в GitHub: github.com/EngineerSpock/post...
---------------------------------------------------------------------------------------------
Базы данных (БД) вообще и реляционные базы данных в частности - очень широкие темы. Эта серия уроков по SQL посвящена именно разработке реляционных баз данных под управлением PostgreSQL (PostgreSQL - это СУБД т.е. система управления базами данных).
На этом курсе по SQL вы освоите основы SQL: узнаете что такое SQL, научитесь писать SQL запросы различной сложности. Все те знания, которые вы получите на курсе легко применимы и к другим СУБД, таким как MySQL, Microsoft SQL Server, Oracle.
Изучение SQL это один из самых быстрых способов подняться по карьерной лестнице и начать зарабатывать ещё больше. На курсе вы будете учиться и получать задания для собственной проверки и улучшения понимания материала.
В данном видео уроке по SQL мы разбираем:
00:00 Введение в SQL джойны
12:12 Внутреннее соединение (джойн) - INNER JOIN
29:14 Внешние соединения (джойны) - LEFT, RIGHT JOIN
39:31 Рекурсивное соедиенение (джойн) - SELF JOIN
47:12 USING & NATURAL JOIN
51:44 Псевдонимы с помощью AS
57:48 ДЗ "JOINS"
57:58 ДЗ "JOINS" - Решение
ДЗ и все скрипты данного урока найдёте в папке по ссылке:
bit.ly/3c1K24l
#sql #postgresql #engineerspock
Подпишись на канал bit.ly/2QBesmw

Пікірлер: 96
@SmokyBeast
@SmokyBeast 5 ай бұрын
Отличный курс! Даже за платно никтотне объяснит более доходчиво! 🔥
@rika4253
@rika4253 7 ай бұрын
Лучшее объяснение Join'ов! Очень благодарна за курс!
@dh2102
@dh2102 2 жыл бұрын
Благодарю за спокойную грамотную подачу материала.
@user-uf1uf5vc3f
@user-uf1uf5vc3f 2 жыл бұрын
Лучший курс по SQL!
@user-fv1ht8fj2z
@user-fv1ht8fj2z 2 жыл бұрын
Спасибо за замечательные уроки!
@user-ho1rx3zg4s
@user-ho1rx3zg4s Жыл бұрын
Огромная благодарность! Вы большой молодец! Сильно помогли разобраться в данной теме!
@Noor2Gun
@Noor2Gun Жыл бұрын
Лучший канал! Масса полезной информации, и четкое объяснение!
@nuneuzheli
@nuneuzheli 2 жыл бұрын
после изучения возможностей power query решил и SQL заняться, хорошая подача материала.
@ukrjork
@ukrjork 3 ай бұрын
По использованию cross join можно привести такой пример - есть список сотрудников, нужно для них составить таблицу расписания на месяц, то есть должны быть строки для каждого дня месяца и каждого сотрудника create local temporary table ids ( temp_id int null ); insert into ids values (1), (2), (3), (4) ; create local temporary table dates ( rep_date date null ); insert into dates select cast(generate_series('2024-02-01', '2024-02-29', interval '1 day') as date) ; select rep_date, temp_id from dates cross join ids
@marlen011
@marlen011 Жыл бұрын
Спасибо что делишься знаниями
@Dima-uz8gi
@Dima-uz8gi 22 күн бұрын
Классный пример SELF JOIN, спасибо! :)
@EngineerSpock
@EngineerSpock Жыл бұрын
Данный курс на KZbin - сильно укороченная (демо) версия полного курса, который вы можете приобрести на stepik (с карточкой из РФ) или Udemy (с карточкой не из РФ) Купить полный курс на stepik: www.engineerspock.com/buy-postgres-youtube-stepik - получите скидку 30% Купить полный курс на udemy: www.engineerspock.com/buy-postgres-youtube-udemy Все курсы от EngineerSpock: www.engineerspock.com/offer-spock-youtube ***** Подпишись на канал в Telegram: t.me/engineerspock_it Подписка на Boosty: boosty.to/engineerspock Донаты на развитие: pay.cloudtips.ru/p/1f080f72 Чат в Telegram: t.me/python_devs Ссылка на репозиторий в GitHub: github.com/EngineerSpock/postgres-course-ru *****
@salivona
@salivona 2 жыл бұрын
Спасибо, классные видео!
@RaptorT1V
@RaptorT1V 8 ай бұрын
1:04:27 меня одного смущает, что это за abc такое, и почему у меня его нет? А также почему у меня есть "Côte de Blaye" (Beverages) и "Nord-Ost Matjeshering" (Seafood), а у вас этих наименований нет, хотя они также меньше 20
@user-sj5vz3kx3c
@user-sj5vz3kx3c Жыл бұрын
спасибо за Ваши видео от всей души
@sergeym.1870
@sergeym.1870 2 жыл бұрын
На 9:40 разве строку предпоследнюю не забыл? West Coast / Chicago / Null / Null
@igorm.9845
@igorm.9845 Жыл бұрын
Всё так. У автора ошибка в результате FULL OUTER JOIN. Почему бы ему не сделать закрепленный комментарий с errata.
@antonturishchev7182
@antonturishchev7182 Жыл бұрын
Спасибо за видео, отдельная джакузи в раю за них. А что за топ курс на английском упоминали?
@FFl1s
@FFl1s Ай бұрын
У тебя в четвертом тайме опечатка "Рекурсивное соедиЕНЕние (джойн) - SELF JOIN" =]
@user-sm6du2wh7r
@user-sm6du2wh7r Жыл бұрын
Учусь в skillfactory, модуль postgresql подача конечно......Проходил отдельно SQL у другого автора. Тут хорошая подача. Для меня самое сложно было осознать, что запросы идут снизу вверх (к примеру : сначала фильтрация, а только потом вывод, ну это лично моя проблема).Автора приятно слушать, прям оратор=). Обязательно всем к просмотру!!
@user-pd2hm8jn4l
@user-pd2hm8jn4l 2 жыл бұрын
спасибо
@andreykrauch5027
@andreykrauch5027 Жыл бұрын
Спасибо👍😀
@user-ff5nt6pn1v
@user-ff5nt6pn1v 2 жыл бұрын
да совсем не дурно, возьму на заметку.
@user-cj7po7bx3i
@user-cj7po7bx3i 2 жыл бұрын
Спасибо
@Vasu1982ca
@Vasu1982ca Жыл бұрын
Как увеличить производительность программы? Я так понимаю там изначально выделен очень маленький объём памяти. как его увеличить и до какого предела от общего объема ram? А то запросы могут минуты обрабатываться....
@user-jv6sj3xw1n
@user-jv6sj3xw1n Жыл бұрын
25:22 почему используем именно products.unit_price, а не order_details.unit_price ? и какая разница между этими столбцами ? почему в них разные данные ?
@korumika3798
@korumika3798 10 ай бұрын
34:47 вспомнил старый мем "Должны работать трезвые водители, но у нас таких нет, все нормальные ребята" :D
@igorm.9845
@igorm.9845 Жыл бұрын
Очень жаль, что не рассказано, что в ON (...) можно писать любые условия и это иногда полезно. Ну и в FULL OUTER JOIN у автора ошибка. Не хватает паблишера с ID 5.
@RaptorT1V
@RaptorT1V 8 ай бұрын
какие условия? в каких случаях это полезно?
@user-pd5dh5jf5h
@user-pd5dh5jf5h Жыл бұрын
Где в результирующей таблице ISBN в cross join?
@IsYourFavorite
@IsYourFavorite 10 ай бұрын
Почему в соединённой таблице в FULL OUTER JOIN 10:36 нет строки West Coast Publishing CHicago ??? И ISBN столбец в CROSS JOIN? 12:00 ?
@user-dv1et4jj2w
@user-dv1et4jj2w Жыл бұрын
Спасибо за качественный контент) Вопрос: нормально ли, что я не всё запоминаю из этих лекций, а только какие-то ключевые понятия и команды SQL или всё таки нужно зубрить для хорошего результата в будущем?
@farik7432
@farik7432 Жыл бұрын
Думаю, если хочешь быть специалистом в сфере базы данных (Data Science, Backend-разработчик), то лучше, конечно, знать и запоминать все. Если изучаешь SQL для общего понимания картины со стороны back, то можно просто посмотреть как работает эта система и не углубляться.
@defaulterror2480
@defaulterror2480 6 ай бұрын
25:30. У меня вопрос, почему мы берем unit_price именно из таблицы products? Ведь по идее наша таблица, которая в конце получится должна как бы описывать заказы, то есть почему бы не взять unit_price из order_details? И вообще почему unit_price различается в этих таблицах?
@Abrashitov
@Abrashitov Жыл бұрын
Забавно видеть, как чем дальше мы идем, тем меньше просмотров у курса и меньше комментариев. Надеюсь, я дойду до конца)
@EngineerSpock
@EngineerSpock Жыл бұрын
Заметьте, так в принципе жизнь устроена. Сидеть рубиться в приставку приятнее гораздо.
@haryariy2089
@haryariy2089 Жыл бұрын
@@EngineerSpock тут скорее всего сливаются на ' ВЕСЬ SQL за 30 минут или познать IT за неделю' !!
@Dmitriy777JF
@Dmitriy777JF Жыл бұрын
@@haryariy2089 хауди хо, друзья))
@datatrainee198
@datatrainee198 10 ай бұрын
прём до конца...
@Rebe-Caufman
@Rebe-Caufman 10 ай бұрын
это не полный курс
@hil413
@hil413 Жыл бұрын
Спасабо!. А где найти такую тестовую Базу данных которой вы пользуетесь на протежении курса?
@Abrashitov
@Abrashitov Жыл бұрын
В первом выпуске курса под описанием видео
@user-te4zh2dz9r
@user-te4zh2dz9r 6 ай бұрын
12:03 в результате должен был быть ещё и столбик ISBN?
@fedordostoevskiy4209
@fedordostoevskiy4209 Жыл бұрын
Молодец, конечно. И сразу понятно, что курс для новичков. Другие непонятно для кого, для новичков непонятно ничего, для остальных слабо.
@diz996
@diz996 Жыл бұрын
Хороший курс, но у меня почему то нет Speedy Express
@user-ys9kd4pn9b
@user-ys9kd4pn9b 12 күн бұрын
Почему когда я пишу любой запрос кроме Select... From; у меня ничего не выводит?
@user-te3ny1jh3b
@user-te3ny1jh3b Жыл бұрын
Самое тяжёлое когда join объединяется с group by
@tanya6617
@tanya6617 Жыл бұрын
Не поняла, в каких случаях использовать INNER, когда LEFT JOIN. И как определить какое название таблицы нужно писать первой, а какую второй: from products join categories или from products join categories
@EngineerSpock
@EngineerSpock Жыл бұрын
Пересмотрите ещё раз, в ролике всё это есть
@esferon1
@esferon1 2 жыл бұрын
Понятны типы JOINов, объедиение нескольких таблиц, группирование, комбинирование фильтров по цене, количеству и т.д. Но непонятны порядок и действия по столбцам с orders.emploee_id и остальных после ON, особенно когда в SELECT другие столбцы непонятно как они взаимодействуют emploees.emploee_id и другими id.
@ZZZMerk
@ZZZMerk Жыл бұрын
Все происходит благодаря тому самому внешнему ключу (FOREIGN KEY). Зависимая таблица привязана к первичному ключу (как правило) в главной таблице через внешний ключ, что и позволяет достать какие-то данные :) То есть внешний ключ - это вроде указания на связь с другой таблицей, потому что данные почти всегда связаны между собой.
@esferon1
@esferon1 Жыл бұрын
@@ZZZMerk Ок. Буду пробовать работать с ними.
@petr_khramov
@petr_khramov Жыл бұрын
Как я понял для Cross Join внешние ключи вообще не используются? В примере с Cross Join в таблице Book не было колонки publisher_id.
@ukrjork
@ukrjork 3 ай бұрын
Да, это объединение каждой строки из таблицы 1 с каждой строкой из таблицы 2, еще называют Декартовое умножение, если обе таблицы на 1000 строк, результат будет 1000 * 1000, то есть миллион строк, кстати, можно обычным join повторить с условием on 1 = 1
@arthur_478
@arthur_478 Жыл бұрын
У меня в решении второй задачи на 1:04:21 получается другой результат. Получается 6 строк и 2 из них отличаются от тех, что на экране. Переписал в точности как на экране, то же самое. Это только у меня такое получается? Может быть дамп базы поменялся после записи курса?
@user-ro9ry8bx4t
@user-ro9ry8bx4t Жыл бұрын
да, скорее всего поменялась база, у меня тоже другой результат
@Mikhalich98rus
@Mikhalich98rus Жыл бұрын
Тоже самое. Дополнительно получаю позицию с product_name = "Côte de Blaye"
@muhlymak
@muhlymak Жыл бұрын
плюсую, все ок, должно быть 6 записей если ничего не делали с базой, там автор скорее всего в других уроках что то удалял)
@ToP1GeaR1
@ToP1GeaR1 3 ай бұрын
то же самое
@user-ch5mr3zs1d
@user-ch5mr3zs1d 6 ай бұрын
у меня в первом задании пишет ERROR: relation "orders" does not exist LINE 3: FROM "orders" AS o
@kategorden2421
@kategorden2421 Жыл бұрын
Спасибо за видео! Хотела уточнить: мы когда заменили на 49 минуте видео ON... на USING, то я не поняла момент. А именно: JOIN соединяет последовательно таблицы (при использовании USING)? (Т к при использовании ON мы явно задавали какие столбцы каких таблиц соединяли, а в USING только имя атрибутов (столбиков))
@rootneo8766
@rootneo8766 Жыл бұрын
Кто-нибудь объясните в чем ошибка этого решения в 1-й задаче из ДЗ SELECT customers.company_name, first_name || ' ' || last_name AS full_name FROM customers, employees, shippers WHERE (customers.city = 'London' AND employees.city = 'London') AND shippers.company_name = 'Speedy Express'
@muhlymak
@muhlymak Жыл бұрын
а где ты потерял данные для orders? там же по факту весь запрос строится от заказов
@nurzatertugan1985
@nurzatertugan1985 6 ай бұрын
JOIN LATERAL если добавишь то было бы еще круче)
@jamjam3337
@jamjam3337 4 ай бұрын
😎
@user-qe3cn8cq9c
@user-qe3cn8cq9c Жыл бұрын
Автор, пожалуйста, больше никогда не советуйте использовать using() вместо on. Код НЕ становится более читабельным, это становится издевательством над теми, кто впоследствии будет сопровождать написанное подобным образом.
@floydzxc
@floydzxc Жыл бұрын
почему? всё повторяющееся убрано а нужное оставлено разве нет?
@alexzzy3461
@alexzzy3461 Жыл бұрын
Это неявное соединение. А если таблиц десятки и надо поменять их порядок в join-ах... У автора прослеживается отсутствие опыта работы с крупными системами и огромными запрсами)
@marlen011
@marlen011 Жыл бұрын
44:24 что такое | | ?? разъясните пажее
@muhlymak
@muhlymak Жыл бұрын
конкатенация же ш, это очевидно) вместо знака + для соединения разных значений в одно целое
@politehhnik
@politehhnik Жыл бұрын
Вот что непонятно: зачем прописывать референс, если потом то же самое повторяешь в джойне?
@vladshizikastrovskiy716
@vladshizikastrovskiy716 Жыл бұрын
у меня одного пишет отношение не существует?
@user-vz6uv7en8k
@user-vz6uv7en8k 3 ай бұрын
неудачные примеры с книгами, не воспринимается, проще надо, типа красный трактор, белый суперкар, черная легковушка, зеленый самокат и тд
@user-yo1ib2nc4j
@user-yo1ib2nc4j Жыл бұрын
Не знаю почему, но у меня выводит на одну строчку больше. Не так, как в видео.
@user-yo1ib2nc4j
@user-yo1ib2nc4j Жыл бұрын
select product_name, units_in_stock, contact_name, phone from products join suppliers using(supplier_id) join categories using(category_id) where category_name in ('Beverages','Seafood') and discontinued != 1 and units_in_stock < 20;
@simondiakov895
@simondiakov895 Жыл бұрын
@@user-yo1ib2nc4j у меня также и данные немного отличаются. Может быть база поменялась))
@user-ww9tl2nz3k
@user-ww9tl2nz3k Жыл бұрын
Аналогичная история: SELECT product_name, units_in_stock, contact_name, phone FROM products JOIN categories USING(category_id) JOIN suppliers USING(supplier_id) WHERE category_name IN ('Beverages', 'Seafood') AND discontinued = 0 AND units_in_stock < 20 ORDER BY units_in_stock уже думал, что у меня беда с головой
@cyber_stoner
@cyber_stoner 9 ай бұрын
39:52
@verakaro760
@verakaro760 Жыл бұрын
Я всё. К этому и уроку я всё. Увы. 😢
@alexzzy3461
@alexzzy3461 Жыл бұрын
Забавно. В разделе про рекурсивное соединение отсутствует рекурсия напрочь))) join между одной таблицей никакого отношения к рекурсии не имеет...
@EngineerSpock
@EngineerSpock Жыл бұрын
Странное описание. А там словами говорится в самом ролике что это имеет отношение к рекурсии?
@alexzzy3461
@alexzzy3461 Жыл бұрын
@@EngineerSpock Вот именно что не говорится, а в описании написано про рекурсию. Рекурсивное соедиенение это когда можно по заданному элементу получить все родительские, например. В sql server это при помощи CTE реализуется.
@EngineerSpock
@EngineerSpock Жыл бұрын
@@alexzzy3461 верно. Оч странно. Надо поправить)))
@RaptorT1V
@RaptorT1V 8 ай бұрын
52:22 ♂AS♂
@r0def
@r0def Жыл бұрын
Домашние задания очень трудные
@skpavlenko
@skpavlenko 2 жыл бұрын
В слове AS самое главное не сказать задница случайно. Так лучше "эз" сказать (з - очень краткое), а то и "аз" вообще чтобы наверняка 😄. Курс классный 👍
@harlok13
@harlok13 Жыл бұрын
можно не мучаться и говорить "элиас"
@ruslanc590
@ruslanc590 Жыл бұрын
Всё равно в ад, но хоть с отдельным котлом.
@EngineerSpock
@EngineerSpock Жыл бұрын
Кто куда зачем?)
@ruslanc590
@ruslanc590 Жыл бұрын
@@EngineerSpock 51:33, рассказываете про то, что нельзя использовать natural join. И большое спасибо за уроки!
@ilybaev
@ilybaev 2 жыл бұрын
нахер такие длинные запросы новичку, не понимаю.
@EngineerSpock
@EngineerSpock 2 жыл бұрын
Вы длинных запросов не видели. Это как раз уровень новичка
@SvyatoyVitaliy
@SvyatoyVitaliy Жыл бұрын
39:40 Не в укор автору (может это есть в более поздних уроках), похоже SELF JOIN'ом действительно называют разовый джойн на саму себя, но странно, что этот запрос называют иерархическим и рекурсивным. Рекурсии то нет =\. Ведь тут только два уровня - нулевой (сотрудник) и первый (его шеф). Логичным было бы получить полный путь от помощника уборщика до главы корпорации. В Оракле это решается через CONNECT BY. Здесь, похоже, подобное решается через CTE (WITH). Что-то вроде (не тестил, т.к. у нас в учебной бд менеджер не указан): WITH RECURSIVE tree AS ( SELECT employee_id, name, manager_id, 1 AS level FROM employees WHERE manager_id IS NULL -- Выбираем главу компании UNION ALL SELECT e.employee_id, e.name, e.manager_id, t.level + 1 FROM employees e JOIN tree t ON t.employee_id = e.manager_id ) SELECT employee_id, name, level FROM tree ORDER BY level, name; Запрос выводит главу компании, потом его ближайших подчиненных, потом подчиненных этих подчиненных и т.д. до последнего дворника. Или вот другой прикол - генерация числовой последовательности (можно и рандомной, тогда во второй столбец рандомные числа пихаем). Этот запрос проверил: WITH RECURSIVE tree AS ( SELECT 1 AS level UNION ALL SELECT t.level + 1 FROM tree t WHERE level
@SvyatoyVitaliy
@SvyatoyVitaliy Жыл бұрын
Кстати, это уже явно выходит за область курса (в отличии от предыдущего моего коммента), но очень советую всем, кто идет по этому курсу, поинтересоваться в качестве факультатива какие именно бывают джойны в плане алгоритма реализации. Сегодня этот вопрос на собесе в лёгкую прилетает даже джунам и это входит в минимум. Возможно его автор поднимет позже, когда дойдет до планов запроса, но раз уж это урок про джойны, то вскользь упомянуть стоит. Запрос в гугл "Nested Loop Join, Hash Join, Merge Join, Index Join".
@erwinrommel693
@erwinrommel693 20 күн бұрын
CREATE TABLE employee ( employee_id INT PRIMARY KEY, first_name VARCHAR (255) NOT NULL, last_name VARCHAR (255) NOT NULL, manager_id INT, FOREIGN KEY (manager_id) REFERENCES emlpoyee (employee_id) ); здесь мне говорит что такой таблицы нет
@erwinrommel693
@erwinrommel693 18 күн бұрын
я в место employee написал emlpoyee и 3 день искал что здесь не так и по 15 вариаций писал этот запрос ))))))))))))))))))))
Практический курс по SQL для начинающих - #4 Подзапросы в SQL
47:12
EngineerSpock - IT & программирование
Рет қаралды 53 М.
The Worlds Most Powerfull Batteries !
00:48
Woody & Kleiny
Рет қаралды 26 МЛН
Be kind🤝
00:22
ISSEI / いっせい
Рет қаралды 23 МЛН
Модификаторы классов, полей и методов в Java
5:15
Оксана Еськова. Основы программирования
Рет қаралды 18
Вся база SQL для начинающих за 1 час
1:19:48
Vlad Mishustin
Рет қаралды 198 М.
Вопросы по SQL и Базам Данных на интервью
14:36
Програмысли Влог
Рет қаралды 73 М.
SQL для начинающих: Индексы в PostgreSQL
27:41
EngineerSpock - IT & программирование
Рет қаралды 38 М.