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
Функция CAST

Функция CAST() в MySQL преобразует значение в указанный тип данных. Это очень полезная функция, которая может помочь в решении различных задач. Например, она может быть использована для преобразования значения в DATE, DATETIME, DECIMAL, TIME, CHAR, NCHAR, SIGNED, UNSIGNED, BINARY.

Рассмотрим примеры использования функции CAST(). Предположим, у нас есть таблица с именем "products", которая содержит столбец "price". Если мы хотим преобразовать значения в столбце "price" в тип данных DECIMAL, мы можем воспользоваться функцией CAST() следующим образом:

SELECT CAST(price AS DECIMAL) FROM products;

Таким образом, мы получим значения в столбце "price", преобразованные в тип данных DECIMAL.
👍6
Как узнать размер файла с помощью SQL?

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

Замените [имя_столбца_с_файлом] на имя столбца, содержащего файл, [имя_таблицы] на имя таблицы, содержащей файл, а [условие] на условие выборки файлов.

Например, если у вас есть таблица Файлы с столбцом Содержимое_файла, и вы хотите узнать размер файла с id 1, обращаемся ко второй части фото.
👍4
Крутой Python-пакет на базе ИИ для автоматической генерации SQL-запросов

Фреймворк Vanna позволяет создавать сложные SQL-запросы всего за несколько секунд. Не нужно тратить время на написание этих запросов вручную! Просто задавайте вопросы, и Vanna сама сгенерирует необходимые запросы.

Vanna - это не просто еще один инструмент автоматизации. Она может похвастаться высокой точностью на самых сложных наборах данных, обеспечивая безопасность и конфиденциальность вашей информации. Более того, Vanna обладает самообучающейся способностью, что означает, что ваши запросы будут становиться все более точными по мере использования.
👍5🔥2
Отличия MySQL от PostgreSQL. Выбираем что лучше, PostgreSQL или MySQL

В данной статье мы сравним PostgreSQL и MySQL по различным параметрам и запишем их в сравнительную таблицу.

Перейти к статье
👍5🔥1
Пейджинг данных CTE

Пейджинг данных – это процесс разбиения большого объема данных на меньшие части или страницы. Это может быть полезно при работе с большими таблицами, когда нужно извлечь данные только для определенной страницы.

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

WITH Orders_CTE AS (
SELECT OrderID, CustomerID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber
FROM Orders
)
SELECT OrderID, CustomerID, OrderDate
FROM Orders_CTE
WHERE RowNumber BETWEEN {start} AND {end}

- {start} – начальный номер строки
- {end} – конечный номер строки
👍9🔥1
SQL: загадки на сообразительность

Перейти
👍4🔥1
Задача повышенной сложности

В базе данных есть таблица "orders" с полями "id" (уникальный идентификатор заказа), "customer_id" (уникальный идентификатор клиента, который сделал заказ), "total_price" (общая стоимость заказа) и "created_at" (дата создания заказа). Необходимо найти все заказы, сделанные клиентом, сумма которых превышает среднюю сумму заказов всех клиентов. Результат должен быть отсортирован по дате создания заказа в порядке убывания.

Решение:
SELECT orders.id, orders.total_price, orders.created_at
FROM orders
WHERE orders.customer_id IN (
SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING AVG(total_price) < (
SELECT AVG(total_price)
FROM orders
)
)
ORDER BY orders.created_at DESC;
👍73🔥2
Table Hints в T-SQL

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

Некоторые хинты для таблиц:

- INDEX – оптимизатор запросов будет использовать указанный индекс при обработке запроса;
- FORCESEEK – оптимизатор запросов будет использовать только операцию поиска в индексе в качестве пути доступа к данным;
- FORCESCAN – оптимизатор запросов будет использовать только операцию сканирования в индексе в качестве пути доступа к данным;
- ROWLOCK – блокировки строк применяются вместо блокировки страниц или таблиц;
- HOLDLOCK – накладывает дополнительные ограничения на совмещаемую блокировку, удерживая ее до завершения транзакции. Хинт HOLDLOCK равнозначен хинту SERIALIZABLE;
- NOLOCK – разрешает «грязное чтение». Хинт NOLOCK равнозначен хинту READUNCOMMITTED;
- NOEXPAND – указывает, что индексированное представление не расширяется для доступа к базовым таблицам. Такое представление обрабатывается так же, как и таблица с кластеризованным индексом.

