Анализ данных  •  01 июня  2023  •  5 мин чтения

Типы данных SQL: что о них нужно знать начинающему аналитику

Типы данных SQL отвечают за то, сколько места закладывать на хранение информации и какие операции с ней можно проводить. Разберём, какими они бывают и как с ними работать.

Для чего используются типы данных в SQL

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

База данных, или БД, — это набор таблиц с информацией, которая связана между собой.

Система управления базами данных, или СУБД, — это связующее звено между БД и пользователем. Когда аналитику данных нужно найти что-то в базе, например всех клиентов по фамилии Иванов, он обращается к СУБД. Система получает запрос, ищет нужную информацию в базе и показывает её аналитику.

SQL — это язык программирования, созданный специально для хранения и обработки информации в БД. Именно на языке структурированных запросов SQL инженер базы данных задаёт структуру и правила обработки информации, а аналитик формулирует запросы к СУБД.

Чтобы информация в базе не смешивалась и работать с ней было проще, её делят на типы. Зная типы данных SQL, аналитик сможет сформулировать корректные запросы.

Типы данных SQL — это своего рода маркеры, которые указывают на свойства данных и необходимый объём места для их хранения.

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

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

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

Возьмем для примера базу данных лояльных клиентов магазина. В этой базе хранятся ФИО клиентов, номера телефонов, e-mail-адреса, потраченная каждым из них сумма. Чтобы аналитику не пришлось выискивать нужную информацию в массиве данных, все они хранятся в отдельных полях и ячейках, и у каждого поля SQL — свой тип данных. Если ввести сумму, потраченную каждым клиентом, текстом, данные невозможно будет сложить, чтобы вычислить общую выручку компании. Поэтому инженер БД изначально прописывает, что сумма — это число. Так пользователи просто не смогут ввести в это поле данные в другом формате.

Существуют разные СУБД, которые поддерживают разные типы данных. Самые распространённые системы — MySQL, PostgreSQL, Microsoft SQL, Oracle. Общие принципы работы и синтаксис во всех системах примерно одинаковы, однако перед началом работы лучше ознакомиться с документацией. В разных СУБД типы данных языка SQL могут иметь одинаковые названия, но свойства у них могут быть разные.

Классификация типов данных SQL и примеры их использования

Для хранения разной информации в базе нужны разные форматы записи: текст, число, дата и время или просто «да или нет». Под каждый формат существует свой тип данных, который указывает на свойства и необходимый объём места для хранения.

Основные типы данных обычно универсальны для всех СУБД, даже если и называются по-разному. Рассмотрим, как устроена классификация данных, на примере PostgreSQL.

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

В обычной жизни встречаются целые и дробные числа. Последние ещё называют числами с плавающей точкой или запятой — например, 6,47. В языке SQL числовые типы данных делятся по тому же принципу. Разберём некоторые из них.

PostgreSQL также распознает тип float(n), но в зависимости от значения n автоматически относит данные этого типа либо к real, либо к double precision
Создать уникальный идентификатор для каждого клиента в базе можно с помощью типа int, потому что нумерация, как правило, ведётся в целых числах. А вот цены обычно учитывают с точностью до копеек, поэтому для их хранения лучше подойдёт тип float.

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

Александр Сушков,
преподаватель и автор курсов, аналитик данных, эксперт SQL

Если при создании таблицы для поля «цена товара» указать тип float, то система автоматически установит максимальный диапазон — 15 десятичных цифр по обе стороны от запятой. Но если инженер базы данных заранее знает, что цены на товары производителя не превышают 9 999, 99 ₽, он может изначально указать тип данных float (6). Тем самым он даст понять системе, что ожидаемые значения будут в пределах 6 знаков по обе стороны запятой. Ровно столько памяти система и выделит для хранения цен. В таком формате данные займут меньше места, чем просто в формате float.

Строковые
База данных может содержать ФИО клиентов, их адреса, описания товаров или примечания. Например, в базе заказов онлайн-магазина могут быть пометки для курьеров: «позвонить у подъезда, домофон не работает», которые тоже будут храниться в формате текста. Во всех этих случаях для работы с информацией используют строковые типы данных SQL.
Все строковые типы данных SQL можно формально разделить на два типа: переменной или фиксированной длины. Размер памяти, выделенной для хранения текстовых данных, зависит от фактического количества символов или установленного ограничения
Для хранения ФИО можно указать тип данных varchar(n), поскольку максимальную длину записи в этом случае можно спрогнозировать. Чтобы никого не обидеть, можно задать ожидаемое количество символов по максимуму — varchar(100). В такие широкие рамки по количеству знаков с пробелами уместится даже Христорождественская-Иванова Вильгельмина Хаджимуратовна (56 знаков).

