Здравствуйте, друзья!
Всем хорошего начала рабочей и учебной недели!
Нашёл ещё одну интересную задачу по SQL.
Всем хорошего начала рабочей и учебной недели!
Нашёл ещё одну интересную задачу по SQL.
Все ли строки из таблицы VOUCHERS будут отобраны следующим запросом?
SELECT * FROM VOUCHERS WHERE ID_CODE = 1
UNION SELECT * FROM VOUCHERS WHERE ID_CODE <> 1
SELECT * FROM VOUCHERS WHERE ID_CODE = 1
UNION SELECT * FROM VOUCHERS WHERE ID_CODE <> 1
Anonymous Quiz
49%
Да
51%
Нет
Всем доброго понедельника!
Приходилось уже искать дубли в таблице?
Работая с некоторой таблицей, иногда может понадобиться найти строки, у которых будет одинаковое значение в каком-нибудь столбце (или комбинации столбцов). Например, нужно проверить, есть ли в таблице CLIENTS строки, у которых было бы одинаковое значение в столбце EXT_CODE (ext - сокращение от английского external, то есть "внешний").
Можно легко найти дубли среди клиентов по внешнему коду если мы по этому столбцу сгруппируем ("схлопнем") все строки таблицы и при этом воспользуемся HAVING-ом, чтобы после группировки ("схлопывания") отобразить в результате только записи, куда сгруппировалось ("схлопнулось") более одной строки.
Решение:
SELECT EXT_CODE,
COUNT(*)
FROM CLIENTS
GROUP BY EXT_CODE
HAVING COUNT(*) > 1
Как видишь, WHERE не используется, а значит будут сначала отобраны все строки из таблицы клиентов. Затем они будут сгруппированы по EXT_CODE и после группировки мы получим внешние коды клиентов, по которым есть более одного клиента на один внешний код.
Позже планирую усложнить пример и дополнить статью.
Спасибо за внимание и, ещё раз, хорошего дня!
Приходилось уже искать дубли в таблице?
Работая с некоторой таблицей, иногда может понадобиться найти строки, у которых будет одинаковое значение в каком-нибудь столбце (или комбинации столбцов). Например, нужно проверить, есть ли в таблице CLIENTS строки, у которых было бы одинаковое значение в столбце EXT_CODE (ext - сокращение от английского external, то есть "внешний").
Можно легко найти дубли среди клиентов по внешнему коду если мы по этому столбцу сгруппируем ("схлопнем") все строки таблицы и при этом воспользуемся HAVING-ом, чтобы после группировки ("схлопывания") отобразить в результате только записи, куда сгруппировалось ("схлопнулось") более одной строки.
Решение:
SELECT EXT_CODE,
COUNT(*)
FROM CLIENTS
GROUP BY EXT_CODE
HAVING COUNT(*) > 1
Как видишь, WHERE не используется, а значит будут сначала отобраны все строки из таблицы клиентов. Затем они будут сгруппированы по EXT_CODE и после группировки мы получим внешние коды клиентов, по которым есть более одного клиента на один внешний код.
Позже планирую усложнить пример и дополнить статью.
Спасибо за внимание и, ещё раз, хорошего дня!
Здравствуйте, друзья! Похоже, последняя тема вызвала много обсуждений! Спасибо Вам за активное участие! Очень рад! Сниму видео-продолжение :) И еще хочу поделиться новым отзывом от ученика, а точнее ученицы, которая прошла наш курс "SQL. Базы данных. ORACLE": "Спасибо вам за сопровождение и за очень интересный курс - емко и все по делу!" Будем рады опубликовать и Ваши отзывы здесь!
Всем доброго дня!
Предлагаю начать эту неделю с очередного вопроса по базам данных:
Имеет ли значение порядок столбцов в составном индексе?
Предлагаю начать эту неделю с очередного вопроса по базам данных:
Имеет ли значение порядок столбцов в составном индексе?
Anonymous Quiz
71%
Да
29%
Нет
Дорогие наши девушки и женщины! Мамы и бабушки!
Поздравляем Вас с 8 марта! 💐
Желаем счастья, здоровья, внимания и заботы от дорогих людей!
Спасибо Вам за то, что Вы у нас есть! 🎉
Поздравляем Вас с 8 марта! 💐
Желаем счастья, здоровья, внимания и заботы от дорогих людей!
Спасибо Вам за то, что Вы у нас есть! 🎉
Всем доброго понедельника!
Если есть минутка, приглашаю решить хитрую SQL задачу:
В таблице TEMP_TABLE четыре строки. Столбец CODE_CHAR этих строк имеет значение 1 для первой строки, для второй 2, для третьей 3 и для последней 4.
Если есть минутка, приглашаю решить хитрую SQL задачу:
В таблице TEMP_TABLE четыре строки. Столбец CODE_CHAR этих строк имеет значение 1 для первой строки, для второй 2, для третьей 3 и для последней 4.
Сколько строк вернёт следующий запрос:
SELECT *
FROM TEMP_TABLE WHERE CODE_CHAR NOT IN (1, 2, 3, NULL)
SELECT *
FROM TEMP_TABLE WHERE CODE_CHAR NOT IN (1, 2, 3, NULL)
Anonymous Quiz
43%
0
34%
1
1%
2
4%
3
19%
4
Спасибо Вам большое за активность! Чуть позже добавлю объяснение.
Оно немного длинное, поэтому в подсказку-лампочку💡 не вместилось.
Оно немного длинное, поэтому в подсказку-лампочку💡 не вместилось.
Спасибо за активное участие в очередной SQL-викторине (уже 79 ответов!). Ниже я хочу объяснить почему предыдущий запрос ни вернёт ни одной записи! Всё дело в особенности работы оператора NOT IN. Он будет выбирать строки таблицы TEMP_TABLE, у которых значение графы CODE_CHAR (буквально) не равно ни одному из элементов коллекции. Иными словами запрос:
SELECT *
FROM TEMP_TABLE
WHERE CODE_CHAR NOT IN (1, 2, 3, NULL)
будет представлен как:
SELECT *
FROM TEMP_TABLE
WHERE (CODE_CHAR <> 1)
AND (CODE_CHAR <> 2)
AND (CODE_CHAR <> 3)
AND (CODE_CHAR <> NULL)
Должны быть отобраны строки, для которых были бы соблюдены одновременно все перечисленные условия: значение в графе CODE_CHAR не равно 1, не равно 2, не равно 3 и не равно NULL. Из основ SQL нам известно, что с NULL сравнивать нельзя. Иначе результат всегда будет отрицательным. Поэтому запрос не сможет вернуть ни одной строки из таблицы TEMP_TABLE!
Если бы мы использовали IN, а не NOT IN, то запрос:
SELECT *
FROM TEMP_TABLE
WHERE CODE_CHAR IN (1, 2, 3, NULL)
был бы представлен в виде:
SELECT *
FROM TEMP_TABLE
WHERE (CODE_CHAR = 1)
OR (CODE_CHAR = 2)
OR (CODE_CHAR = 3)
OR (CODE_CHAR = NULL)
и, согласно условию задачи, вернул бы три строки. Теперь отбираются записи, где выполняется хотя бы одно условие. Понятно, что последнее всегда не выполнится. Но одно из предыдущих условий вполне может быть выполнено.
SELECT *
FROM TEMP_TABLE
WHERE CODE_CHAR NOT IN (1, 2, 3, NULL)
будет представлен как:
SELECT *
FROM TEMP_TABLE
WHERE (CODE_CHAR <> 1)
AND (CODE_CHAR <> 2)
AND (CODE_CHAR <> 3)
AND (CODE_CHAR <> NULL)
Должны быть отобраны строки, для которых были бы соблюдены одновременно все перечисленные условия: значение в графе CODE_CHAR не равно 1, не равно 2, не равно 3 и не равно NULL. Из основ SQL нам известно, что с NULL сравнивать нельзя. Иначе результат всегда будет отрицательным. Поэтому запрос не сможет вернуть ни одной строки из таблицы TEMP_TABLE!
Если бы мы использовали IN, а не NOT IN, то запрос:
SELECT *
FROM TEMP_TABLE
WHERE CODE_CHAR IN (1, 2, 3, NULL)
был бы представлен в виде:
SELECT *
FROM TEMP_TABLE
WHERE (CODE_CHAR = 1)
OR (CODE_CHAR = 2)
OR (CODE_CHAR = 3)
OR (CODE_CHAR = NULL)
и, согласно условию задачи, вернул бы три строки. Теперь отбираются записи, где выполняется хотя бы одно условие. Понятно, что последнее всегда не выполнится. Но одно из предыдущих условий вполне может быть выполнено.
Друзья, всем привет! Мини тест: найди "лишнее" (и такое спрашивают на собеседованиях):
Anonymous Quiz
76%
SQL
8%
MySQL
16%
PostgreSQL
Интересные факты об ORACLE:
1. Первый выпуск СУБД ORACLE получил номер версии v2 по маркетинговым соображениям. То есть ORACLE первой версии не было 😅.
2. Всё знают, что у каждого аэропорта есть международный код. Например, аэропорт Внуково в Москве имеет код VKO, аэропорт Домодедово - DME, а аэропорт Пулково в Санкт-Петербурге имеет код LED. Аэропорт города Сан-Карлос в США имеет код SQL (да да, тот, что мы изучаем). Некоторые IT-специалисты полагают, что это как-то связано с находящейся в соседнем городе Редвуд-Сити штаб-квартирой корпорации Oracle. Но аэропорт имел данный код задолго до образования Oracle, так что данное обстоятельство объясняется простым совпадением 🙂.
3. Ларри Эллисон (основатель ORACLE) почерпнул идею создания реляционных баз данных в статье Теда Кодда, который на тот момент работал в корпорации IBM. Руководство IBM не увидело перспектив развития таких СУБД, а Эллисон решил воспользоваться этой идеей и создал на ее основе успешного IT-гиганта ☺️.
1. Первый выпуск СУБД ORACLE получил номер версии v2 по маркетинговым соображениям. То есть ORACLE первой версии не было 😅.
2. Всё знают, что у каждого аэропорта есть международный код. Например, аэропорт Внуково в Москве имеет код VKO, аэропорт Домодедово - DME, а аэропорт Пулково в Санкт-Петербурге имеет код LED. Аэропорт города Сан-Карлос в США имеет код SQL (да да, тот, что мы изучаем). Некоторые IT-специалисты полагают, что это как-то связано с находящейся в соседнем городе Редвуд-Сити штаб-квартирой корпорации Oracle. Но аэропорт имел данный код задолго до образования Oracle, так что данное обстоятельство объясняется простым совпадением 🙂.
3. Ларри Эллисон (основатель ORACLE) почерпнул идею создания реляционных баз данных в статье Теда Кодда, который на тот момент работал в корпорации IBM. Руководство IBM не увидело перспектив развития таких СУБД, а Эллисон решил воспользоваться этой идеей и создал на ее основе успешного IT-гиганта ☺️.