Практический курс по SQL для начинающих - #4 Подзапросы в SQL

preview_player
Показать описание
Данный курс на YouTube - сильно укороченная (демо) версия полного курса, который вы можете приобрести на stepik (с карточкой из РФ) или Udemy (с карточкой не из РФ)

Купить полный курс на stepik:

Купить полный курс на udemy:

---------------------------------------------------------------------------------------------

Базы данных (БД) вообще и реляционные базы данных в частности - очень широкие темы. Эта серия уроков по SQL посвящена именно разработке реляционных баз данных под управлением PostgreSQL (PostgreSQL - это СУБД т.е. система управления базами данных).

На этом курсе по SQL вы освоите основы SQL: узнаете что такое SQL, научитесь писать SQL запросы различной сложности. Все те знания, которые вы получите на курсе легко применимы и к другим СУБД, таким как MySQL, Microsoft SQL Server, Oracle.

Изучение SQL это один из самых быстрых способов подняться по карьерной лестнице и начать зарабатывать ещё больше. На курсе вы будете учиться и получать задания для собственной проверки и улучшения понимания материала.

В данном видео уроке по SQL мы разбираем:
00:00 Введение в SQL подзапросы
14:05 WHERE EXISTS
22:26 Подзапросы с квантификаторами ANY, ALL
34:40 ДЗ "SQL подзапросы"
34:50 ДЗ "SQL подзапросы" - Решение

#sql #postgresql #engineerspock

Рекомендации по теме
Комментарии
Автор

еще не видел никого, кто так доходчиво объясняет.Я говорю не только по этому курсу, а вообще про манеру объяснений.Супер

vujnkew
Автор

первый ресурс, который я нашёл, где обстоятельно обьясняется для чего и при каких обстоятельствах нужны подзапросы. Лайк.

zfegbfv
Автор

крутой урок. я заваливаюсь на подзапросах, стало более понятно. спасибо!

a.nikitina
Автор

Что-то с ALL и ANY очень сильно пришлось думать о том, все ли в порядке с моими когнитивными функциями)) Вот очень хорошее определение этих квантификаторов
Оператор ANY возвращает true, если какое-либо из значений подзапроса удовлетворяет условию.
Оператор ALL возвращает true, если все значения подзапроса удовлетворяют условию.

drxuoqf
Автор

Спасибо большое, все теперь очень понятно)

akamegakill
Автор

Все круто. Только в ДЗ условия, как по мне, должны быть чуть конкретней

rpfjetc
Автор

Спасибо за классные уроки, действительно тщательно разобраны все темы.
Однако хотелось бы видеть поставленные задачи визуально, скажет написанным комментарием на пустом месте, после чего описание задачи с помощью кода. Сложность запросов как то не пропорционально растет и держать их в голове пока смотришь видео уже супер сложно(приходится самому себе сидеть писать что б разобраться)

---zklz
Автор

Подскажите, пожалуйста, правильно ли я понимаю, что вам необязательно было ставить DISTINCT в подзапросе на 6:20? Так как смысла в нем никакого нет, по факту мы же подзапросом выполняем соединение и достаточно будет:

SELECT company_name FROM suppliers
WHERE country IN (SELECT country FROM customers)

wwtlnzk
Автор

В 3-м разделе (разбор примеров вложенных select'ов, когда переписываете join во вложенный select, вы говорите что без join здесь не обойтись. Прекрасно можно обойтись вторым вложенным select'ом
select distinct company_name
from customers where customer_id in
(select customer_id from orders where order_id in
select order_id from order_details where quantity > 40))

zglemsu
Автор

Я дошёл до этого четвертого урока, и вот что скажу.
Плюс минус это второй день изучения языка. Но он прям ОЧЕНЬ тяжело идёт. Намного тяжелее, чем первые три месяца изучения python. И то там дальше пошло про GIL и асинхронку потому что.
Я как бы всё понимаю и жёстко конспектирую в Notion, но оно реально сложнее для меня чем ООП в питоне к

greeshanka
Автор

идеальный курс для такого тугодума, как я 😅

ToPGeaR
Автор

@ ДЗ "SQL подзапросы" Задание номер 2 : ....стоимость фрахта которых больше или равна... в разборе решения же строго >

bqjtuxu
Автор

18:00 - 20:25 немного странно зачем для этих двух примеров взят временной интервал 1995 года, если заказов в этот период вообще не было по таблице Orders. Соответственно результат выборки либо отсутствие всех Company_name/Product_name при использовании WHERE EXISTS, либо, соответственно, отображаются все существующие Company_name/Product_name при использовании WHERE NOT EXISTS. В любом случае, спасибо за уроки! Все очень толково.

anatolytyurin
Автор

Подскажите, мы во втором задании считаем сумму стоимости фрахтов или просто сумму фрахтов. В видео про цену ни чего не сказано

rypmahka
Автор

27:37 вопрос не в простоте а в оптимизации - join расходует больше памяти, подзапрос чуть дольше выполняется, насколько я помню. поправьте если неправ

indominusmonster
Автор

Я правильно понял, что в ваших примерах в подзапросах ANY ( ) работает по сути аналогично IN ( ) ?. Поскольку результат одинаковый хотелось бы понять когда предпочтительней IN, а когда ANY

ivanshipilov
Автор

Блин, когда ты первый раз по это ДБ гуляешь, на слух сложно воспринимать условия задач, вроде не сложно, если бы было на бумажке и с условными таблицами, но так угарнул с 30:58 зачитка репа

korumika
Автор

Вместо ANY можно использовать IN? типа SELECT IN(SELECT...)

norkrze
Автор

Подскажите, почему в примере с непродающимися продуктами мы в подзапросе выводим order_id? Как он работает с таблицей products? Join в подзапросе работает с основной частью запроса? Я вижу что все получается, но не понимаю.
И еще, если изменить код
SELECT product_name
FROM products
WHERE NOT EXISTS (SELECT orders.order_id FROM orders
JOIN order_details USING (order_id)
WHERE order_details.product_id = products.product_id
AND order_date BETWEEN '1995-02-01' AND '1995-02-15')
на

SELECT product_name
FROM products
WHERE NOT EXISTS (SELECT order_details.product_id FROM order_details
JOIN orders USING (order_id)
WHERE order_date BETWEEN '1995-02-01' AND '1995-02-15')

это будет ошибкой? Значения выдает те же.

lnzhjrj
Автор

Спасибо за материал. Потерялся на 7:20. А по какому ключу мы соединяем suppliers и customers? Я до этого примера был твердо уверен, что у таблиц должна быть ссылка одна на другую или ссылка на промежуточную таблицу, чтобы их заджойнить. Внешний ключ там. А здесь мы джойним просто по значению страны. И так можно, оказывается. Ага, foreign key вообще не нужен, чтобы связать таблицы, это только ограничение для удаления. А заджойнить мы можем все, что угодно. employee_id с product_id. Интересно, но нелогично

viktorsokolov