Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Погрузитесь в захватывающий мир уникальных героев, строительства цитадели и три в ряд битв! Откройте новые горизонты в жанре РПГ.

Время Героев: Три в ряд RPG

Три в ряд, Мидкорные, Приключения

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • Animalrescueed Animalrescueed 36 постов
  • Oskanov Oskanov 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
VelStyling
VelStyling
20 дней назад
Серия SQL: знакомство

База данных: гардероб, кухня и мастерская в одном месте⁠⁠

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

База данных (БД) — это тот же шкаф, только для информации. Она хранит данные так, чтобы их можно было легко положить, достать и разложить по порядку.

Если тебе интересно узнать больше про базы данных и SQL — заглядывай в мой телеграм-канал sql_in_touch. Там я просто и понятно рассказываю, как работать с SQL, разбираю практические примеры и делюсь лайфхаками для начинающих. Буду рада видеть тебя в числе подписчиков и вместе разбираться в мире данных!

База данных: гардероб, кухня и мастерская в одном месте Аналитика, Аналитик, Microsoft Excel, База данных, Данные, Анализ данных, SQL, Отчет, Визуализация, Визуализация данных, Postgresql, Oracle, Образование, Длиннопост

В нашей жизни есть разные шкафы. Платяной шкаф, кухонный шкаф, шкаф с инструментами и т.д. Так и в мире данных есть разные БД.

Виды баз данных и зачем они нужны

1. Реляционные БД (табличные)

  • Данные хранятся в таблицах (как в Excel, только гораздо умнее).

  • Таблицы связаны между собой: в одной лежат заказы, в другой — клиенты, и они связаны по уникальному номеру клиента.

  • Примеры: MySQL, PostgreSQL, Oracle.

  • 📌 Где хороши: когда данные структурированы и связи между ними важны (интернет-магазин, банковские операции).

💡 Пример:
У меня в одном ящике лежит нижнее белье, в другом — футболки, а на плечиках висят брюки и пиджаки. Мне нужно быстро собрать наряд для собеседования. Я открываю нужные ящики и беру нужные вещи — так я собираю образ. Да, бывает, что я надену на себя вещи, которые не сочетаются между собой. Но в данном контексте это будет означать, что я не ограничила выборку условиями. А все необходимые составляющие: футболка, брюки, пиджак и т.д. будут выбраны из нужного ящика или вешалки.

Так и база данных — она состоит из разных «ящиков» (таблиц), в которых хранится разная информация. Но чтобы получить полный «наряд» (то есть ответ на запрос), система быстро соединяет данные из этих ящиков и выдает нужный результат. Это и есть работа с базой данных — быстро и удобно находить нужные сведения, даже если они лежат в разных местах.

2. Документоориентированные БД

Документоориентированные базы данных — это как личные папки или досье, где в каждой папке может быть разный набор информации, и она не обязательно одинаковая у всех.

  • Данные хранятся в виде документов (JSON, XML) — как целые досье.

  • Каждый документ может содержать разную структуру, без строгих таблиц.

Примеры: MongoDB, CouchDB.

💡 Пример:, у стилиста есть папка с данными о каждом клиенте: цвет волос, любимый стиль, что уже покупали, фотографии образов. У одного клиента в папке может быть описание прически, у другого — заметки про аксессуары, у третьего — список любимых магазинов. И это нормально, потому что каждая папка индивидуальна и хранит то, что важно именно для этого клиента.

📌 Где такие базы удобны? Когда данные часто меняются и не всегда бывают одинаковыми — например, каталоги товаров с разными характеристиками или профили пользователей с разным набором информации.

3. Ключ-значение

Представь повара на кухне, у которого на полках стоят контейнеры с приправами. На каждом контейнере — ярлычок: «Соль», «Перец», «Базилик». Повар сразу видит, где что лежит, и может быстро взять нужную специю, не тратя время на поиски.

В базах данных типа ключ-значение, например Redis или Memcached, всё устроено похожим образом: есть «ключ» — это как ярлычок на контейнере, и «значение» — содержимое внутри. Когда нужна информация, система быстро находит значение по ключу — без лишних сложностей и долгих поисков.

📌 Где такие базы классно работают? Когда нужна очень быстрая реакция: кэширование данных, хранение настроек, сессий пользователей, временных значений — чтобы всё на кухне (то есть в системе) шло как по маслу.

4. Графовые базы данных

Соцсети — отличный пример того, как работают графовые базы данных.

В таких базах информация хранится в виде «узлов» — это могут быть пользователи, группы, посты, события. «Связи» — это отношения между этими узлами: кто с кем дружит, кто подписан на кого, кто лайкнул чей пост, кто участвует в каком событии.