Хинты для таблиц указываются в предложении FROM с помощью ключевого слова WITH после названия таблицы или представления.
👍7
AND, OR и NOT Операторы

Предложение WHERE можно комбинировать с операторами AND, OR и NOT.

Операторы AND и OR используются для фильтрации записей на основе более одного условия:

- Оператор AND отображает запись, если все условия разделены AND являются TRUE.
- Оператор OR отображает запись, если любое из условий, разделенных OR является TRUE.
- Оператор NOT отображает запись, если условие является NOT TRUE.

Демонстрационная база данных

Здесь показана полная таблица "Customers" ("Клиенты") из образца базы данных Northwind

Опираясь на таблицу, примеры по каждому оператору и их комбинированию находятся в фото!
👍2🔥1
SQL SELECT TOP

Выражение SELECT TOP используется для определения количества записей при выборке.

SQL SELECT TOP полезен для больших таблиц с тысячами записей. Возврат большого количества записей может повлиять на производительность.

Не все системы баз данных поддерживают предложение SELECT TOP. MySQL поддерживает предложение LIMIT для выбора ограниченного количества записей, тогда как Oracle использует FETCH FIRST n ROWS ONLY и ROWNUM.

Все виды синтаксисов - здесь

В таблице приведена выборка из таблицы "Customers" базы данных Northwind

В фото разбираем такие примеры, как:
1 фото
- SQL TOP, LIMIT и FETCH FIRST
2 фото - SQL TOP PERCENT
3 фото - Использование выражения WHERE
👍2
Почему данный код выведет ошибку?

SELECT id, name, CONCAT ('EU:', city) AS city_m
FROM customers
WHERE city_m = 'EU:Oslo';

Код выдаст ошибку, так как в данном случае alias нельзя использовать в операторе WHERE.

Порядок выполнения упомянутого SELECT запроса следующий:
1. FROM
2. WHERE
3. SELECT

Соответственно при выполнении команды WHERE, alias, задаваемый в SELECT еще неизвестен.

Для PostgreSQL или MySQL данную проблему можно решить, например, следующим образом:

```WITH ct AS (
SELECT id, name, CONCAT ('EU:', city) AS city_m
FROM customers
)
SELECT ct.*
FROM ct
WHERE ct.city_m = 'EU:Oslo';
👍101
#вопросы_с_собеседований
Имеет ли значение порядок колонок в составном индексе?

Да, порядок колонок в составном индексе имеет значение.

Рассмотрим пример:

У нас есть таблица orders с колонками order_id, customer_id, order_date, product_id и quantity. Нам необходимо создать составной индекс для ускорения поиска заказов по customer_id и order_date.

Мы можем создать два индекса:

1. Индекс по (customer_id, order_date)
2. Индекс по (order_date, customer_id)

В первом случае, запросы с условием WHERE customer_id = ? AND order_date = ? будут выполняться быстрее, так как эти колонки находятся в порядке, указанном в индексе.

Во втором случае, запросы с условием WHERE order_date = ? AND customer_id = ? будут выполняться медленнее, так как порядок колонок не соответствует порядку в индексе.

Таким образом, порядок колонок в составном индексе имеет значение и должен соответствовать порядку, в котором используются колонки в запросах.
👍9🔥1😱1
👍4🔥2
Пейджинг данных OFFSET…FECTCH

Пейджинг данных – это процесс разбиения большого объема данных на меньшие части или страницы. Это может быть полезно при работе с большими таблицами, когда нужно извлечь данные только для определенной страницы.

Оператор OFFSET…FETCH был добавлен в SQL Server 2012 и позволяет выбирать данные с определенной позиции. Он имеет следующий синтаксис:

SELECT {columns}
FROM {table}
ORDER BY {column}
OFFSET {offset} ROWS
FETCH NEXT {fetch} ROWS ONLY

- {columns} – список столбцов для извлечения данных
- {table} – имя таблицы
- {column} – столбец для сортировки
- {offset} – количество строк для пропуска
- {fetch} – количество строк для выборки
👍4