SQL и БД Learning
10.4K subscribers
780 photos
9 videos
22 files
432 links
№ 5060218708

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

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

Реклама на бирже - https://telega.in/c/SQl_and_DB_Learning
Download Telegram
Задача

Выбрать все записи из таблицы tbl_name и отсортировать их по полю id в обратном порядке.
👍7😁5
Рассмотрение CASE WHEN THEN как оператор if

Одним из применений CASE WHEN THEN является использование ее в качестве замены оператора if в программировании.

Использование конструкции CASE WHEN THEN может значительно упростить код и улучшить читаемость запросов в базе данных.
👍10
#вопросы_с_собеседований
Достаньте одним запросом все страницы вместе с их подкатегориями и категориями.

Даны 3 таблицы: таблица category с полями id и name, таблица sub_category с полями id и name и таблица page с полями id, name и sub_category_id.

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

- Объяснение:

- SELECT:
выбираем необходимые столбцы из таблицы page.
- FROM: указываем таблицу page, которая будет являться нашей основной таблицей.
- JOIN: объединяем таблицу sub_category по id подкатегории из таблицы page.
- ON: указываем, что id подкатегории в таблице page должен быть равен id подкатегории в таблице sub_category.
- JOIN: объединяем таблицу category по id категории из таблицы sub_category.
- ON: указываем, что id категории в таблице sub_category должен быть равен id категории в таблице category.
- SELECT: выбираем название подкатегории из таблицы sub_category и название категории из таблицы category.
- AS: переименовываем названия столбцов для удобства чтения.
👍9
#Вопросы_с_собеседования
Объясните разницу между INNER JOIN и LEFT JOIN в SQL и приведите пример ситуации, в которой каждый из них наиболее подходит

INNER JOIN в SQL возвращает строки, когда есть совпадение в обеих таблицах, в то время как LEFT JOIN возвращает все строки из левой таблицы и совпадающие строки из правой таблицы; строки, для которых нет совпадений в правой таблице, будут иметь NULL в этих столбцах. INNER JOIN подходит, когда необходимо найти точные совпадения между таблицами, тогда как LEFT JOIN используется, когда нужно включить все записи из одной таблицы, даже если соответствующих совпадений в другой таблице нет.
👍8
#Вопросы_с_собеседования
Как SQL-запрос с использованием операторов JOIN может быть оптимизирован для ускорения выполнения, если одна из таблиц содержит миллионы записей, а другая – только несколько сотен? Опишите три различных подхода к оптимизации

Использование Индексов: Создание индексов на столбцах, участвующих в JOIN, может значительно ускорить процесс, особенно на столбцах большой таблицы. Если JOIN выполняется по столбцу, который является первичным ключом или имеет уникальный индекс, это обычно обеспечивает наилучшую производительность.

Оптимизация Порядка JOIN: Порядок, в котором таблицы соединяются в запросе, может влиять на производительность. Лучше начинать с таблицы с наименьшим количеством строк (в данном случае, таблицы с несколькими сотнями записей), что может уменьшить количество обрабатываемых данных на более ранней стадии выполнения запроса.

Использование Подзапросов или CTE (Common Table Expressions): В некоторых случаях, использование подзапросов или CTE для предварительной фильтрации данных перед выполнением JOIN может быть эффективным. Например, можно сначала выделить необходимые данные из меньшей таблицы с помощью подзапроса или CTE, а затем выполнить JOIN с большей таблицей. Это может сократить количество обрабатываемых данных и ускорить выполнение запроса.

Каждый из этих подходов может помочь в оптимизации запросов SQL, особенно когда речь идет о соединении таблиц с большим различием в размерах.
👍7
Аналитика небольших данных: как совместить Excel, Python и SQL с помощью инструментов с открытым исходным кодом

Смотреть статью
👍3
👍8🎄2
Различия между операторами IN и EXISTS

Операторы IN и EXISTS - операторы, которые используются для фильтрации данных в запросах. Они имеют различия в своем использовании и функционале.

1. Оператор IN используется для сравнения значения столбца с набором значений, указанных в запросе. Он возвращает значение true, если значение столбца соответствует хотя бы одному из значений в списке. См. Пример 1.

2. Оператор EXISTS используется для проверки наличия записей в подзапросе. Если подзапрос возвращает хотя бы одну запись, то оператор EXISTS возвращает значение true. См. Пример 2.

Различия между операторами IN и EXISTS:

- Оператор IN используется для сравнения значения столбца с набором значений, а оператор EXISTS для проверки наличия записей в подзапросе.
- Оператор IN не требует наличия связи между таблицами, а оператор EXISTS требует наличия связи между основной таблицей и подзапросом.
- Оператор IN может использовать список значений или подзапрос, а оператор EXISTS может использовать только подзапрос.
👍5
Индекс GIN

Индекс GIN - это тип индекса в PostgreSQL, который позволяет эффективно искать данные в полнотекстовых полях, массивах, JSON и других типах данных. Он создается на столбцах с комплексными или составными типами данных, такими как полнотекстовые данные или JSON. Индекс разбивает значения в столбце на отдельные элементы и создает отображение между этими элементами и строками в таблице, что позволяет быстро искать значения в этих типах данных.