В итоге получается огромная сеть — граф — где можно быстро понять, кто ваши друзья, кто из них общается между собой, какие группы и интересы вас объединяют.

📌 Где полезны графовые БД? В соцсетях для построения друзей и рекомендаций, в картах для прокладывания маршрутов, в системах рекомендаций товаров.

💡 Пример:
Представь, что у тебя есть большая компания, и тебе нужно понять, кто с кем работает вместе, кто кому помогает и кто отвечает за какие задачи.

Каждый сотрудник — это «узел», а связи между ними — это совместные проекты, встречи или переписка. Так можно быстро увидеть, кто является центром коммуникаций, кто с кем тесно взаимодействует и как лучше организовать работу команды.

Графовая база поможет быстро найти нужных людей и понять, как информация и задачи «текут» внутри компании

Итог

База данных — это способ хранить и упорядочивать данные, как мы упорядочиваем вещи дома или в рабочем шкафу.

  • Хотите чёткий порядок и строгие связи? → Реляционные БД.

  • Нужна гибкость и разная структура? → Документоориентированные.

  • Важна молниеносная скорость для простых данных? → Ключ-значение.

  • Важны сложные связи? → Графовые.

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

Показать полностью 1
[моё] Аналитика Аналитик Microsoft Excel База данных Данные Анализ данных SQL Отчет Визуализация Визуализация данных Postgresql Oracle Образование Длиннопост
0
IliaHohlov
IliaHohlov
1 месяц назад
Лига программистов

SQL-задача про UNION⁠⁠

SQL-задача про UNION IT, Программирование, Тестирование, Собеседование, Postgresql, SQL, Фриланс, Oracle, Mysql, Telegram (ссылка)

Всем привет! Ещё один интересный вопрос с нашего Телеграм-канала про SQL и базы данных. Спасибо, что делитесь вопросами с собеседований!

Показать полностью 1
[моё] IT Программирование Тестирование Собеседование Postgresql SQL Фриланс Oracle Mysql Telegram (ссылка)
17
0
IliaHohlov
IliaHohlov
4 месяца назад

Задача на оптимизацию SQL запроса⁠⁠

Предлагаю ещё одну задачу по базам данных со своего Телеграм-канала по SQL и базам данных. Итак, среди прочих, имеется таблица выставленных счетов INVOICES:

Задача на оптимизацию SQL запроса Тестирование, IT, Программирование, Собеседование, SQL, База данных, Аналитик, Аналитика, Программист, Postgresql, Postgres, Oracle, Mysql, Telegram (ссылка)

В некотором отчёте АБС количество счетов, выставленных за текущий день формируется SQL запросом:

SELECT COUNT(*) COUNT_INV FROM INVOICES WHERE DATE(DATE_CREATE) = CURRENT_DATE

Задача на оптимизацию SQL запроса Тестирование, IT, Программирование, Собеседование, SQL, База данных, Аналитик, Аналитика, Программист, Postgresql, Postgres, Oracle, Mysql, Telegram (ссылка)
Тестирование IT Программирование Собеседование SQL База данных Аналитик Аналитика Программист Postgresql Postgres Oracle Mysql Telegram (ссылка)
3
IliaHohlov
IliaHohlov
5 месяцев назад
Лига программистов

Задача по SQL, которую могут решить немногие⁠⁠

Всем привет! Предлагаю ещё одну интересную задачу со своего Телеграм-канала по SQL. На текущий день, у меня 1.8 К подписчиков и я получил лишь несколько решений этой задачи! Попробуй свои силы!

Даны две таблицы ORDERS (заказы) и ORDER_ITEMS (позиции заказов).

Таблица ORDERS, имеет следующую структуру:

Задача по SQL, которую могут решить немногие Собеседование, Тестирование, Программирование, IT, Маркетплейс, SQL, База данных, Postgresql, Mysql, Удаленная работа, Фриланс, Oracle

Таблица ORDER_ITEMS имеет структуру:

Задача по SQL, которую могут решить немногие Собеседование, Тестирование, Программирование, IT, Маркетплейс, SQL, База данных, Postgresql, Mysql, Удаленная работа, Фриланс, Oracle

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

[моё] Собеседование Тестирование Программирование IT Маркетплейс SQL База данных Postgresql Mysql Удаленная работа Фриланс Oracle
49
23
IliaHohlov
IliaHohlov
6 месяцев назад
Лига программистов

3 возможности PostgreSql, которые удивили меня больше всего!⁠⁠