Тип varchar(n) также подойдет для примечаний, поскольку конкретную длину строки предугадать невозможно, но и поэм в три тома никто не ожидает.

Для хранения паролей можно использовать тип данных char(n), поскольку в этом случае речь, как правило, идет о строках вполне определённой длины — в среднем 10 или 12 символов. Если изначально указать необходимое ограничение — char(10), система оставит ровно столько места для хранения данных, сколько необходимо.

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

Дата и время
Во всех СУБД существуют специальные типы данных для работы с датой и временем. Теоретически даты можно указывать и прописью, например ‘11 сентября 2022 года’. Но в таком случае аналитику будет сложно найти все сделки, например за последний месяц или год. Для этого понадобится сначала выяснить, есть ли в нужной колонке слово ‘сентябрь’. А если месяц в базе указан по-разному, например как ‘сент’, ‘сент.’ или ‘september’, часть данных от него ускользнет или работать над простым выводом данных придется намного дольше. Вместо этого можно сразу установить тип data и получить унифицированный формат записи информации в базу.

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

В PostgreSQL все даты определяются по григорианскому календарю, а время хранится в формате часов, минут, секунд и даже наносекунд, которые прошли с 1 января 1970 года. Такой способ хранения данных позволяет легко перенести их из одной системы в другую, даже если названия типов данных в них не совпадают
Начинающим аналитикам нужно быть осторожнее с форматом timestamp, поскольку он существует в двух вариациях — с учётом часового пояса и без. К примеру, аналитику московской компании, который живёт в Иркутске, нужно выгрузить данные о продажах с 8 утра до 17 вечера. Если он выберет тип данных timestamp with time zone, отчёт получится некорректным.
Булевые, или логические
Иногда в таблице достаточно зафиксировать простое «да или нет», «true или false», «0 или 1». Например, чтобы в базе компаний отметить, какие из них ещё работают, а какие — закрыты. Такую информацию можно хранить и в текстовом формате, но куда проще использовать для решения этой задачи специальный тип данных boolean или bool.

Такой тип ещё называют «логическим». Он предусматривает всего два состояния: true или false, которых вполне достаточно, чтобы указать, работает компания или нет. Кроме того, данные этого типа занимают всего 1 байт, и их использование позволяет заметно сэкономить место в памяти системы.

Хранение типов данных SQL

Типы данных полей SQL назначаются с помощью СУБД и хранятся под капотом системы.
Вот так выглядит код для создания таблицы с данными трёх типов: идентификатор пользователя, дата мероприятия и его название
Если аналитик откроет таблицу, в каждой ячейке он увидит конкретное значение, но не его тип.
Таблица, созданная в результате выполнения кода. Тип данных для уникального идентификатора пользователей — int8, для даты мероприятия — date, а для названия мероприятия — text. При этом в самой таблице эти типы не указаны
В процессе использования таблицы тип данных можно изменить, но лучше изначально выбрать корректный, чтобы вся информация в таблице была записана в одном и том же виде и с ней удобно было работать без дополнительных преобразований.

Значение NULL

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

У значения NULL есть важное свойство, которое нужно усвоить начинающим аналитикам: NULL не равен ничему и даже самому себе. По этой причине обычное условие — «если такое-то значение равно NULL, сделай вот это» — не сработает. Потому что NULL ничему не равен. В языке SQL есть специальные операторы, которые позволяют аналитикам работать с этим значением.

Как преобразовать типы данных в SQL

В языке SQL существует универсальная функция cast. С её помощью можно изменить тип данных при работе с ними.
Этой командой аналитик даёт указание системе: с помощью оператора DATE_TRUNC выдели из даты месяц, а поскольку дата указана в формате varchar, сначала с помощью функции cast переведи её в формат timestamp
Важно помнить, что с помощью cast можно преобразовать только подходящие данные. Например, строковое значение ‘345’ можно превратить в число, изменив тип данных, а вот ‘триста сорок пять’ уже нет.
Система не умеет читать, поэтому при попытке преобразовать цифру, указанную прописью, в число, выдаёт ошибку

Совет эксперта

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

Статью подготовили:
Яндекс Практикум
Преподаватель и автор курсов, аналитик данных, эксперт SQL
Анна Семенец
Яндекс Практикум
Редактор
Полина Овчинникова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться
Thu Oct 17 2024 17:55:29 GMT+0300 (Moscow Standard Time)