Please open Telegram to view this post
VIEW IN TELEGRAM
👍44❤4🙏1
🚀 Внимание, обновление в разделе «Тренажер»! 🌟
Теперь у нас есть уникальная коллекция заданий прямиком из реальных собеседований по SQL от ведущих компаний!💼
Если вы недавно сталкивались с интересными задачами на собеседованиях или тестовых заданиях по SQL, поделитесь ими с нами по адресу feedback@sql-academy.org. Давайте вместе сделаем нашу базу заданий еще лучше и полезнее для всех!🤝 💡
Вместе мы создадим мощный инструмент для подготовки и успеха в будущих собеседованиях!✨
Теперь у нас есть уникальная коллекция заданий прямиком из реальных собеседований по SQL от ведущих компаний!
Если вы недавно сталкивались с интересными задачами на собеседованиях или тестовых заданиях по SQL, поделитесь ими с нами по адресу feedback@sql-academy.org. Давайте вместе сделаем нашу базу заданий еще лучше и полезнее для всех!
Вместе мы создадим мощный инструмент для подготовки и успеха в будущих собеседованиях!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥12❤6😎3
🚀 Вопросы с собеседования на позицию intern аналитика в Тинькофф: разбор SQL (часть 2) 🚀
Сегодня мы разберем некоторые интересные вопросы по SQL, которые могут встретиться на собеседовании в Тинькофф.📊 🔍
1️⃣ Можно ли делать JOIN таблицы саму на себя?🤔
Абсолютно! Это называется self-join и полезно для работы с иерархическими данными или для сравнения строк в таблице. Вот пример запроса:
Здесь мы используем одну и ту же таблицу employees для поиска имени сотрудника и его менеджера. Псевдонимы a и b помогают нам различать два использования таблицы.
2️⃣ Какой из операторов: SELECT, FROM, WHERE, GROUP BY - выполняется последним?🧐
И тут главный герой - SELECT! 🌟 Хотя он стоит на первом месте по синтаксису, логически данные выбираются после всех фильтраций и группировок. Так что, порядок такой:
1. FROM ➡️ 2. WHERE ➡️ 3. GROUP BY ➡️ 4. SELECT.
3️⃣ Минимальное и максимальное количество записей в FULL JOIN таблицы на 10 и 100 строк?📊
С FULL JOIN всё интересно:
ℹ️ Минимум? 100 строк, если каждая из 10 нашла свою пару.
ℹ️ Максимум? 110 строк, если совпадений ноль и каждая строка появляется отдельно.
#задание_из_собеседования #tinkoff #intern #analytic
Сегодня мы разберем некоторые интересные вопросы по SQL, которые могут встретиться на собеседовании в Тинькофф.
1️⃣ Можно ли делать JOIN таблицы саму на себя?
Абсолютно! Это называется self-join и полезно для работы с иерархическими данными или для сравнения строк в таблице. Вот пример запроса:
SELECT a.name AS EmployeeName, b.name AS ManagerName
FROM employees a
JOIN employees b ON a.manager_id = b.id;
Здесь мы используем одну и ту же таблицу employees для поиска имени сотрудника и его менеджера. Псевдонимы a и b помогают нам различать два использования таблицы.
2️⃣ Какой из операторов: SELECT, FROM, WHERE, GROUP BY - выполняется последним?
И тут главный герой - SELECT! 🌟 Хотя он стоит на первом месте по синтаксису, логически данные выбираются после всех фильтраций и группировок. Так что, порядок такой:
1. FROM ➡️ 2. WHERE ➡️ 3. GROUP BY ➡️ 4. SELECT.
3️⃣ Минимальное и максимальное количество записей в FULL JOIN таблицы на 10 и 100 строк?
С FULL JOIN всё интересно:
#задание_из_собеседования #tinkoff #intern #analytic
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥7❤6🤩3💯3
Мы продолжаем собирать коллекцию тестовых заданий по SQL от ведущих компаний, чтобы сделать вашу подготовку еще более эффективной и интересной!
Если в последнее время вы сталкивались с уникальными и вызывающими заданиями по SQL на собеседованиях или в тестовых заданиях, мы будем рады, если поделитесь ими с нами!📩 Отправляйте свои задания на feedback@sql-academy.org и помогите нам сделать нашу базу еще богаче и полезнее для всех, кто стремится развиваться и достигать новых высот в области SQL.
В знак благодарности за ваши усилия, в случае если ваш материал окажется особенно ценным, мы с удовольствием предоставим вам промокод на бесплатный доступ к премиуму на нашей платформе.🎁
Давайте вместе строить лучшее будущее для всех, кто интересуется SQL!
Если в последнее время вы сталкивались с уникальными и вызывающими заданиями по SQL на собеседованиях или в тестовых заданиях, мы будем рады, если поделитесь ими с нами!
В знак благодарности за ваши усилия, в случае если ваш материал окажется особенно ценным, мы с удовольствием предоставим вам промокод на бесплатный доступ к премиуму на нашей платформе.
Давайте вместе строить лучшее будущее для всех, кто интересуется SQL!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33❤17🎉8
Вы когда-нибудь задумывались, как правильно вычислить возраст человека в SQL?
🚫 Неправильный подход:
SELECT YEAR(NOW()) - YEAR('2003-07-03 14:10:26');
Проблема такого подхода в том, что он не учитывает был ли день рождения у данного человека в этом году или ещё нет. То есть, если на момент запроса уже наступило 3-е июля (07-03), то человек отпраздновал свой день рождения и ему уже 21 лет, иначе ему по-прежнему 20 года. Разница функций YEAR тут будет бесполезна — в обоих случаях она даст 21 лет.
SELECT FLOOR(DATEDIFF(NOW(), '2003-07-03 14:10:26') / 365);
Это лучше, но всё же не совсем точно из-за наличия високосных годов. 📆
✅ Правильный подход с TIMESTAMPDIFF:
TIMESTAMPDIFF(YEAR, '2003-07-03 14:10:26', NOW());
Используя функцию TIMESTAMPDIFF, мы получаем точную разницу в годах между двумя датами, учитывая все нюансы календаря! 🎯
Так что, когда дело доходит до вычисления возраста, доверяйте TIMESTAMPDIFF — и ваши расчёты будут точны как никогда! 🚀💡
Please open Telegram to view this post
VIEW IN TELEGRAM
👍50🔥14❤11🗿2🤯1😍1
SQL Academy: всё о реляционных БД и SQL pinned «Мы продолжаем собирать коллекцию тестовых заданий по SQL от ведущих компаний, чтобы сделать вашу подготовку еще более эффективной и интересной! Если в последнее время вы сталкивались с уникальными и вызывающими заданиями по SQL на собеседованиях или в тестовых…»
Транзакции в MySQL 🚀 - это способ гарантировать, что ваши данные остаются надежными и целостными. Давайте разберемся, как это работает на примерах.
Что такое транзакции?🤔
Транзакция - это группа операций с данными, которые либо полностью выполняются, либо нет. Они основаны на принципах ACID:
ℹ️ Атомарность (все или ничего)
ℹ️ Согласованность (данные остаются правильными)
ℹ️ Изоляция (операции не мешают друг другу)
ℹ️ Долговечность (результаты сохраняются после завершения)
Примеры использования 🛠
1. Перевод денег с одного счета на другой:
Здесь мы используем START TRANSACTION и COMMIT, чтобы гарантировать, что обе операции выполнены вместе.
2. Откат при ошибке:
ROLLBACK отменяет все изменения, если что-то пошло не так.
Заключение
Использование транзакций в MySQL помогает сохранять ваши данные в безопасности и целостности, гарантируя, что комплексные операции либо выполняются полностью, либо не оказывают влияния вовсе.
Что такое транзакции?
Транзакция - это группа операций с данными, которые либо полностью выполняются, либо нет. Они основаны на принципах ACID:
Примеры использования 🛠
1. Перевод денег с одного счета на другой:
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
Здесь мы используем START TRANSACTION и COMMIT, чтобы гарантировать, что обе операции выполнены вместе.
2. Откат при ошибке:
START TRANSACTION;
UPDATE accounts SET balance = balance - 1000 WHERE id = 1;
-- Если ошибка, отменяем всё
ROLLBACK;
ROLLBACK отменяет все изменения, если что-то пошло не так.
Заключение
Использование транзакций в MySQL помогает сохранять ваши данные в безопасности и целостности, гарантируя, что комплексные операции либо выполняются полностью, либо не оказывают влияния вовсе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37🤩2😍2 2❤1⚡1👎1
🚀 Foreign Keys (Внешние ключи)
Внешние ключи — это столбцы в таблице, которые ссылаются на ключевые столбцы в другой таблице. Это основа для связывания данных между таблицами в базе данных. Их главная цель — поддержание целостности данных и обеспечение связи между таблицами🌐 .
Зачем нужны?
ℹ️ Обеспечивают связь между таблицами 🤝
ℹ️ Гарантируют, что каждое значение в столбце существует в связанной таблице
ℹ️ Помогают избежать неконсистентности данных
Как создать?
1️⃣ Определите основной ключ (Primary Key) в родительской таблице.
2️⃣ Создайте столбец в дочерней таблице, который будет внешним ключом.
3️⃣ Свяжите их с помощью ограничения FOREIGN KEY.
Пример SQL кода:
Особенности:
- Каскадное удаление: Если родительская запись удаляется, все связанные дочерние записи тоже удаляются.
- Ограничение целостности🔒 : Нельзя добавить запись в дочернюю таблицу, если нет соответствующей записи в родительской таблице.
- Улучшает производительность запросов благодаря индексации связанных столбцов 🏎️.
Когда вы используете внешние ключи, вы облегчаете себе жизнь, гарантируя, что ваша база данных останется чистой и все связи между таблицами будут корректными. Правильно используйте внешние ключи, и ваши данные всегда будут в порядке!🔐 💼
Внешние ключи — это столбцы в таблице, которые ссылаются на ключевые столбцы в другой таблице. Это основа для связывания данных между таблицами в базе данных. Их главная цель — поддержание целостности данных и обеспечение связи между таблицами
Зачем нужны?
Как создать?
Пример SQL кода:
CREATE TABLE Parents (
ParentID INT PRIMARY KEY,
Name VARCHAR(100)
);
CREATE TABLE Children (
ChildID INT PRIMARY KEY,
Name VARCHAR(100),
ParentID INT,
FOREIGN KEY (ParentID) REFERENCES Parents(ParentID)
);
Особенности:
- Каскадное удаление: Если родительская запись удаляется, все связанные дочерние записи тоже удаляются.
- Ограничение целостности
- Улучшает производительность запросов благодаря индексации связанных столбцов 🏎️.
Когда вы используете внешние ключи, вы облегчаете себе жизнь, гарантируя, что ваша база данных останется чистой и все связи между таблицами будут корректными. Правильно используйте внешние ключи, и ваши данные всегда будут в порядке!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥7❤4👌3 3⚡1🤩1
Мы опубликовали новую статью на vc «Взламываем SQL интервью на позиции в Тинькофф и Альфа-Банк»
Поддержите нас лайками👍 и комментариями 💬 .
https://vc.ru/hr/1085970-vzlamyvaem-sql-intervyu-na-pozicii-v-tinkoff-i-alfa-bank
❗️Лайкать и комментить важно для попадания поста в топ главной виси в первые 30-60 минут. Потом тоже полезно, но эффективность с каждым часом кратно снижается из-за конкуренции с другими материалами и из-за алгоритмов площадки.
Поддержите нас лайками
https://vc.ru/hr/1085970-vzlamyvaem-sql-intervyu-na-pozicii-v-tinkoff-i-alfa-bank
❗️Лайкать и комментить важно для попадания поста в топ главной виси в первые 30-60 минут. Потом тоже полезно, но эффективность с каждым часом кратно снижается из-за конкуренции с другими материалами и из-за алгоритмов площадки.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤32🔥10👍4👏1
REGEXP 🔍 в SQL
REGEXP — это оператор в SQL, использующий регулярные выражения для сопоставления строк в запросе к базе данных. Это позволяет выполнять сложные поиски по шаблонам внутри текстовых данных.
Для чего используется? 🎯
1️⃣ Искать строки, соответствующие сложным шаблонам.
2️⃣ Выполнять поиск без учета регистра.
3️⃣ Находить строки, содержащие определенные символьные последовательности в любом месте текста.
4️⃣ Использовать группировку и альтернативы в шаблонах поиска.
Примеры использования
Предположим, у нас есть таблица users с колонкой email. Мы хотим найти все адреса электронной почты на домене example.com.
Отличие от LIKE 😼
Хотя операторы LIKE и REGEXP могут использоваться для поиска текстовых данных, между ними есть несколько ключевых различий:
🔹Гибкость: REGEXP предлагает гораздо большую гибкость и мощь💪 , позволяя создавать сложные шаблоны поиска, в то время как LIKE ограничен простыми шаблонами с использованием символов % и _.
🔹Производительность: LIKE может быть быстрее для простых поисков 🚀, поскольку он менее ресурсоемок, в то время как REGEXP может быть более затратным из-за сложности обработки регулярных выражений.
🔹Синтаксис: Синтаксис REGEXP сложнее, поскольку он требует понимания регулярных выражений, тогда как LIKE проще в использовании для базового поиска.
В целом, выбор между LIKE и REGEXP зависит от конкретных требований к поиску🧐 . Если нужен простой поиск по шаблону, то подойдет LIKE. Для более сложных и гибких поисковых запросов лучше использовать REGEXP .
REGEXP — это оператор в SQL, использующий регулярные выражения для сопоставления строк в запросе к базе данных. Это позволяет выполнять сложные поиски по шаблонам внутри текстовых данных.
Для чего используется? 🎯
Примеры использования
Предположим, у нас есть таблица users с колонкой email. Мы хотим найти все адреса электронной почты на домене example.com.
SELECT email FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@example\.com$';
Отличие от LIKE 😼
Хотя операторы LIKE и REGEXP могут использоваться для поиска текстовых данных, между ними есть несколько ключевых различий:
🔹Гибкость: REGEXP предлагает гораздо большую гибкость и мощь
🔹Производительность: LIKE может быть быстрее для простых поисков 🚀, поскольку он менее ресурсоемок, в то время как REGEXP может быть более затратным из-за сложности обработки регулярных выражений.
🔹Синтаксис: Синтаксис REGEXP сложнее, поскольку он требует понимания регулярных выражений, тогда как LIKE проще в использовании для базового поиска.
В целом, выбор между LIKE и REGEXP зависит от конкретных требований к поиску
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🔥6❤1🥰1😁1🤩1🆒1😎1
Хранимые процедуры в MySQL 📘
Хранимые процедуры в MySQL — это мощный инструмент для автоматизации и упрощения рутинных задач по обработке данных в базах данных 🚀. Они представляют собой наборы SQL-команд, которые компилируются один раз и хранятся на сервере. Это позволяет повторно использовать код, обеспечивая более быстрое выполнение и уменьшение нагрузки на сеть.
Зачем нужны хранимые процедуры?🤔
🔹Эффективность: Хранимые процедуры выполняются на сервере, что снижает количество передаваемых данных между сервером и клиентом📉 .
🔹Безопасность: Они обеспечивают дополнительный слой безопасности, позволяя ограничить доступ к данным и логике обработки🔒 .
🔹Уменьшение дублирования кода: Хранимые процедуры могут быть вызваны из любого места в приложении, что уменьшает дублирование кода 🔄.
Пример хранимой процедуры 📝
Вот как можно создать простую хранимую процедуру в MySQL, которая добавляет новую запись в таблицу:
Этот пример демонстрирует создание процедуры AddCustomer, которая принимает два параметра (имя и адрес клиента) и вставляет эти данные в таблицу Customers.
Для вызова ранее созданной процедуры AddCustomer используйте следующий SQL-запрос:
Этот вызов произведет вставку новой записи в таблицу Customers с именем и адресом, указанными в качестве параметров.
Заключение
Хранимые процедуры в MySQL играют важную роль в разработке и управлении базами данных 🗄️. Они не только упрощают код и улучшают его поддержку, но и повышают производительность за счет уменьшения количества обработки данных на стороне клиента и сервера. Использование хранимых процедур может значительно повысить эффективность работы с большими объемами данных и сложными запросами🌟 .
Хранимые процедуры в MySQL — это мощный инструмент для автоматизации и упрощения рутинных задач по обработке данных в базах данных 🚀. Они представляют собой наборы SQL-команд, которые компилируются один раз и хранятся на сервере. Это позволяет повторно использовать код, обеспечивая более быстрое выполнение и уменьшение нагрузки на сеть.
Зачем нужны хранимые процедуры?
🔹Эффективность: Хранимые процедуры выполняются на сервере, что снижает количество передаваемых данных между сервером и клиентом
🔹Безопасность: Они обеспечивают дополнительный слой безопасности, позволяя ограничить доступ к данным и логике обработки
🔹Уменьшение дублирования кода: Хранимые процедуры могут быть вызваны из любого места в приложении, что уменьшает дублирование кода 🔄.
Пример хранимой процедуры 📝
Вот как можно создать простую хранимую процедуру в MySQL, которая добавляет новую запись в таблицу:
DELIMITER $$
CREATE PROCEDURE AddCustomer(IN custName VARCHAR(100), IN custAddress VARCHAR(255))
BEGIN
INSERT INTO Customers (Name, Address) VALUES (custName, custAddress);
END$$
DELIMITER ;
Этот пример демонстрирует создание процедуры AddCustomer, которая принимает два параметра (имя и адрес клиента) и вставляет эти данные в таблицу Customers.
Для вызова ранее созданной процедуры AddCustomer используйте следующий SQL-запрос:
CALL AddCustomer('Иван Иванов', '123 Примерная ул., Москва');
Этот вызов произведет вставку новой записи в таблицу Customers с именем и адресом, указанными в качестве параметров.
Заключение
Хранимые процедуры в MySQL играют важную роль в разработке и управлении базами данных 🗄️. Они не только упрощают код и улучшают его поддержку, но и повышают производительность за счет уменьшения количества обработки данных на стороне клиента и сервера. Использование хранимых процедур может значительно повысить эффективность работы с большими объемами данных и сложными запросами
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍9❤1⚡1🤩1😎1
Триггеры в MySQL 🚀
Триггеры в MySQL — это специальные процедуры, которые автоматически выполняются в ответ на определённые события внутри таблиц базы данных. Они срабатывают при выполнении операций вставки (INSERT), обновления (UPDATE) или удаления (DELETE) данных.
Для чего нужны триггеры🔍
Триггеры используются для автоматизации выполнения задач в базе данных, что помогает обеспечить целостность данных. Например, они могут автоматически обновлять или проверять данные при изменении таблицы, запускать расчёты или создавать журнал изменений (логирование операций).
Создание триггера 🆕
Создать триггер можно с помощью команды CREATE TRIGGER. Например, триггер, который будет автоматически устанавливать текущую дату и время в поле last_updated при обновлении строки в таблице users:
Удаление триггера ❌
Удалить триггер можно с помощью команды DROP TRIGGER. Например:
Полезный пример использования ℹ️
Предположим, в базе данных есть таблица orders с полями id, total и updated_at. Можно создать триггер, который будет обновлять updated_at каждый раз, когда меняется сумма заказа (total):
Этот триггер помогает отслеживать момент последнего изменения суммы заказа, что может быть полезно для аудита изменений или для обновления связанных систем, например, систем бухгалтерского учета.
Триггеры в MySQL — это специальные процедуры, которые автоматически выполняются в ответ на определённые события внутри таблиц базы данных. Они срабатывают при выполнении операций вставки (INSERT), обновления (UPDATE) или удаления (DELETE) данных.
Для чего нужны триггеры
Триггеры используются для автоматизации выполнения задач в базе данных, что помогает обеспечить целостность данных. Например, они могут автоматически обновлять или проверять данные при изменении таблицы, запускать расчёты или создавать журнал изменений (логирование операций).
Создание триггера 🆕
Создать триггер можно с помощью команды CREATE TRIGGER. Например, триггер, который будет автоматически устанавливать текущую дату и время в поле last_updated при обновлении строки в таблице users:
CREATE TRIGGER before_user_update
BEFORE UPDATE ON users
FOR EACH ROW
SET NEW.last_updated = NOW();
Удаление триггера ❌
Удалить триггер можно с помощью команды DROP TRIGGER. Например:
DROP TRIGGER before_user_update;
Полезный пример использования ℹ️
Предположим, в базе данных есть таблица orders с полями id, total и updated_at. Можно создать триггер, который будет обновлять updated_at каждый раз, когда меняется сумма заказа (total):
CREATE TRIGGER update_order_timestamp
BEFORE UPDATE ON orders
FOR EACH ROW
WHEN (OLD.total <> NEW.total)
BEGIN
SET NEW.updated_at = CURRENT_TIMESTAMP;
END;
Этот триггер помогает отслеживать момент последнего изменения суммы заказа, что может быть полезно для аудита изменений или для обновления связанных систем, например, систем бухгалтерского учета.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥8❤5😍2⚡1🤩1💯1
Использование временных таблиц для сложных запросов в SQL 🚀
Сегодня мы обсудим, как использование временных таблиц может значительно упростить выполнение сложных запросов и улучшить производительность ваших SQL-операций.
Что такое временные таблицы?
Временные таблицы — это специальные таблицы, которые существуют временно в сеансе вашей базы данных.
Преимущества использования временных таблиц:
1️⃣ Улучшение читаемости запросов: Разбиение сложного запроса на несколько простых шагов с использованием временных таблиц упрощает понимание логики запроса. 📖
2️⃣ Оптимизация производительности: Избежание многократного вычисления одних и тех же данных в различных частях запроса ускоряет выполнение. ⏱️
3️⃣ Упрощение отладки: Проверка содержимого временных таблиц на каждом этапе помогает быстрее находить и исправлять ошибки. 🔍
Пример:
Представим, что нам нужно анализировать продажи по продуктам и регионам, но данные разбросаны по различным таблицам, и существуют сложные условия для агрегации.
В этом примере мы создаем временную таблицу TempSales, чтобы хранить результаты агрегации по продуктам и регионам за январь 2023 года. Затем мы присоединяем таблицы Products и Regions для получения названий продуктов и регионов, сортируя результаты по убыванию объема продаж.
Когда стоит использовать временные таблицы:
1️⃣ Когда вы работаете с большими объемами данных. 📊
2️⃣ Когда в запросах многократно используются одни и те же подсчеты или агрегации
3️⃣ Когда нужно разделить сложный запрос на управляемые части.
Сегодня мы обсудим, как использование временных таблиц может значительно упростить выполнение сложных запросов и улучшить производительность ваших SQL-операций.
Что такое временные таблицы?
Временные таблицы — это специальные таблицы, которые существуют временно в сеансе вашей базы данных.
Преимущества использования временных таблиц:
Пример:
Представим, что нам нужно анализировать продажи по продуктам и регионам, но данные разбросаны по различным таблицам, и существуют сложные условия для агрегации.
-- Создаем временную таблицу
CREATE TEMPORARY TABLE TempSales AS
SELECT ProductID, RegionID, SUM(Sales) as TotalSales
FROM SalesRecords
WHERE SaleDate BETWEEN '2023-01-01' AND '2023-01-31'
GROUP BY ProductID, RegionID;
-- Используем временную таблицу для более сложного запроса
SELECT p.ProductName, r.RegionName, t.TotalSales
FROM TempSales t
JOIN Products p ON t.ProductID = p.ProductID
JOIN Regions r ON t.RegionID = r.RegionID
ORDER BY t.TotalSales DESC;
В этом примере мы создаем временную таблицу TempSales, чтобы хранить результаты агрегации по продуктам и регионам за январь 2023 года. Затем мы присоединяем таблицы Products и Regions для получения названий продуктов и регионов, сортируя результаты по убыванию объема продаж.
Когда стоит использовать временные таблицы:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍3💯3❤1⚡1🤩1