SQL (Structured Query Language) — это язык, на котором пишут запросы к базе данных. С помощью запросов сайт или программа получает из базы информацию. Например, об аккаунтах пользователей или товарах в каталоге.
Язык запросов нужен, чтобы обращаться к системе управления базами данных — СУБД. Сами по себе базы не могут читать запросы и отвечать на них. Это просто таблицы с информацией. Поэтому для работы с ними используют специальные системы, а уже ими управляют с помощью SQL.
СУБД позволяют создавать, наполнять, видоизменять базы данных, получать из них информацию или записывать новые сведения. Язык запросов отдает системе команды выполнить то или иное действие.
![Схема](https://www.unisender.com/wp-content/uploads/2024/06/slide-4_3-86-2.png)
Пользователь или программа обращаются к системе с помощью SQL-запроса, а та в ответ достает из базы и пересылает им данные
Пользователи с доступом к базе данных, например разработчики, могут формировать SQL-запросы вручную. Но чаще запросы создаются автоматически, например в ответ на какие-то действия пользователя на сайте. Так, когда пользователь нажимает «Показать еще» на странице магазина, срабатывает код, который обращается к базе данных, и оттуда подгружаются новые карточки.
Зачем нужен SQL
Получить информацию. Каждый раз, когда сайту или программе нужно обратиться к базе данных, они формируют SQL-запрос — описывают, какая информация нужна.
Например, пользователь выбирает на сайте фильтры, чтобы ему показывались только товары дешевле тысячи рублей. Сервер получает эту информацию с клиентской части сайта и автоматически формирует запрос к базе с таким условием.
Разные условия можно комбинировать друг с другом. Например, в базе хранятся сведения обо всех клиентах компании. С помощью SQL-запросов можно получить из таблицы информацию только о тех, у кого день рождения в этом месяце, и провести для них поздравительную акцию.
Более того, можно по отдельности запросить сведения о мужчинах и женщинах, чтобы сделать для них разные подборки «подарочных» товаров.
Изменить сведения в базе. Иногда информация меняется, например у товара обновляется цена или пользователь привязывает новый номер телефона. Чтобы данные в базе оставались актуальными, нужно перезаписать их — это тоже делается с помощью SQL-запросов. Когда на сайте изменяются сведения, система отправляет запрос на изменение целой таблицы, отдельной записи или группы записей.
Одним запросом можно перезаписать тысячи значений, которые подходят под определенные критерии — скажем, на 20% уменьшить цену у всех товаров дешевле тысячи рублей.
![Пример массовой скидки в разделе зоотоваров на маркетплейсе Wildberries](https://www.unisender.com/wp-content/uploads/2024/06/2-2.png)
Например, в массовых скидках на маркетплейсах участвуют десятки тысяч товаров. Для каждого из них нужно изменить цену и поставить плашку об участии в акции, то есть внести изменения в базу, где они хранятся. Это делается с помощью SQL-запросов
Создать или изменить таблицу. SQL позволяет модифицировать не только отдельную информацию в базе, но и таблицы целиком. Например, можно создать новую базу и добавить к ней дополнительные поля или удалить устаревшую таблицу.
Так, при регистрации нового пользователя в базе создается новое поле: запись с логином, паролем и другими данными, если они нужны.
Задать правила доступа. В SQL есть команды, которые выдают или ограничивают права разных пользователей на доступ к базе: чтение, запись новых данных или изменение существующих. Под пользователями не обязательно имеются в виду люди. Чаще это какие-либо сервисы или подпрограммы.
![Схема работы](https://www.unisender.com/wp-content/uploads/2024/06/slide-4_3-55.png)
Чаще всего к СУБД обращаются разные приложения, работающие на сервере сайта
Провести транзакцию. С помощью SQL можно создавать и запускать транзакции — группы команд, которые последовательно следуют друг за другом. Если хотя бы одна из этих команд завершится ошибкой — все остальные тоже не выполнятся. Это бывает нужно для совершения каких-то сложных многоуровневых операций.
Классический пример — онлайн-перевод денег с одного счета на другой. Сначала нужно указать счет получателя и сумму, потом подтвердить оплату. Затем деньги спишутся с одного счета и придут на другой. Если хоть какое-то из этих действий не сработает, важно, чтобы отменились и все остальные. Иначе средства могут просто «зависнуть»: списаться со счета и никуда не прийти. Чтобы такого не происходило, и используют транзакции.
Какие есть подвиды SQL
Разные СУБД отличаются друг от друга. Поэтому и у SQL существует несколько диалектов, каждый из которых предназначен для той или иной системы. Например:
- T-SQL для работы с СУБД Microsoft SQL Server;
- PL/SQL для СУБД Oracle;
- MySQL для работы с одноименной системой;
- PL/pgSQL для PostgreSQL.
Базовый синтаксис у диалектов одинаковый. Но они отличаются друг от друга расширениями, дополнительными возможностями и особенностями написания запросов. Они несовместимы друг с другом: нельзя обращаться к одной и той же СУБД то на T-SQL, то на MySQL.
Обычно при разработке сайта выбирают, с какой СУБД будет работать его база данных. А от выбранной СУБД зависит и диалект SQL. Скажем, в популярной CMS WordPress по умолчанию используется MySQL, но при необходимости можно выбрать и другую систему.
Чем можно заменить SQL
Без SQL практически невозможно обойтись, когда речь идет о работе с реляционными базами данных — такими, где информация представлена в виде связанных таблиц. Это классический подход к хранению данных, который до сих пор использует большинство сайтов и программ.
![Схема реляционной базы данных для чека](https://www.unisender.com/wp-content/uploads/2024/06/4.jpeg)
Визуально связанные таблицы можно представить примерно так. В них есть множество полей, причем некоторые поля могут принадлежать одновременно нескольким таблицам. Скажем, код продавца есть и в таблице с информацией о чеке, и в таблице со сведениями о продавце. Источник
Кроме реляционных баз данных, существуют нереляционные: они иначе структурируют и хранят информацию. Для работы с ними SQL не нужен. Запросы к ним пишут на языках программирования. А для некоторых нереляционных баз существуют свои языки запросов.
Реляционные базы | Нереляционные базы | |
Представление информации | Связанные таблицы с жесткой структурой | JSON-документы, пары «ключ-значение» и другие форматы |
Управление | SQL | Языки программирования, собственные языки запросов |
Распространение | Используются в большинстве программ и сайтов — технология считается фактически стандартом | Применяются там, где скорость важнее структурированности — в стартапах, молодых проектах, распределенных системах |
Масштабируемость | Только вертикальная — увеличение мощностей | Вертикальная и горизонтальная — отдельные части системы распределяют по разным серверам |
Безопасность | Данные сложнее потерять благодаря жесткой структуре | Чтобы защитить данные, их дублируют. Есть преимущества при защите от хакерских атак |
Главные преимущества | Структурированность и возможность делать сложные запросы | Гибкость и возможность адаптировать базу под разные виды архитектуры |
Для каких данных подходит | Детализированные данные со сложной структурой | Большие массивы неструктурированной информации |
Преимущества и недостатки SQL для бизнеса
С помощью SQL работает большинство сайтов и программ в мире. Частично это связано с преимуществами, которые когда-то выделили язык из других разработок:
- универсальность — хотя между диалектами есть различия, основы SQL одинаковы для всех. Это позволяет уменьшить зависимость от СУБД и облегчить миграцию, если компания решит перейти на другую систему;
- согласованность — SQL работает с базой по строгим принципам, поэтому работа с данными становится безопаснее, уменьшается риск потерять важную информацию;
- работа с запросами — с помощью SQL можно создавать запросы любой сложности, например искать данные по совокупности нескольких мелких условий;
- стабильность — технология существует давно, она привычна и понятна, а специалистов, которые в ней разбираются, легко найти.
Главный недостаток технологии — SQL можно использовать только с реляционными базами данных, а их структура подходит не для всех проектов. Проект с реляционной базой сложнее расширять и горизонтально масштабировать. То есть, если архитектура программы состоит из множества компонентов на разных серверах, возможно, реляционные базы и SQL будут не так эффективно работать, как NoSQL-решения.