Всем хорошей субботы!
Смог увидеть ошибку? Поставь лайк, если да. Если ты еще только начинаете писать на SQL, то, скорее всего, эта задача будет несколько сложна.
Итак, как ты думаешь, сколько строк вернет данный запрос?
Данный запрос не вернет ни одной строки! Ошибка заключается в том, что подзапрос должен был быть написан так, чтобы проверять подзапросом на отсутствие данных для каждой конкретной строки внешнего, то есть основного, запроса. Подзапрос написан для того, чтобы проверить отсутствие данных в таблице PersonCars для каждого сотрудника из таблицы Persons, который выводится в основном запросе. А сейчас наш подзапрос не связан с внешним запросом! Он проверяет на отсутствие следующих данных: что в таблице PersonCars отсутствуют строчки, в которых PersonID был бы равен самому себе (посмотри еще раз SQL-запрос на фото выше)!
Когда в подзапросе используется имя столбца без указания имени таблицы или алиаса (в нашем случае нужно было указать Person.PersonID), то СУБД сначала ищет столбец который имеется ввиду в рамках своего же SELECT, то есть подзапроса. Только если не находит столбец в таблице из которой выбираются данные или среди таблиц, которые джоинятся, то пробует искать столбец с таким именем во внешнем (основном) запросе. В нашем случае PersonID есть в таблице PersonCars. Поэтому он сравнивается сам с собой. Конечно, для всех строчек PersonCars значение в столбце PersonID равно самому себе. Поэтому, какую бы строчку из таблицы Persons мы ни выводили, всегда существуют данные в таблице PersonCars где бы PersonID был бы равен сам себе. Поэтому NOT EXISTS для всех строчек таблицы Persons даст отрицательный результат и ни один сотрудник не выведется.
Вот исправленное решение:
SELECT *
FROM Persons
WHERE NOT EXISTS (SELECT *
FROM PersonCars
WHERE PersonID = Persons.PersonID)
Если необходимо подзапрос связывать с внешним запросом, например, как в задаче выше, то крайне желательно, все же, в подзапросах, при написании имен столбцов, писать еще и имя таблицы этого столбца.
Поставь лайк, если увидел ошибку в запросе и без меня 👍
Смог увидеть ошибку? Поставь лайк, если да. Если ты еще только начинаете писать на SQL, то, скорее всего, эта задача будет несколько сложна.
Итак, как ты думаешь, сколько строк вернет данный запрос?
Данный запрос не вернет ни одной строки! Ошибка заключается в том, что подзапрос должен был быть написан так, чтобы проверять подзапросом на отсутствие данных для каждой конкретной строки внешнего, то есть основного, запроса. Подзапрос написан для того, чтобы проверить отсутствие данных в таблице PersonCars для каждого сотрудника из таблицы Persons, который выводится в основном запросе. А сейчас наш подзапрос не связан с внешним запросом! Он проверяет на отсутствие следующих данных: что в таблице PersonCars отсутствуют строчки, в которых PersonID был бы равен самому себе (посмотри еще раз SQL-запрос на фото выше)!
Когда в подзапросе используется имя столбца без указания имени таблицы или алиаса (в нашем случае нужно было указать Person.PersonID), то СУБД сначала ищет столбец который имеется ввиду в рамках своего же SELECT, то есть подзапроса. Только если не находит столбец в таблице из которой выбираются данные или среди таблиц, которые джоинятся, то пробует искать столбец с таким именем во внешнем (основном) запросе. В нашем случае PersonID есть в таблице PersonCars. Поэтому он сравнивается сам с собой. Конечно, для всех строчек PersonCars значение в столбце PersonID равно самому себе. Поэтому, какую бы строчку из таблицы Persons мы ни выводили, всегда существуют данные в таблице PersonCars где бы PersonID был бы равен сам себе. Поэтому NOT EXISTS для всех строчек таблицы Persons даст отрицательный результат и ни один сотрудник не выведется.
Вот исправленное решение:
SELECT *
FROM Persons
WHERE NOT EXISTS (SELECT *
FROM PersonCars
WHERE PersonID = Persons.PersonID)
Если необходимо подзапрос связывать с внешним запросом, например, как в задаче выше, то крайне желательно, все же, в подзапросах, при написании имен столбцов, писать еще и имя таблицы этого столбца.
Поставь лайк, если увидел ошибку в запросе и без меня 👍
👍6
"Среда пришла - неделя прошла" 🙂 Надеюсь, у всех есть что-то, что вы узнали новое на этой неделе в копилочку опыта и компетентности.
👍2
Предлагаю немного поразбирать "чужой код". Особенно это будет полезно и ПОНЯТНО, если ты уже знаком с подзапросами в блоке SELECT:
https://zen.yandex.ru/media/id/6141a8eaf1e1477af4f85ca7/62bc3891ac401054d17a7314
https://zen.yandex.ru/media/id/6141a8eaf1e1477af4f85ca7/62bc3891ac401054d17a7314
Дзен | Статьи
Хитрые решения нетипичных задач с использованием подзапросов в блоке SELECT
Статья автора «Илья Хохлов» в Дзене ✍: В первый же рабочий день нас просит о помощи коллега.
👍5
Здравствуйте, друзья! Интересно проверить себя на собеседовании по SQL? Предлагаю вопрос. Ответ, как всегда, в следующем сообщении.
Выберите верные утверждения (возможно несколько вариантов):
1) NULL <> 1
2) NULL <> NULL
3) NULL = NULL
4) NULL IS NOT NULL
5) NULL IS NULL
Выберите верные утверждения (возможно несколько вариантов):
1) NULL <> 1
2) NULL <> NULL
3) NULL = NULL
4) NULL IS NOT NULL
5) NULL IS NULL
👍14
Правильный вариант только один - номер 5. То есть NULL IS NULL. Поставьте, пожалуйста, лайк, кто ответил правильно! 😉
🔥9
Давайте вспомним как делается комментирование SQL кода. И для чего его можно использовать:
https://zen.yandex.ru/media/iliahohlov/kommentirovanie-sqlkoda-62bdfe307a2e4f0f3ba1519f
https://zen.yandex.ru/media/iliahohlov/kommentirovanie-sqlkoda-62bdfe307a2e4f0f3ba1519f
Дзен | Статьи
Комментирование SQL-кода
Статья автора «Илья Хохлов» в Дзене ✍: В SQL, как и во многих компьютерных языках, можно оставлять комментарии прямо в коде. Чтобы, например, пояснять для чего делается тот или иной расчет.
Всем привет!
Ровно такую же картину, что запостил выше, я увидел распечатанной у своего друга в рабочем кабинете на стене. У него в офисе вообще вся стена подобным юмором обклеена. А сегодня наткнулся на нее в Интернете и решил поделиться с вами.
Ровно такую же картину, что запостил выше, я увидел распечатанной у своего друга в рабочем кабинете на стене. У него в офисе вообще вся стена подобным юмором обклеена. А сегодня наткнулся на нее в Интернете и решил поделиться с вами.
image_2022-07-05_17-10-12.png
8.8 KB
Решите еще одну задачу из тех, что предлагаются на собеседованиях
Имеется таблица:
Имеется таблица:
Какие из нижеперечисленных запросов вернут 0:
1.
SELECT SUM(PRICE)
FROM Table1
WHERE NAME = '
2.
SELECT COUNT(*)
FROM Table1
WHERE NAME = '
3.
SELECT MIN(PRICE)
FROM Table1
WHERE NAME = '
4.
SELECT AVG(PRICE)
FROM Table1
WHERE NAME = '
Ответ, как всегда, в следующем сообщении.
1.
SELECT SUM(PRICE)
FROM Table1
WHERE NAME = '
Гитара'2.
SELECT COUNT(*)
FROM Table1
WHERE NAME = '
Гитара'3.
SELECT MIN(PRICE)
FROM Table1
WHERE NAME = '
Гитара'4.
SELECT AVG(PRICE)
FROM Table1
WHERE NAME = '
Гитара'Ответ, как всегда, в следующем сообщении.
👍11
Всем привет! Всем доброго дня!
Правильным ответом будет п.2. Только функция COUNT (при подсчете количества значений) даст 0. Согласно условию WHERE из таблицы будет получено 0 строк. Функции SUM, MIN, MAX и AVG выбрали бы сумму, минимальное, максимальное или среднее значение из выбранных из таблицы значений. Но, так как из таблицы согласно условию, вообще ничего не выбралось, то и сумма, минимальное, максимальное или среднее значение не может быть рассчитана.
Поставьте лайк (или другой значок) если ответили правильно!
Правильным ответом будет п.2. Только функция COUNT (при подсчете количества значений) даст 0. Согласно условию WHERE из таблицы будет получено 0 строк. Функции SUM, MIN, MAX и AVG выбрали бы сумму, минимальное, максимальное или среднее значение из выбранных из таблицы значений. Но, так как из таблицы согласно условию, вообще ничего не выбралось, то и сумма, минимальное, максимальное или среднее значение не может быть рассчитана.
Поставьте лайк (или другой значок) если ответили правильно!
👍13
Добрый день, друзья!
На неделе записал видео про сортировку получаемых запросом данных. Что можно писать в ORDER BY и что не рекомендуется.
Выложил на нашем YouTube-Канале:
https://youtu.be/zaMDg7wdEYg
На неделе записал видео про сортировку получаемых запросом данных. Что можно писать в ORDER BY и что не рекомендуется.
Выложил на нашем YouTube-Канале:
https://youtu.be/zaMDg7wdEYg
YouTube
Как не надо делать сортировку в SQL запросах
Сортировка получаемых данных. Блок ORDER BY. Многоуровневая сортировка. Использование CASE в ORDER BY. Что не нужно писать в ORDER BY - рекомендации ведущих софтверных компаний.
Яндекс.Дзен: https://zen.yandex.ru/iliahohlov
Телеграм-канал: https://t.me/s…
Яндекс.Дзен: https://zen.yandex.ru/iliahohlov
Телеграм-канал: https://t.me/s…
👍5
Всем хорошего понедельника!
В ближайшее время буду проводить вебинары, о которых заранее буду информировать здесь! Буду стараться объяснять все понятно и отвечать на все вопросы! 🔔 Предлагаю порешать задачи вместе! 🙂💪
В ближайшее время буду проводить вебинары, о которых заранее буду информировать здесь! Буду стараться объяснять все понятно и отвечать на все вопросы! 🔔 Предлагаю порешать задачи вместе! 🙂💪
👍6
Дорогие друзья, всем привет!
Подготовил небольшую статью про объедение данных. Собрал всю нужную информацию про UNION и UNION ALL.
Если Вы в рамках курса еще не дошли до UNION-ов, то пока проигнорируйте эту статью. Позже прочитаете 🙂
https://zen.yandex.ru/media/iliahohlov/vse-samoe-vajnoe-pro-union-i-union-all-62cd39fa9ee0340c925c180f
Подготовил небольшую статью про объедение данных. Собрал всю нужную информацию про UNION и UNION ALL.
Если Вы в рамках курса еще не дошли до UNION-ов, то пока проигнорируйте эту статью. Позже прочитаете 🙂
https://zen.yandex.ru/media/iliahohlov/vse-samoe-vajnoe-pro-union-i-union-all-62cd39fa9ee0340c925c180f
Дзен | Статьи
Все самое важное про UNION и UNION ALL
Статья автора «Илья Хохлов» в Дзене ✍: В некоторых случаях очень сложно вывести все необходимые данные с помощью одной команды SELECT, например, нам необходимо было бы вывести данные из одной таблицы
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Здравствуйте, друзья! Немного it-юмора!🙂
😁8