3 возможности PostgreSql, которые удивили меня больше всего! Программирование, IT, Собеседование, Программист, SQL, Postgresql, Oracle, Тестирование, Длиннопост

1. Есть DISTINCT ON

В PostgreSQL оператор DISTINCT можно использовать не только после слова SELECT для вывода уникальных строк всего набора данных, и не только внутри агрегатных функций, но ещё и для вывода лишь одной строки из нескольких, которые имеют одинаковое значение в указанном столбце (столбцах). В этом случае, с помощью ORDER BY можно определить какую именно из выводящихся строк с одинаковым значением в указанном столбце или столбцах, нужно вывести.

В отличие от обычного DISTINCT, который убирает дубликаты по всем полям в SELECT, DISTINCT ON (<столбец или набор столбцов>) выбирает первую строку для каждой группы значений в указанном в скобочках столбце (или наборе столбцов).

Так можно вывести последний заказ каждого пользователя:

SELECT DISTINCT ON (user_id) user_id, order_id, order_date, amount FROM orders ORDER BY user_id, order_date DESC;

2. Можно выводить строки без столбцов

Это ещё одна особенность PostgreSQL. Запросы SELECT, в которых не указаны ни поля после слова SELECT, ни звёздочка, прекрасно выполняются. Пример на PostgreSql версии 16.5:

3 возможности PostgreSql, которые удивили меня больше всего! Программирование, IT, Собеседование, Программист, SQL, Postgresql, Oracle, Тестирование, Длиннопост

И даже chatgpt об этом (пока ещё) не знает.

3. С помощью GENERATE_SERIES можно на лету генерировать динамические таблицы чисел, дат, дней недели и другую информацию

Вывести дни недели можно следующим способом:

3 возможности PostgreSql, которые удивили меня больше всего! Программирование, IT, Собеседование, Программист, SQL, Postgresql, Oracle, Тестирование, Длиннопост

А так, например, можно вывести все числа января и февраля:

3 возможности PostgreSql, которые удивили меня больше всего! Программирование, IT, Собеседование, Программист, SQL, Postgresql, Oracle, Тестирование, Длиннопост

Продолжая предыдущий пример, можно добавить вывод количеств посещений сайта prime-soft.biz в выводимые даты:

3 возможности PostgreSql, которые удивили меня больше всего! Программирование, IT, Собеседование, Программист, SQL, Postgresql, Oracle, Тестирование, Длиннопост

Напиши под постом что удивило в PostgreSql именно тебя. Буду очень рад, если поделишься опытом! И, конечно, буду рад, твоему лайку моей статье! А ещё у меня есть Телеграм канал, в котором регулярно решаем задачи по SQL с собеседований и реальной практики!

Показать полностью 5
[моё] Программирование IT Собеседование Программист SQL Postgresql Oracle Тестирование Длиннопост
6
4
IliaHohlov
IliaHohlov
7 месяцев назад
Лига программистов

Задача по SQL на этот понедельник⁠⁠

Всем доброго понедельника!

Как насчёт очередной небольшой задачи по SQL с нашего Телеграм-канала?

В базе данных (на примере СУБД ORACLE), среди прочих, есть три таблицы, определённые следующим образом:

/* Таблица Сотрудники */

CREATE TABLE PERS (

ID NUMBER PRIMARY KEY,

FIO VARCHAR(100) NOT NULL,

PHONE VARCHAR(10) DEFAULT '' NOT NULL);

/* Автомобили сотрудников */

CREATE TABLE CARS (

ID NUMBER PRIMARY KEY,

BRAND VARCHAR(50) NOT NULL,

MODEL VARCHAR(50) NOT NULL,

ID_PERS_OWNER NUMBER NOT NULL,

CONSTRAINT FK_CAR_OWNER FOREIGN KEY

(ID_PERS_OWNER) REFERENCES PERS(ID)

);

/* Сотрудники-водители */

CREATE TABLE DRIVERS (

ID_PERS NUMBER PRIMARY KEY,

DRIVE_LICENSE_NUM VARCHAR(20) DEFAULT NULL,

CONSTRAINT FK_PERS_DRIVER FOREIGN KEY

(ID_PERS) REFERENCES PERS(ID)

);

В таблице PERS данные:

ID FIO PHONE

1 Иванов И.И. 9057553111

2 Петров П.П. 9104454545

3 Сидоров А.И. 9113457778

В таблице CARS данные:

ID BRAD MODEL ID_PERS_OWNER

1 Ауди А4 1

2 Фиат Панда 2

3 Форд Мондео 2

