Пишем на SQL
1.93K subscribers
43 photos
7 videos
12 files
116 links
Уроки по SQL. Изучаем базы данных на примере СУБД ORACLE, MySQL, MS SQL Server, PostgreSql

Мой курс по SQL и базам данных:
https://prime-soft.biz/courses/sql

Связь со мной @iliahohlov
Download Telegram
Дорогие наши девушки и женщины! Мамы и бабушки!
Поздравляем Вас с 8 марта! 💐
Желаем счастья, здоровья, внимания и заботы от дорогих людей!
Спасибо Вам за то, что Вы у нас есть! 🎉
23
Всем доброго понедельника!

Если есть минутка, приглашаю решить хитрую SQL задачу:

В таблице TEMP_TABLE четыре строки.  Столбец CODE_CHAR этих строк имеет значение 1 для первой строки, для второй 2, для третьей 3 и для последней 4.
Сколько строк вернёт следующий запрос:
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)

и, согласно условию задачи, вернул бы три строки. Теперь отбираются записи, где выполняется хотя бы одно условие. Понятно, что последнее всегда не выполнится. Но одно из предыдущих условий вполне может быть выполнено.
👍18🔥2
Всем привет, друзья! С разрешения автора публикую здесь эти строки! Это первый (и такой приятный) отзыв на мою книгу по SQL! Спасибо, Пётр!
👍10🔥42
Друзья, всем привет! Мини тест: найди "лишнее" (и такое спрашивают на собеседованиях):
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-гиганта ☺️.
👍211
Очередной вопрос на внимательность. В какой строчке SQL-запроса ошибка?
Anonymous Quiz
47%
a.PRICE * 1.8 SALE_PRICE
8%
FROM ARTICLES a
38%
WHERE SALE_PRICE > 100
Приветствую, друзья!
Нашёл интересное видео визуализации популярности СУБД. Как менялась динамика популярности производителей баз данных за последние 17 лет:

https://youtu.be/thuG2PXVbBU
🔥10
Всем доброго понедельника!

Предлагаю задачку! В таблице CLIENTS всего три строки. У первой в столбце CLIENT_TYPE указано значение 1, у второй 2, у третьей строки - NULL. Сколько строк вернёт запрос: SELECT * FROM CLIENTS WHERE CLIENT_TYPE <> NULL?
Anonymous Quiz
44%
0
4%
1
37%
2
15%
3
👍81
В таблице TBL три строки. У первой в столбце NMBR значение 1, у второй 2 и у третьей 3. Два запроса:
SELECT DISTINCT COUNT(NMBR) FROM TBL и
SELECT COUNT(DISTINCT NMBR) FROM TBL
Anonymous Quiz
32%
Дадут одинаковый результат
16%
Дадут не одинаковый результат
35%
Первый запрос содержит ошибку
17%
Второй запрос содержит ошибку
🤪10🤔5
🤣16👏1
Друзья, всем привет!
Немного айти юмора 🙂
1
😁11
Пишем на 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/
👍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