Channel name was changed to «Подготовка к собеседованию датасайнс»
#sql
🧹 DELETE vs TRUNCATE в SQL — почувствуй разницу ⚔️
Оба эти SQL-запроса удаляют данные из таблицы, но делают это совсем по-разному. И если ты случайно применишь не тот — можно потерять важные данные безвозвратно. Так в чём же разница?
🔪 DELETE
Удаляет по WHERE
Медленный (фиксирует каждую строку)
Можно откатить (ROLLBACK)
Срабатывают триггеры
✅ Используй, когда нужна точечная чистка.
💣 TRUNCATE
Удаляет всё
Молниеносный
Не всегда откатывается
Триггеры не срабатывают
⚠️ Используй, когда нужно полностью очистить таблицу и ты уверен в этом
А ты что чаще используешь — DELETE или TRUNCATE?
И бывало ли, что TRUNCATE сделал тебе больно? 😅
🧹 DELETE vs TRUNCATE в SQL — почувствуй разницу ⚔️
Оба эти SQL-запроса удаляют данные из таблицы, но делают это совсем по-разному. И если ты случайно применишь не тот — можно потерять важные данные безвозвратно. Так в чём же разница?
🔪 DELETE
Удаляет по WHERE
Медленный (фиксирует каждую строку)
Можно откатить (ROLLBACK)
Срабатывают триггеры
✅ Используй, когда нужна точечная чистка.
💣 TRUNCATE
Удаляет всё
Молниеносный
Не всегда откатывается
Триггеры не срабатывают
⚠️ Используй, когда нужно полностью очистить таблицу и ты уверен в этом
А ты что чаще используешь — DELETE или TRUNCATE?
И бывало ли, что TRUNCATE сделал тебе больно? 😅
Channel name was changed to «К собеседованию на аналитика за день»
#sql🔑 Что такое PRIMARY KEY в SQL?
Это уникальный идентификатор строки.
Пример:
CREATE TABLE users (
id INT PRIMARY KEY,
name TEXT
);
📌 Он:
✅ Уникальный
❌ Не может быть NULL
🔁 Бывает составной (из нескольких колонок)
🧱 Нужен для связи таблиц (FOREIGN KEY ссылается на него)
Это уникальный идентификатор строки.
Пример:
CREATE TABLE users (
id INT PRIMARY KEY,
name TEXT
);
📌 Он:
✅ Уникальный
❌ Не может быть NULL
🔁 Бывает составной (из нескольких колонок)
🧱 Нужен для связи таблиц (FOREIGN KEY ссылается на него)
#sql📊 Нормализация данных в SQL
🔎 Что это?
Нормализация — это процесс организации таблиц и связей в базе данных так, чтобы:
* не было дублирования информации,
* данные были целостными,
* изменения были проще.
📌 Идея: каждый факт хранится только один раз, а всё остальное связывается ключами.
🧱 Зачем нужна нормализация
* Избегаем дублей: один клиент — одна строка в Customers, а не в каждой таблице.
* Обеспечиваем целостность: если изменился email клиента, он изменится один раз, а не в 1000 заказов.
* Упрощаем обновление: меньше риска ошибок при изменениях.
* Экономим место: данные не копируются везде подряд.
📐 Нормальные формы (NFs)
1НФ (первая нормальная форма)
Каждое поле хранит только одно значение (атомарность).
❌ Плохо: phones = "123, 456, 789".
✅ Хорошо: таблица Phones с одной строкой = один телефон.
2НФ (вторая нормальная форма)
Все неключевые атрибуты зависят от всего первичного ключа, а не его части.
Актуально, если ключ составной.
3НФ (третья нормальная форма)
Нет зависимостей от других неключевых полей.
Данные зависят только от ключа, а не друг от друга.
🛒 Пример (без нормализации → с нормализацией)
❌ Плоская таблица Orders:
| order_id | customer_name | customer_email | product_name | price |
Проблемы:
* один и тот же клиент встречается сотни раз,
* изменился email → менять везде,
* риск ошибок и дублей.
✅ После нормализации:
* Customers(customer_id, name, email)
* Products(product_id, name, price)
* Orders(order_id, customer_id, product_id)
Теперь:
* у каждого клиента 1 запись,
* продукты не дублируются,
* заказы связывают всё через ключи.
🔎 Что это?
Нормализация — это процесс организации таблиц и связей в базе данных так, чтобы:
* не было дублирования информации,
* данные были целостными,
* изменения были проще.
📌 Идея: каждый факт хранится только один раз, а всё остальное связывается ключами.
🧱 Зачем нужна нормализация
* Избегаем дублей: один клиент — одна строка в Customers, а не в каждой таблице.
* Обеспечиваем целостность: если изменился email клиента, он изменится один раз, а не в 1000 заказов.
* Упрощаем обновление: меньше риска ошибок при изменениях.
* Экономим место: данные не копируются везде подряд.
📐 Нормальные формы (NFs)
1НФ (первая нормальная форма)
Каждое поле хранит только одно значение (атомарность).
❌ Плохо: phones = "123, 456, 789".
✅ Хорошо: таблица Phones с одной строкой = один телефон.
2НФ (вторая нормальная форма)
Все неключевые атрибуты зависят от всего первичного ключа, а не его части.
Актуально, если ключ составной.
3НФ (третья нормальная форма)
Нет зависимостей от других неключевых полей.
Данные зависят только от ключа, а не друг от друга.
🛒 Пример (без нормализации → с нормализацией)
❌ Плоская таблица Orders:
| order_id | customer_name | customer_email | product_name | price |
Проблемы:
* один и тот же клиент встречается сотни раз,
* изменился email → менять везде,
* риск ошибок и дублей.
✅ После нормализации:
* Customers(customer_id, name, email)
* Products(product_id, name, price)
* Orders(order_id, customer_id, product_id)
Теперь:
* у каждого клиента 1 запись,
* продукты не дублируются,
* заказы связывают всё через ключи.
❓ Псевдонимы в SQL: когда нужны кавычки или скобки?
👉 AS писать не обязательно — работает и так.
👉 Простые имена без пробелов пишем без всего.
👉 С пробелами или символами — "...".
👉 допускаются [...].
⚡️ Алиасы делают результат понятнее и красивее, структуру базы они не меняют.
SELECT
e_mail AS email, -- алиас одним словом (не нужны не "" ни [])
e_mail email, -- можно и без AS
FirstName "First Name", -- есть пробел → нужны ""
LastName [Last Name] -- в MS SQL можно []
FROM customers;
👉 AS писать не обязательно — работает и так.
👉 Простые имена без пробелов пишем без всего.
👉 С пробелами или символами — "...".
👉 допускаются [...].
⚡️ Алиасы делают результат понятнее и красивее, структуру базы они не меняют.
Давайте придумаем название? Кому какой вариант больше нравится?
Anonymous Poll
13%
1 день до аналитика
38%
Аналитик за день
0%
Data SOS
0%
Data за день
25%
За день до offer’а
25%
Краткий курс аналитика
К собеседованию на аналитика данных за день pinned «Давайте придумаем название? Кому какой вариант больше нравится?»
🤦♂️ Ошибки с BETWEEN: кто не путался?
Каждый, кто писал первые запросы на SQL, хоть раз наступал на эти грабли с BETWEEN.
🔥 Топ ошибок:
1. Думал, что BETWEEN исключает границы
2. С датами вообще беда (Это была моя первая ошибка в SQL)
Звучит красиво, но если у created_at есть время, то 31 января 18:00 не попадёт, хоть оно и включено, но до 00:00:00.
Нужно писать:
😅 у кого какая была первая ошибка с BETWEEN?
Каждый, кто писал первые запросы на SQL, хоть раз наступал на эти грабли с BETWEEN.
🔥 Топ ошибок:
1. Думал, что BETWEEN исключает границы
ожидал цены только от 100.01 до 499.99
SELECT *
FROM orders
WHERE price BETWEEN 100 AND 500;
2. С датами вообще беда (Это была моя первая ошибка в SQL)
WHERE created_at BETWEEN '2024-01-01' AND '2024-01-31';
Звучит красиво, но если у created_at есть время, то 31 января 18:00 не попадёт, хоть оно и включено, но до 00:00:00.
Нужно писать:
WHERE created_at >= '2024-01-01'
AND created_at < '2024-02-01';
😅 у кого какая была первая ошибка с BETWEEN?
Channel name was changed to «К собеседованию на аналитика данных за день»
Выведи для каждого пользователя первое наименование, которое он заказал (первое по времени транзакции).
Поля в результирующей таблице:
* user_id
* item
Поля в результирующей таблице:
* user_id
* item
#логика
Аня, Ваня и Саня сели в автобус, не имея медных монет, однако сумели заплатить за проезд, потратив по пять копеек каждый. Как им это удалось?
Напомним, что «медными» назывались монеты достоинством в 1, 2, 3 и 5 копеек, делавшиеся из бронзы. Помимо них в ходу были «серебряные» монеты достоинством в 10, 15, 20 и больше копеек, которые делались из никелевого сплава.
Аня, Ваня и Саня сели в автобус, не имея медных монет, однако сумели заплатить за проезд, потратив по пять копеек каждый. Как им это удалось?
Напомним, что «медными» назывались монеты достоинством в 1, 2, 3 и 5 копеек, делавшиеся из бронзы. Помимо них в ходу были «серебряные» монеты достоинством в 10, 15, 20 и больше копеек, которые делались из никелевого сплава.
