22 янв 2025
8 минут

Типы данных SQL

Базы данных и SQL
Аналитика

Что произойдет, если цена товара в интернет-магазине будет храниться в виде текста, а дата заказа записана словами? Например, в колонке «Цена» указано «три тысячи» или «2999₽», а в поле даты доставки — «завтра». При таких вводных посчитать общую выручку или запланировать доставку будет невозможно!
Вот почему в SQL существуют строгие типы данных — они задают правила хранения данных. Разберемся, какие типы бывают и как их правильно применять.

Зачем нужны типы данных в SQL

Неправильный тип данных может увеличить размер базы на 30–50% и замедлить выполнение запросов в 1,5–2 раза. Поэтому правильный выбор критически важен для работы. Разберемся в основных понятиях и посмотрим, как это устроено.

База данных (БД) — это как большая электронная таблица, где интернет-магазин хранит информацию о товарах, заказах и клиентах. Например, в одной колонке записаны названия товаров, в другой — цены, а в третьей — даты заказов.

OrderIDа

CustomerName

ProductName

Price

OrderDate

IsPaid

1

Иван Фомин

Смартфон A53

34,990.00

2025-01-15

Да

2

Ольга Смирнова

Наушники 510BT

4,990.00

2025-01-16

Нет

3

Алексей Петров

Ноутбук C1001

65,500.00

2025-01-17

Да

Система управления базами данных (СУБД) — это программа, которая следит за тем, чтобы все данные были на своих местах и работали правильно. Она не даст записать текст в колонку для цен или число в поле для даты.

SQL — это язык, с помощью которого магазин «разговаривает» с базой данных. Например, SQL-команда может найти все заказы на сумму больше 5000 рублей или добавить новый заказ.

Типы данных в базе данных в SQL задают правила: где должны быть числа, где текст, а где даты. Если цену товара записать как текст "три тысячи", магазин не сможет посчитать общую выручку. А если указать дату доставки словами "завтра", система не напомнит клиенту о заказе.

Взаимодействие SQL с базой данных можно представить как пошаговый процесс, где каждый элемент выполняет свою роль. Например:

  1. Пользователь оформляет заказ на сайте.

  2. SQL-запрос автоматически создается для добавления нового заказа в базу.

  3. СУБД принимает SQL-запрос, проверяет его корректность и сохраняет данные.

  4. База данных сохраняет всю информацию о заказе и передает подтверждение обратно на сайт.

Как SQL-запросы обрабатываются СУБД и возвращают результат

Классификация типов данных SQL

Теперь, когда мы разобрались, зачем нужны типы данных и как SQL взаимодействует с базой данных, важно понять, какие именно типы данных существуют и как их правильно использовать. Каждый тип данных в SQL решает конкретные задачи. Давайте рассмотрим основные категории.

Классификация типов данных в SQL: числовые, строковые, даты и логические

Числовые типы данных

Предназначены для хранения числовых значений: от простых количественных показателей до сложных финансовых расчетов. Используются в бизнесе для хранения цен, скидок, остатков товаров, номеров заказов.

Числовые типы делятся на две основные группы: целочисленные и дробные. 

Целочисленные типы данных

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

  • TINYINT — хранит маленькие целые числа (от 0 до 255).

Пример: флаг статуса товара: 0 — нет в наличии, 1 — в наличии.

  • SMALLINT — хранит небольшие целые числа (от -32 768 до 32 767).

Пример: количество сотрудников в отделе.

  • INT (INTEGER) — стандартный тип для хранения целых чисел (от -2 147 483 648 до 2 147 483 647).

Пример: id заказа в интернет-магазине.

  • BIGINT — хранит очень большие целые числа (до ±9 квинтиллионов).

Пример: учет больших объемов транзакций в банковской системе.

Дробные типы данных

Используются для хранения чисел с десятичной частью, что важно для точных расчетов, например, при работе с ценами или процентами.

  • FLOAT — с плавающей точкой небольшой точности.

Пример: обменные курсы валют, где допустима погрешность.

  • DOUBLE — с плавающей точкой двойной точности.

Пример: расчеты по сложным формулам, где важна высокая точность.

  • DECIMAL (NUMERIC) — фиксированная точность, используется для финансовых данных.

Строковые типы данных

Строковые типы данных, используемые в sql, нужны для хранения текстов: имен клиентов, адресов, названий товаров и комментариев. В бизнесе они встречаются постоянно — от описаний продукции до отзывов покупателей. 

  • CHAR(n) — строка фиксированной длины. Если введенный текст короче заданной длины, оставшиеся символы будут заполнены пробелами.

Пример: коды валют или коды стран (например, "USD", "RU").

TEXT — длинный текст до 65 535 символов.