Какой результат вернёт выполнение следующего SQL-скрипта, состоящего из трёх команд?

TRUNCATE TABLE DRIVERS;

INSERT INTO DRIVERS

(ID_PERS)

SELECT p.ID

FROM PERS p

JOIN CARS c

On c.ID_PERS_OWNER = p.ID;

SELECT COUNT(*)

FROM DRIVERS;

Задача по SQL на этот понедельник Программирование, IT, Собеседование, SQL, База данных, Mysql, Oracle, Postgresql, Тестирование, Программист
Показать полностью 1
[моё] Программирование IT Собеседование SQL База данных Mysql Oracle Postgresql Тестирование Программист
4
6
IliaHohlov
IliaHohlov
9 месяцев назад
Лига программистов

SQL задача по оконным функциям⁠⁠

Всем привет!

Как начёт ещё одной задачи по SQL задачу с нашего Телеграм-канала?

В таблице SALES_TOTAL хранятся итоги по продажам каждого товара за каждый день. Запрос

SELECT t.*

FROM SALES_TOTAL t

WHERE t.PRODUCT_ID = 8

AND t.SALE_DATE >= '2024-01-01'

ORDER BY t.SALE_DATE

возвращает данные по продажам некоторого товара с идентификатором 8 за каждый день, начиная с начала 2024 года:

PRODUCT_ID SALE_DATE AMOUNT

8 2024-01-01 5

8 2024-01-02 4

8 2024-01-03 7

8 2024-01-04 8

...

В столбце AMOUNT отображается количество штук проданного товара за каждый день.

Чтобы в результирующей таблице, помимо существующих столбцов, получить ещё один столбец с количеством проданного товара с начала года по день, указанный в таблице накопительным итогом, нужно в блок SELECT через запятую добавить:

SQL задача по оконным функциям Программирование, Собеседование, IT, SQL, Урок, Задача, Postgresql, Mysql, Oracle, Программист, Тестирование
Показать полностью 1
[моё] Программирование Собеседование IT SQL Урок Задача Postgresql Mysql Oracle Программист Тестирование
7
23
IliaHohlov
IliaHohlov
10 месяцев назад
Лига программистов

Задача с собеседования по SQL с заложенной в неё ошибкой⁠⁠

Задача с собеседования по SQL с заложенной в неё ошибкой Программирование, IT, Собеседование, SQL, Задача, Oracle, Postgresql, Postgres, Mysql, Ms SQL, База данных, Программист, Тестирование

Продолжаю тему разборов задач с собеседований по SQL. В этот раз выложу полное содержание, чтобы пост не удалили.

Итак, в базе данных есть таблица CLIENTS, содержащая три строки:

Задача с собеседования по SQL с заложенной в неё ошибкой Программирование, IT, Собеседование, SQL, Задача, Oracle, Postgresql, Postgres, Mysql, Ms SQL, База данных, Программист, Тестирование

И есть таблица INVOICES, в которой две строки:

Задача с собеседования по SQL с заложенной в неё ошибкой Программирование, IT, Собеседование, SQL, Задача, Oracle, Postgresql, Postgres, Mysql, Ms SQL, База данных, Программист, Тестирование

И сама задача звучит так: какое количество строк вернёт указанный ниже запрос:

SELECT * FROM CLIENTS WHERE EXISTS (SELECT COUNT(*) FROM INVOICES WHERE ID_CLIENT = CLIENTS.ID)

Задача с собеседования по SQL с заложенной в неё ошибкой Программирование, IT, Собеседование, SQL, Задача, Oracle, Postgresql, Postgres, Mysql, Ms SQL, База данных, Программист, Тестирование

Какой бы вариант Вы выбрали?

Здесь нужно было заметить неправильное использование EXISTS.

Оператор EXISTS используют для проверки того, возвращается ли что-то подзапросом, указанным в скобках. Как правило, в скобках для оператора EXISTS/NOT EXISTS пишут:

SELECT *

или:

SELECT 1

В задаче выше нарочно допущена ошибка (в EXISTS нарочно написано SELECT COUNT).

SELECT COUNT всегда будет возвращать данные. Написанный в скобочках подзапрос всегда будет возвращать количество, хоть и иногда 0. Но данные-то есть. Ноль - это тоже данные. Поэтому EXISTS будет давать TRUE для каждой из трех строчек основного запроса.

Ещё больше интересных задач с собеседований я публикую в моем Телеграм-канале по SQL!

Показать полностью 4
[моё] Программирование IT Собеседование SQL Задача Oracle Postgresql Postgres Mysql Ms SQL База данных Программист Тестирование
2
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии