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

Поделиться
HTML-код
  • Опубликовано: 16 янв 2025

Комментарии • 106

  • @RaptorT1V
    @RaptorT1V Год назад +12

    1:04:27 меня одного смущает, что это за abc такое, и почему у меня его нет?
    А также почему у меня есть "Côte de Blaye" (Beverages) и "Nord-Ost Matjeshering" (Seafood), а у вас этих наименований нет, хотя они также меньше 20

  • @SmokyBeast
    @SmokyBeast Год назад +11

    Отличный курс!
    Даже за платно никтотне объяснит более доходчиво! 🔥

  • @rika4253
    @rika4253 Год назад +7

    Лучшее объяснение Join'ов! Очень благодарна за курс!

  • @dh2102
    @dh2102 2 года назад +21

    Благодарю за спокойную грамотную подачу материала.

  • @ЕвгенийГригорьев-ж5з
    @ЕвгенийГригорьев-ж5з 3 года назад +21

    Лучший курс по SQL!

  • @Dimavolc
    @Dimavolc 6 месяцев назад +2

    Дикция топ , интеллект топ , все понятно , дай бог чтобы каждый кто хочет стать аналитиком , после этого видео приобрёл хотя бы 1/3 знаний для стартапа 😂❤ бро с меня подписка и лайк 👍

  • @Dima-Teplov
    @Dima-Teplov 8 месяцев назад +2

    Классный пример SELF JOIN, спасибо! :)

  • @Noor2Gun
    @Noor2Gun Год назад +2

    Лучший канал! Масса полезной информации, и четкое объяснение!

  • @ukrjork
    @ukrjork 11 месяцев назад +2

    По использованию 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

  • @ДенисГайвер-ю8р
    @ДенисГайвер-ю8р 2 года назад +3

    Огромная благодарность! Вы большой молодец! Сильно помогли разобраться в данной теме!

  • @nuneuzheli
    @nuneuzheli 2 года назад +3

    после изучения возможностей power query решил и SQL заняться, хорошая подача материала.

  • @memolog1337
    @memolog1337 5 месяцев назад +1

    Спасибо, буду изучать. Пока все понятно по курсу. 🦝🦝🦝

  • @АлександраМм
    @АлександраМм 3 года назад +8

    Спасибо за замечательные уроки!

  • @sergeym.1870
    @sergeym.1870 3 года назад +18

    На 9:40 разве строку предпоследнюю не забыл?
    West Coast / Chicago / Null / Null

    • @igorm.9845
      @igorm.9845 Год назад +1

      Всё так. У автора ошибка в результате FULL OUTER JOIN. Почему бы ему не сделать закрепленный комментарий с errata.

  • @МарияИсаева-ш6к
    @МарияИсаева-ш6к 2 года назад +2

    спасибо за Ваши видео от всей души

  • @Павел-щ5р8ы
    @Павел-щ5р8ы Год назад +2

    Учусь в skillfactory, модуль postgresql подача конечно......Проходил отдельно SQL у другого автора. Тут хорошая подача. Для меня самое сложно было осознать, что запросы идут снизу вверх (к примеру : сначала фильтрация, а только потом вывод, ну это лично моя проблема).Автора приятно слушать, прям оратор=). Обязательно всем к просмотру!!

  • @marlen011
    @marlen011 2 года назад +2

    Спасибо что делишься знаниями

  • @IsYourFavorite
    @IsYourFavorite Год назад +3

    Почему в соединённой таблице в FULL OUTER JOIN 10:36 нет строки West Coast Publishing CHicago ???
    И ISBN столбец в CROSS JOIN? 12:00 ?

  • @korumika3798
    @korumika3798 Год назад +2

    34:47 вспомнил старый мем "Должны работать трезвые водители, но у нас таких нет, все нормальные ребята" :D

  • @ОлександрПархоменко-г4й

    12:03 в результате должен был быть ещё и столбик ISBN?

  • @salivona
    @salivona 3 года назад +4

    Спасибо, классные видео!

  • @FFl1s
    @FFl1s 8 месяцев назад +2

    У тебя в четвертом тайме опечатка "Рекурсивное соедиЕНЕние (джойн) - SELF JOIN"
    =]

  • @ВладимирБатюшкин-р2ь
    @ВладимирБатюшкин-р2ь 2 года назад +2

    Где в результирующей таблице ISBN в cross join?

  • @defaulterror2480
    @defaulterror2480 Год назад +2

    25:30. У меня вопрос, почему мы берем unit_price именно из таблицы products? Ведь по идее наша таблица, которая в конце получится должна как бы описывать заказы, то есть почему бы не взять unit_price из order_details? И вообще почему unit_price различается в этих таблицах?

  • @АбылайШинтемиров
    @АбылайШинтемиров 7 месяцев назад +1

    Почему когда я пишу любой запрос кроме Select... From; у меня ничего не выводит?

  • @ИльяГабышев-ш5д
    @ИльяГабышев-ш5д 11 месяцев назад +6

    неудачные примеры с книгами, не воспринимается, проще надо, типа красный трактор, белый суперкар, черная легковушка, зеленый самокат и тд

  • @EugenePetrov-l6l
    @EugenePetrov-l6l 5 месяцев назад +1

    У нас на таблице orders стоит ограничение внешнего ключа fk_orders_employees. Кажется оно не даст создать заказ без привязки к существующему работнику. Получается запрос left join orders... where order_id is NULL будет всегда возвращать пусто. Но это не точно)

  • @PaveL123-w3c
    @PaveL123-w3c 6 месяцев назад +1

    Хороший курс,но вот что происходит на 44:03, что за черточки,что за кавычки пустые, что вообще за синтаксис и что вообще происходит с буквами не понятно. Причем в видео подано как будто это уже проходили.

    • @ofmoonsbirdsandmonsters
      @ofmoonsbirdsandmonsters 2 месяца назад

      Да, как-то автор не остановился на этом. Две вертикальные черточки рядом - это оператор конкатенации, то есть объединения строк. Кавычки пустые это просто чтобы был пробел между словами, которые мы объединяем. То что происходит с буквами показывается на 45:00 - мы указываем из какой таблицы выбираем данные (в данном случае employee) и даем ей псевдоним e, чтобы было проще обращаться к столбцам этой таблицы. То есть запись е.first_name означает, что мы обращаемся к столбцу first_name таблицы employee. Надеюсь, понятно объяснил.
      PS: и на 59:00 он говорил о об этих двух вертикальных черточках.

    • @IG8063
      @IG8063 2 месяца назад

      Для меня тоже это было неожиданно. Но в целом можно все это чекнуть самостоятельно, там весьма просто по этому оператору

  • @fedordostoevskiy4209
    @fedordostoevskiy4209 Год назад +1

    Молодец, конечно. И сразу понятно, что курс для новичков. Другие непонятно для кого, для новичков непонятно ничего, для остальных слабо.

  • @ДенСотен
    @ДенСотен Год назад +2

    25:22
    почему используем именно products.unit_price, а не order_details.unit_price ? и какая разница между этими столбцами ? почему в них разные данные ?

  • @andreykrauch5027
    @andreykrauch5027 Год назад

    Спасибо👍😀

  • @Abrashitov
    @Abrashitov 2 года назад +6

    Забавно видеть, как чем дальше мы идем, тем меньше просмотров у курса и меньше комментариев. Надеюсь, я дойду до конца)

    • @EngineerSpock
      @EngineerSpock  2 года назад +10

      Заметьте, так в принципе жизнь устроена. Сидеть рубиться в приставку приятнее гораздо.

    • @haryariy2089
      @haryariy2089 2 года назад +5

      @@EngineerSpock тут скорее всего сливаются на ' ВЕСЬ SQL за 30 минут или познать IT за неделю' !!

    • @monkdok
      @monkdok 2 года назад +5

      @@haryariy2089 хауди хо, друзья))

    • @datatrainee198
      @datatrainee198 Год назад

      прём до конца...

    • @Rebe-Caufman
      @Rebe-Caufman Год назад +1

      это не полный курс

  • @РинатГазизуллин-й6р
    @РинатГазизуллин-й6р 3 года назад +2

    да совсем не дурно, возьму на заметку.

  • @СофикоПерсикова
    @СофикоПерсикова 3 года назад +2

    спасибо

  • @antonturishchev7182
    @antonturishchev7182 2 года назад +1

    Спасибо за видео, отдельная джакузи в раю за них. А что за топ курс на английском упоминали?

  • @igorm.9845
    @igorm.9845 Год назад +7

    Очень жаль, что не рассказано, что в ON (...) можно писать любые условия и это иногда полезно.
    Ну и в FULL OUTER JOIN у автора ошибка. Не хватает паблишера с ID 5.

    • @RaptorT1V
      @RaptorT1V Год назад

      какие условия? в каких случаях это полезно?

  • @arthur_478
    @arthur_478 Год назад +3

    У меня в решении второй задачи на 1:04:21 получается другой результат. Получается 6 строк и 2 из них отличаются от тех, что на экране. Переписал в точности как на экране, то же самое. Это только у меня такое получается? Может быть дамп базы поменялся после записи курса?

    • @Mistyhops
      @Mistyhops Год назад +1

      да, скорее всего поменялась база, у меня тоже другой результат

    • @Mikhalich98rus
      @Mikhalich98rus Год назад

      Тоже самое. Дополнительно получаю позицию с product_name = "Côte de Blaye"

    • @muhlymak
      @muhlymak Год назад

      плюсую, все ок, должно быть 6 записей если ничего не делали с базой, там автор скорее всего в других уроках что то удалял)

    • @bepisbezpepisa
      @bepisbezpepisa 10 месяцев назад

      то же самое

  • @my_it_study
    @my_it_study 2 месяца назад

    Спасибо за курс)) Изучаю материал тут, а потом делаю домашку на GeekBrains =/
    Первая часть видео конечно не очень получилась в таком формате. Лучше было бы сделать слайды, где каждая табличка имеет свой цвет, а в результате JOINa каждая клетка имела свой цвет (цвет таблички, из которой она была взята).

  • @ВладимирМонахов-е6у
    @ВладимирМонахов-е6у 2 года назад +2

    Спасибо за качественный контент)
    Вопрос: нормально ли, что я не всё запоминаю из этих лекций, а только какие-то ключевые понятия и команды SQL или всё таки нужно зубрить для хорошего результата в будущем?

    • @farik7432
      @farik7432 2 года назад

      Думаю, если хочешь быть специалистом в сфере базы данных (Data Science, Backend-разработчик), то лучше, конечно, знать и запоминать все. Если изучаешь SQL для общего понимания картины со стороны back, то можно просто посмотреть как работает эта система и не углубляться.

  • @Vasu1982ca
    @Vasu1982ca 2 года назад +1

    Как увеличить производительность программы? Я так понимаю там изначально выделен очень маленький объём памяти. как его увеличить и до какого предела от общего объема ram? А то запросы могут минуты обрабатываться....

  • @RaptorT1V
    @RaptorT1V Год назад +1

    52:22 ♂AS♂

  • @diz996
    @diz996 2 года назад +1

    Хороший курс, но у меня почему то нет Speedy Express

  • @marlen011
    @marlen011 2 года назад

    44:24 что такое | | ?? разъясните пажее

    • @muhlymak
      @muhlymak Год назад

      конкатенация же ш, это очевидно) вместо знака + для соединения разных значений в одно целое

  • @amigo221
    @amigo221 Месяц назад

    А если я выполнил 1 и 2 задачу с помощу LEFT JOIN, это ошибка?

  • @СтаниславСвириденко-ш9й

    Автор, пожалуйста, больше никогда не советуйте использовать using() вместо on. Код НЕ становится более читабельным, это становится издевательством над теми, кто впоследствии будет сопровождать написанное подобным образом.

    • @floydzxc
      @floydzxc Год назад

      почему? всё повторяющееся убрано а нужное оставлено разве нет?

    • @alexzzy3461
      @alexzzy3461 Год назад

      Это неявное соединение. А если таблиц десятки и надо поменять их порядок в join-ах... У автора прослеживается отсутствие опыта работы с крупными системами и огромными запрсами)

  • @hil413
    @hil413 2 года назад

    Спасабо!.
    А где найти такую тестовую Базу данных которой вы пользуетесь на протежении курса?

    • @Abrashitov
      @Abrashitov 2 года назад +2

      В первом выпуске курса под описанием видео

  • @Учусь-л7ц
    @Учусь-л7ц 2 года назад

    Самое тяжёлое когда join объединяется с group by

  • @СергейТимофеев-п6н
    @СергейТимофеев-п6н 6 месяцев назад

    Если тут ни одно из ДЗ не смог выполнить, то не стоит пока идти дальше?

    • @СергейТимофеев-п6н
      @СергейТимофеев-п6н 3 месяца назад

      Спустя 3 месяца, пройдя 2 курса на степике и 1 курс карпова на его сайте я так и не смог выполнить эти ДЗ.

  • @СанычШкуркин
    @СанычШкуркин Год назад

    у меня в первом задании пишет ERROR: relation "orders" does not exist
    LINE 3: FROM "orders" AS o

  • @politehhnik
    @politehhnik 2 года назад

    Вот что непонятно: зачем прописывать референс, если потом то же самое повторяешь в джойне?

  • @nurzatertugan1985
    @nurzatertugan1985 Год назад

    JOIN LATERAL если добавишь то было бы еще круче)

  • @jamjam3337
    @jamjam3337 11 месяцев назад

    😎

  • @tanya6617
    @tanya6617 2 года назад

    Не поняла, в каких случаях использовать INNER, когда LEFT JOIN. И как определить какое название таблицы нужно писать первой, а какую второй: from products join categories или from products join categories

    • @EngineerSpock
      @EngineerSpock  2 года назад

      Пересмотрите ещё раз, в ролике всё это есть

  • @ВячеславСолодов-р3в
    @ВячеславСолодов-р3в 2 года назад +1

    Не знаю почему, но у меня выводит на одну строчку больше. Не так, как в видео.

    • @ВячеславСолодов-р3в
      @ВячеславСолодов-р3в 2 года назад +1

      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 2 года назад

      @@ВячеславСолодов-р3в у меня также и данные немного отличаются. Может быть база поменялась))

    • @Nickname-youtube1
      @Nickname-youtube1 Год назад

      Аналогичная история:
      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
      уже думал, что у меня беда с головой

  • @vladshizikastrovskiy716
    @vladshizikastrovskiy716 2 года назад

    у меня одного пишет отношение не существует?

  • @esferon1
    @esferon1 2 года назад

    Понятны типы JOINов, объедиение нескольких таблиц, группирование, комбинирование фильтров по цене, количеству и т.д.
    Но непонятны порядок и действия по столбцам с orders.emploee_id и остальных после ON, особенно когда в SELECT другие столбцы непонятно как они взаимодействуют emploees.emploee_id и другими id.

    • @ZZZMerk
      @ZZZMerk 2 года назад +2

      Все происходит благодаря тому самому внешнему ключу (FOREIGN KEY). Зависимая таблица привязана к первичному ключу (как правило) в главной таблице через внешний ключ, что и позволяет достать какие-то данные :) То есть внешний ключ - это вроде указания на связь с другой таблицей, потому что данные почти всегда связаны между собой.

    • @esferon1
      @esferon1 2 года назад +1

      @@ZZZMerk Ок. Буду пробовать работать с ними.

  • @cyber_stoner
    @cyber_stoner Год назад

    39:52

  • @alexzzy3461
    @alexzzy3461 Год назад

    Забавно. В разделе про рекурсивное соединение отсутствует рекурсия напрочь))) join между одной таблицей никакого отношения к рекурсии не имеет...

    • @EngineerSpock
      @EngineerSpock  Год назад

      Странное описание. А там словами говорится в самом ролике что это имеет отношение к рекурсии?

    • @alexzzy3461
      @alexzzy3461 Год назад

      @@EngineerSpock Вот именно что не говорится, а в описании написано про рекурсию. Рекурсивное соедиенение это когда можно по заданному элементу получить все родительские, например. В sql server это при помощи CTE реализуется.

    • @EngineerSpock
      @EngineerSpock  Год назад

      @@alexzzy3461 верно. Оч странно. Надо поправить)))

  • @verakaro760
    @verakaro760 Год назад

    Я всё. К этому и уроку я всё. Увы. 😢

  • @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? там же по факту весь запрос строится от заказов

  • @kategorden2421
    @kategorden2421 2 года назад

    Спасибо за видео! Хотела уточнить: мы когда заменили на 49 минуте видео ON... на USING, то я не поняла момент. А именно: JOIN соединяет последовательно таблицы (при использовании USING)? (Т к при использовании ON мы явно задавали какие столбцы каких таблиц соединяли, а в USING только имя атрибутов (столбиков))

  • @r0def
    @r0def 2 года назад

    Домашние задания очень трудные

  • @skpavlenko
    @skpavlenko 3 года назад +1

    В слове AS самое главное не сказать задница случайно. Так лучше "эз" сказать (з - очень краткое), а то и "аз" вообще чтобы наверняка 😄. Курс классный 👍

    • @harlok13
      @harlok13 Год назад

      можно не мучаться и говорить "элиас"

  • @ruslanc590
    @ruslanc590 2 года назад

    Всё равно в ад, но хоть с отдельным котлом.

    • @EngineerSpock
      @EngineerSpock  2 года назад

      Кто куда зачем?)

    • @ruslanc590
      @ruslanc590 2 года назад +1

      @@EngineerSpock 51:33, рассказываете про то, что нельзя использовать natural join. И большое спасибо за уроки!

  • @EngineerSpock
    @EngineerSpock  Год назад +2

    Данный курс на RUclips - сильно укороченная (демо) версия полного курса, который вы можете приобрести на 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
    *****

  • @ilybaev
    @ilybaev 2 года назад

    нахер такие длинные запросы новичку, не понимаю.

    • @EngineerSpock
      @EngineerSpock  2 года назад +15

      Вы длинных запросов не видели. Это как раз уровень новичка

  • @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 Год назад +1

      Кстати, это уже явно выходит за область курса (в отличии от предыдущего моего коммента), но очень советую всем, кто идет по этому курсу, поинтересоваться в качестве факультатива какие именно бывают джойны в плане алгоритма реализации. Сегодня этот вопрос на собесе в лёгкую прилетает даже джунам и это входит в минимум. Возможно его автор поднимет позже, когда дойдет до планов запроса, но раз уж это урок про джойны, то вскользь упомянуть стоит. Запрос в гугл "Nested Loop Join, Hash Join, Merge Join, Index Join".

  • @AlexBobkovpython
    @AlexBobkovpython 23 дня назад

    Код таблицы и данных для темы SELF JOIN:
    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 employee (employee_id)
    );
    INSERT INTO employee (employee_id, first_name, last_name, manager_id)
    VALUES
    (1, 'Windy', 'Hays', NULL),
    (2, 'Ava', 'Christensen', 1),
    (3, 'Hassan', 'Conner', 1),
    (4, 'Anna', 'Reeves', 2),
    (5, 'Sau', 'Norman', 2),
    (6, 'Kelsie', 'Hays', 3),
    (7, 'Tory', 'Goff', 3),
    (8, 'Salley', 'Lester', 3);

  • @erwinrommel693
    @erwinrommel693 8 месяцев назад

    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 8 месяцев назад

      я в место employee написал emlpoyee и 3 день искал что здесь не так и по 15 вариаций писал этот запрос ))))))))))))))))))))

  • @ПавелК-ш7к
    @ПавелК-ш7к 3 года назад

    Спасибо