Пример: описание товаров, отзывы покупателей, статьи в блогах.

  • TINYTEXT, MEDIUMTEXT, LONGTEXT — разновидности TEXT с разным максимальным размером: от коротких заметок до больших текстов.

Пример: комментарии к товарам или блог-посты.

  • ENUM — строка, ограниченная заранее заданным списком значений.

Пример: статус заказа ('Новый', 'В обработке', 'Доставлен').

  • SET — набор значений, выбранных из заранее заданного множества.

Пример: категории товаров, в которые может входить продукт (например, 'Электроника', 'Новинки').

Типы данных даты и времени

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

  • DATE — хранит только дату в формате YYYY-MM-DD.

Пример: дата оформления заказа: "2024-01-20".

  • TIME — хранит только время в формате HH:MM:SS.

Пример: время доставки заказа: "15:30:00".

  • DATETIME — сочетает дату и время в формате YYYY-MM-DD HH:MM:SS.

Пример: дата и время регистрации пользователя: "2024-01-20 14:45:00".

  • TIMESTAMP — автоматически сохраняет дату и время события. Учитывает временную зону.

Пример: дата последнего обновления заказа.

  • YEAR — хранит только год в формате YYYY.

Пример: год выпуска товара: "2023".

DATE, TIME, DATETIME и TIMESTAMP — типы данных для работы с датой и временем в SQL

Символьные типы данных

Используются для хранения коротких текстов фиксированной или переменной длины. Подходят для записи кодов товаров, артикулов, статусов заказов. 

  • CHAR(n) — строка фиксированной длины. Если введенный текст короче заданной длины, SQL автоматически заполняет оставшиеся символы пробелами.

Пример: коды стран ("RU", "US") или индексы ("101000").

  • VARCHAR(n) — строка переменной длины до заданного количества символов. Это наиболее используемый тип для хранения текстовых данных, если длина строки может варьироваться.

Пример: названия товаров, имена клиентов.

  • BINARY(n) — данные хранятся в виде байтов, что удобно для хранения хэшей и зашифрованных данных.

Пример: хэшированные пароли пользователей.

  • ENUM — строка, ограниченная набором заранее определенных значений. Удобен для хранения фиксированных вариантов, например, статусов или категорий.

Пример: статус заказа ('Новый', 'В обработке', 'Доставлен').

  • SET — множество значений, выбранных из заранее заданного списка. Позволяет хранить сразу несколько значений в одном поле.

Пример: метки товара ('Новинка', 'Акция', 'Хит продаж').

Логические типы данных

Хранят только два значения: истина или ложь. Это удобно для обозначения простых состояний, например: товар в наличии или нет, заказ оплачен или нет, пользователь активен или неактивен.

  • BOOLEAN (BOOL) — принимает только два значения: TRUE (истина) или FALSE (ложь).

Пример: в наличии ли товар на сайте или нет.

  • BIT(n) — битовое значение, где n определяет количество бит. Чаще всего используется BIT(1) для хранения логических значений.

Пример: права доступа (0 — нет доступа, 1 — есть доступ).

  • TINYINT(1) — в некоторых СУБД (например, MySQL) используется как аналог BOOLEAN.

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

Примеры использования данных в SQL

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

Давайте рассмотрим пример.

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

CREATE TABLE Orders (    OrderID INT PRIMARY KEY,                      -- Уникальный номер заказа    CustomerName VARCHAR(100),                   -- Имя клиента    ProductName VARCHAR(100),                    -- Название товара    OrderDate DATETIME DEFAULT CURRENT_TIMESTAMP, -- Дата и время оформления заказа    TotalAmount DECIMAL(10, 2),                 -- Сумма заказа с точностью до копеек    OrderStatus ENUM('Новый', 'В обработке', 'Доставлен', 'Отменен'),  -- Статус заказа    IsPaid BOOLEAN DEFAULT FALSE                -- Оплачен ли заказ );

Как работают разные типы данных столбцов sql в этом примере:

  • INT (OrderID) — уникальный номер заказа;

  • VARCHAR (CustomerName, ProductName) — хранит текстовую информацию: имя клиента и название товара;

  • DATETIME (OrderDate) — фиксирует дату и время оформления заказа;

  • DECIMAL (TotalAmount) — хранит сумму заказа с точностью до копеек;

  • ENUM (OrderStatus) — ограничивает статус заказа фиксированными значениями, предотвращая ошибки ввода;

  • BOOLEAN (IsPaid) — указывает, оплачен ли заказ.


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

SELECT OrderID, CustomerName, TotalAmount FROM Orders WHERE TotalAmount > 5000  AND OrderStatus = 'В обработке'  AND IsPaid = FALSE;

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

Где хранятся типы данных SQL

Данные не просто указываются в таблицах — за хранение типов данных SQL и контроль отвечает Система управления базами данных. СУБД проверяет, чтобы в каждом столбце таблицы находились данные строго заданного типа. Это помогает избежать ошибок и поддерживать порядок.

