Всем доброго понедельника!
Если есть минутка, приглашаю решить хитрую 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
33%
1
1%
2
4%
3
18%
4
🔥5
Спасибо Вам большое за активность! Чуть позже добавлю объяснение.
Оно немного длинное, поэтому в подсказку-лампочку💡 не вместилось.
Оно немного длинное, поэтому в подсказку-лампочку💡 не вместилось.
👍7
Спасибо за активное участие в очередной 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)
и, согласно условию задачи, вернул бы три строки. Теперь отбираются записи, где выполняется хотя бы одно условие. Понятно, что последнее всегда не выполнится. Но одно из предыдущих условий вполне может быть выполнено.
👍18🔥2
Друзья, всем привет! Мини тест: найди "лишнее" (и такое спрашивают на собеседованиях):
Anonymous Quiz
77%
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-гиганта ☺️.
👍21❤1
Очередной вопрос на внимательность. В какой строчке SQL-запроса ошибка?
Anonymous Quiz
6%
SELECT a.NAME,
47%
a.PRICE * 1.8 SALE_PRICE
8%
FROM ARTICLES a
38%
WHERE SALE_PRICE > 100
Приветствую, друзья!
Нашёл интересное видео визуализации популярности СУБД. Как менялась динамика популярности производителей баз данных за последние 17 лет:
https://youtu.be/thuG2PXVbBU
Нашёл интересное видео визуализации популярности СУБД. Как менялась динамика популярности производителей баз данных за последние 17 лет:
https://youtu.be/thuG2PXVbBU
YouTube
The Most Popular Databases - 2006/2021
In this video The Most Popular Databases. The data are updated to February 2021 and start from May 2006. In February 2021 the most used and popular databases are: Oracle, 30,2%, MySql 16.65% and SQL Server with 13.21%.
The graph was created using the data…
The graph was created using the data…
🔥10
Всем доброго понедельника!
Предлагаю задачку! В таблице CLIENTS всего три строки. У первой в столбце CLIENT_TYPE указано значение 1, у второй 2, у третьей строки - NULL. Сколько строк вернёт запрос: SELECT * FROM CLIENTS WHERE CLIENT_TYPE <> NULL?
Предлагаю задачку! В таблице CLIENTS всего три строки. У первой в столбце CLIENT_TYPE указано значение 1, у второй 2, у третьей строки - NULL. Сколько строк вернёт запрос: SELECT * FROM CLIENTS WHERE CLIENT_TYPE <> NULL?
Anonymous Quiz
44%
0
4%
1
37%
2
15%
3
👍8❤1
В таблице TBL три строки. У первой в столбце NMBR значение 1, у второй 2 и у третьей 3. Два запроса:
SELECT DISTINCT COUNT(NMBR) FROM TBL и
SELECT COUNT(DISTINCT NMBR) FROM TBL
SELECT DISTINCT COUNT(NMBR) FROM TBL и
SELECT COUNT(DISTINCT NMBR) FROM TBL
Anonymous Quiz
32%
Дадут одинаковый результат
16%
Дадут не одинаковый результат
35%
Первый запрос содержит ошибку
17%
Второй запрос содержит ошибку
🤪10🤔5
MySql - одна из самых лёгких и популярных СУБД.
Её установка на свой компьютер есть в видео на нашем канале. Обо всём подробно расскажем здесь:
https://youtu.be/afac7V6c5Hw
Её установка на свой компьютер есть в видео на нашем канале. Обо всём подробно расскажем здесь:
https://youtu.be/afac7V6c5Hw
YouTube
Скачивание и установка СУБД MySQL на Windows | Выбор конфигурации | Решение проблем
Загрузка и установка СУБД MySQL на Windows. Пошаговая инструкция. Установка дополнительных недостающих компонентов. Установка HeidiSQL. Александр Папков
Ссылки для скачивания:
1. MySQL Server:
https://www.mysql.com
2. Net.Framework:
https://www.microsoft.com/en…
Ссылки для скачивания:
1. MySQL Server:
https://www.mysql.com
2. Net.Framework:
https://www.microsoft.com/en…
👍5
Пишем на SQL
https://dzen.ru/media/id/6141a8eaf1e1477af4f85ca7/633b5d33d6b564224766009f
Здравствуйте, друзья!
На прошлой неделе моя книга-самоучитель по SQL и базам данных стала доступна на litres и на платформах партнёров. Здесь же можно заказать и печатную версию книги.
И еще я исправил опечатки, о которых Вы мне сообщили.
Большое спасибо!
https://www.litres.ru/book/ilya-leonidovich-hohlov/samouchitel-kurs-sql-bazy-dannyh-oracle-69188986/chitat-onlayn/
На прошлой неделе моя книга-самоучитель по SQL и базам данных стала доступна на litres и на платформах партнёров. Здесь же можно заказать и печатную версию книги.
И еще я исправил опечатки, о которых Вы мне сообщили.
Большое спасибо!
https://www.litres.ru/book/ilya-leonidovich-hohlov/samouchitel-kurs-sql-bazy-dannyh-oracle-69188986/chitat-onlayn/
👍12🔥3
Всем доброго понедельника! Начнём рабочую неделю с небольшой задачки по SQL. В каком из примеров соединение написано с ошибкой (при выполнении команды получим SQL ошибку):
Anonymous Quiz
4%
SELECT * FROM TBL1 LEFT JOIN TBL2 ON TBL1.FLD1 = TBL2.FLD1
50%
SELECT * FROM TBL1 CROSS JOIN TBL2 ON TBL1.FLD1 = TBL2.FLD1
38%
SELECT * FROM TBL1, TBL2 WHERE TBL1.FLD1 = TBL2.FLD1
8%
SELECT * FROM TBL1 JOIN TBL2 ON TBL1.FLD1 = TBL2.FLD1
❤4👍3
Не забываем про соединения таблиц без джоинов🙂
Это не ошибка в запросе. Так тоже можно соединять таблицы! 💪
https://youtu.be/gCOs96s86rw
Это не ошибка в запросе. Так тоже можно соединять таблицы! 💪
https://youtu.be/gCOs96s86rw
YouTube
Соединения таблиц в SQL-запросах во WHERE, без джоинов (SELECT без JOIN) Плюсы и минусы/ Илья Хохлов
Соединения таблиц в SQL запросах без джоинов. Плюсы и минусы. Как соединять таблицы в запросах в блоке WHERE. ANSI и не ANSI стандарты соединений. Плюсы и минусы каждого способа. Как составлять запросы правильно.
Полный курс обучения SQL, базам данных и…
Полный курс обучения SQL, базам данных и…
👍1
Еще немного про соединения (здесь важно про FULL JOIN и CROSS JOIN): https://dzen.ru/video/watch/646552f0267bd9446ca19dfd?share_to=link
Дзен.Видео
Илья Хохлов | Типы соединений таблиц в SQL: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN
Типы соединений таблиц. Вопросы к собеседованиям по SQL. Полное видео тут: https://dzen.ru/video/watch/62c45709a2687004e0f3a7a9
👍7
Всем доброго понедельника и отличного начала рабочей (учебной) недели!
Кто знает что такое DQL? 😉
Все команды языка SQL разделяют на группы (категории)! То есть КАЖДАЯ команда относится к какой либо группе.
Зачем вообще разделять команды на группы? Во-первых потому, что одни команды работают непосредственно с данными, а с помощью других можно создавать объекты баз данных и управлять ими (например, можно создать таблицу: ведь прежде, чем данные куда-то класть или откуда-то выбирать, сначала необходимо создать саму таблицу).
Во-вторых, команды, относящиеся к разным группам (категориям), по разному влияют на транзакции. Вот основные группы (категории) команд:
DML (Data Manipulation Language) - команды манипуляции данными. Сюда относится команды SELECT (чтение данных из таблиц), INSERT (вставка новых строк в таблицу), UPDATE (редактирование данных), DELETE (удаление строк из таблицы) и еще MERGE (это одна команда, позволяющая добавлять данные в таблицу, а, при их наличии, обновлять их, то есть, по сути, команда делает INSERT или UPDATE).
DDL - команды определения данных, как раз с помощью них и создаются и управляются объекты базы данных.
DCL - команды управления доступом к данным.
TCL - команды управления транзакциями.
Подробнее обо всех командах я писал здесь: https://dzen.ru/a/YXMDQ6U6qwbtfLFI
И вот настал главный вопрос: что же такое DQL? DQL (Data Query Language) - это ещё одна группа (категория) команд языка SQL, а аббревиатура переводится дословно как "язык выборки данных". Точнее это, конечно, не язык, а команда выборки данных. Ведь эта группа (категория) включает в себя только одну команду - SELECT. Верно, эта команда есть и в группе DML, ведь чтение данных тоже можно назвать их манипуляцией. Интересно получается: некоторые специалисты решили команду SELECT отнести в свою собственную группу (категорию). Так что в одних справочника Вы встретите, что всего групп языка SQL четыре (DML, DDL, TCL и DCL), а в других источниках их пять - плюсом к ним ещё и группа DQL (куда перенесли команду SELECT и она единственная в этой группе). Может в этом и есть смысл, так как остальные оставшиеся в группе DML команды при их использовании открывают транзакцию, а SELECT - нет, за некоторыми исключениями, например, выборки информации в некоторой базе данных из другой базы данных, но это уже другая тема 🙂
Кто знает что такое DQL? 😉
Все команды языка SQL разделяют на группы (категории)! То есть КАЖДАЯ команда относится к какой либо группе.
Зачем вообще разделять команды на группы? Во-первых потому, что одни команды работают непосредственно с данными, а с помощью других можно создавать объекты баз данных и управлять ими (например, можно создать таблицу: ведь прежде, чем данные куда-то класть или откуда-то выбирать, сначала необходимо создать саму таблицу).
Во-вторых, команды, относящиеся к разным группам (категориям), по разному влияют на транзакции. Вот основные группы (категории) команд:
DML (Data Manipulation Language) - команды манипуляции данными. Сюда относится команды SELECT (чтение данных из таблиц), INSERT (вставка новых строк в таблицу), UPDATE (редактирование данных), DELETE (удаление строк из таблицы) и еще MERGE (это одна команда, позволяющая добавлять данные в таблицу, а, при их наличии, обновлять их, то есть, по сути, команда делает INSERT или UPDATE).
DDL - команды определения данных, как раз с помощью них и создаются и управляются объекты базы данных.
DCL - команды управления доступом к данным.
TCL - команды управления транзакциями.
Подробнее обо всех командах я писал здесь: https://dzen.ru/a/YXMDQ6U6qwbtfLFI
И вот настал главный вопрос: что же такое DQL? DQL (Data Query Language) - это ещё одна группа (категория) команд языка SQL, а аббревиатура переводится дословно как "язык выборки данных". Точнее это, конечно, не язык, а команда выборки данных. Ведь эта группа (категория) включает в себя только одну команду - SELECT. Верно, эта команда есть и в группе DML, ведь чтение данных тоже можно назвать их манипуляцией. Интересно получается: некоторые специалисты решили команду SELECT отнести в свою собственную группу (категорию). Так что в одних справочника Вы встретите, что всего групп языка SQL четыре (DML, DDL, TCL и DCL), а в других источниках их пять - плюсом к ним ещё и группа DQL (куда перенесли команду SELECT и она единственная в этой группе). Может в этом и есть смысл, так как остальные оставшиеся в группе DML команды при их использовании открывают транзакцию, а SELECT - нет, за некоторыми исключениями, например, выборки информации в некоторой базе данных из другой базы данных, но это уже другая тема 🙂
👍14🔥1