Преимущества использования индекса GIN:
- Быстрый поиск по полнотекстовым данным и другим составным типам данных
- Поддержка операций поиска, включая поиск по подстроке и полнотекстовый поиск
- Поддержка операций над массивами, такие как поиск элементов массива и проверка наличия значения в массиве
- Возможность использования в комбинации с другими индексами для дополнительной оптимизации запросов

Создание индекса осуществляется с указанием типа индекса как GIN и имени столбца, на котором создается индекс.
Пример: CREATE INDEX idx_gin ON mytable USING GIN (mycolumn);

Использование индекса GIN в запросах выполняется с помощью оператора @@ или функции tsquery.
👍2
REPLICATE в SQL Server

REPLICATE
- это функция в SQL Server, которая повторяет входную строку указанное количество раз. Эта функция может быть полезна во многих сценариях, например, при создании тестовых данных или при форматировании вывода.

Синтаксис функции REPLICATE выглядит следующим образом:
REPLICATE ( string_expression , integer_expression )

- string_expression - это строковое выражение, которое нужно повторить.
- integer_expression - это выражение целого типа, определяющее количество раз, которое нужно повторить строку.
👍4
Преобразование xml-поля в SQL

Для преобразования xml-поля в SQL необходимо выполнить следующие шаги:

1. Создать таблицу в базе данных с полем типа xml.

2. Вставить данные в таблицу.

3. Использовать функции для извлечения данных из xml-поля.
Например, функция value() извлекает значение элемента или атрибута из xml-поля.

4. При необходимости, выполнить другие действия с данными, полученными из xml-поля, с помощью стандартных средств SQL.
👍4🔥1
Все о jsonb_to_recordset в SQL

Функция jsonb_to_recordset в SQL используется для преобразования данных, хранящихся в формате JSON, в таблицы. Она позволяет распаковывать массивы и объекты JSON и превращать их в строки и столбцы в таблице.

Кроме того, jsonb_to_recordset позволяет работать с вложенными объектами и массивами. Для этого нужно использовать функцию jsonb_each, которая распаковывает объекты и массивы JSON в отдельные строки.
👍4
SQL Server: DATEFROMPARTS

Функция
DATEFROMPARTS принимает в качестве параметров год, месяц и день и возвращает значение даты.

Синтаксис функции следующий:
DATEFROMPARTS ( year, month, day )

Функция принимает следующие параметры:
- year - (целое число);
- month - (целое число от 1 до 12);
- day - (целое число от 1 до 31).
👍2
BINARY - MySQL

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

BINARY имеет следующие характеристики:

- Фиксированная длина:
Длина поля BINARY всегда фиксирована и задается при создании таблицы. Например, если вы создаете поле BINARY(10), то оно всегда будет занимать 10 байт в таблице, даже если вы вставляете данные меньшего размера.
- Регистрозависимость: Данные типа BINARY регистрозависимы, что означает, что значения 'abc' и 'ABC' будут различаться, даже если они имеют одинаковую длину.

- Сравнение: Для сравнения данных типа BINARY используется бинарное сравнение, то есть двоичный код каждого символа сравнивается отдельно.
- Индексирование: Поля типа BINARY могут быть проиндексированы, что повышает скорость поиска данных.
👍2
MySQL: PERIOD_ADD

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

Синтаксис PERIOD_ADD выглядит следующим образом:

PERIOD_ADD(P,N) - где P - это период в формате YYMM или YYYYMM, а N - это количество периодов, которые нужно добавить к указанной дате.
👍4
Функция WEEK в MySQL

Функция WEEK используется для извлечения номера недели из даты.

Базовый синтаксис функции выглядит следующим образом:
WEEK( date_value, [ mode ] )

- date_value - значение даты или даты/времени, из которого извлекается неделя.
- mode - Необязательный. Он используется для указания дня недели. Это может быть один из следующих вариантов:

Примечание:
1.
Функция WEEK возвращает значение от 0 до 53 или от 1 до 53 в зависимости от указанного режима.
2. Если вы используете MySQL 4.0.14+, а режим не указан, функция WEEK будет использовать значение в системной переменной default_week_format в качестве режима.
3. Если вы используете версию MySQL, которая старше 4.0.14, а режим не указан, функция WEEK будет использовать 0 в качестве режима.
4. Функция WEEKOFYEAR возвращает то же самое, что и функция WEEK с синтаксисом WEEK (date_value, 3).
👍3
#Вопросы_с_собеседования
Расскажите алгоритм решения следующей задачи

Предположим, у вас есть две таблицы: Orders (Заказы) и Customers (Клиенты). Таблица Orders содержит колонки OrderID, CustomerID и OrderDate, а таблица Customers содержит CustomerID, Name и Country. Как бы вы нашли имена всех клиентов из США, которые не сделали ни одного заказа после 1 января 2022 года?

Для решения этой задачи можно использовать подзапросы или соединения таблиц. Один из подходов - использовать левое соединение (LEFT JOIN) между Customers и Orders, фильтруя заказы после указанной даты. Затем можно использовать WHERE условие, чтобы выбрать только тех клиентов, у которых нет соответствующих записей в Orders после этой даты и которые находятся в США. Это демонстрирует понимание соединений таблиц, фильтрации и работы с датами в SQL.
👍6