Таблица с именем и датой рождения, с датой и статусом, с названием и ценой

Когда создается таблица, СУБД сохраняет информацию о ее структуре и типах данных в системных каталогах или метаданных. Эти служебные таблицы содержат информацию о всех объектах базы данных: таблицах, столбцах, индексах и их типах.

Почему это важно?

  • Целостность данных: СУБД не позволит записать текст в числовое поле или дату в текстовом формате.

  • Оптимизация хранения: разные типы данных занимают разное количество памяти, и СУБД хранит их наиболее эффективно.

  • Ускорение запросов: индексы и фильтры работают быстрее, если типы данных SQL в таблице подобраны правильно.

  • Безопасность данных: правильный выбор типов данных помогает защитить базу от ошибок и взломов. Например, если в поле для цены можно записывать только числа, злоумышленник не сможет вставить вредоносный код вместо числа.

Преобразование типов данных в SQL

Иногда данные в базе записаны не в том формате, который нужен для работы. Например, цена товара хранится как текст. Чтобы работать с данными в нужном формате, в SQL используется функция CAST. Она позволяет преобразовать один тип данных в другой — текст в число, дату в текст и многое другое. Это помогает корректно выполнять расчеты, удобно отображать данные и объединять информацию из разных таблиц.

Как работает преобразование данных с помощью CAST в SQL

Зачем нужно преобразовывать типы данных?

  • Правильные расчеты. Нельзя сложить текст "500" и число 1000. Но если превратить текст в число, получится 1500.

  • Удобное отображение. Дату 2024-01-15 можно превратить в текст "15 января 2024", чтобы красиво показать ее на сайте.

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

  • Оптимизация запросов. SQL быстрее обрабатывает запросы, если данные в правильном формате.


Как изменить тип данных в sql:

CAST (выражение AS целевой_тип)
выражение — данные, которые нужно преобразовать
целевой_тип — тип данных, в который выполняется преобразование

Разберем на примере. 
Задача — нужно подготовить отчет по заказам интернет-магазина, где:

  • цена товара хранится как текст, а для расчетов нужна цифра;

  • дату нужно вывести в текстовом формате в виде: "Заказ оформлен 10 января 2024";

  • показать заказы с суммой больше 10 000 рублей.


Исходная таблица Orders:

OrderIDа

CustomerName

Price

Quantity

OrderDate

1

Иван Фомин

34,990.00

2

2024-01-10 14:23:00

2

Ольга Смирнова

4,990.00

1

2024-01-11 09:45:00

3

Алексей Петров

65,500.00

4

2024-01-12 18:10:00

Решение с использованием CAST:

SELECT    CustomerName,    CAST(Price AS DECIMAL(10, 2)) * Quantity AS TotalAmount,    'Заказ оформлен ' + CAST(OrderDate AS VARCHAR) AS FormattedOrderDate FROM Orders WHERE CAST(Price AS DECIMAL(10, 2)) * Quantity > 10000;

Результат запроса:

OrderIDа

CustomerName

TotalAmount

FormattedOrderDate

1

Ольга Смирнова

12500.00

2024-01-11 09:45:00

2

Алексей Петров

14000.00

2024-01-12 18:10:00

Почему здесь уместно преобразование даты в текст?

  • SQL не позволяет напрямую объединить дату и текст.

  • С помощью CAST(OrderDate AS VARCHAR) мы превратили дату в строку, чтобы добавить фразу "Заказ оформлен".

  • Это удобно для создания текстовых отчетов или писем клиентам.


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

Вывод

Умение грамотно работать с типами данных позволяет быстрее анализировать информацию, автоматизировать бизнес-процессы и принимать обоснованные решения.

Сравнение оптимизированной и ошибочной структуры базы данных

Если вы хотите углубить свои знания и научиться уверенно работать с SQL, рекомендуем пройти курс «SQL с 0 для анализа данных» от ProductStar. Вы освоите работу с базами данных, научитесь писать эффективные запросы и анализировать большие объемы данных. Курс включает практику на реальных кейсах, поддержку ментора и сертификат, который ускорит ваш карьерный рост.

Поделиться
star1

Вам может также понравиться

Tableau: обзор программы, возможности и принципы работы
Аналитика
Tableau: обзор программы, возможности и принципы работы
Топ нейросетей для генерации схем, диаграмм и графиков
Разное
Топ нейросетей для генерации схем, диаграмм и графиков
Kanban: полное руководство по методологии визуального управления проектами
Менеджмент
Kanban: полное руководство по методологии визуального управления проектами
Как сделать MVP: критерии, ошибки и реальные сценарии запуска
Менеджмент
Как сделать MVP: критерии, ошибки и реальные сценарии запуска
star2

Курсы, которые выбирают чаще всего