Основы SQL для начинающих: как общаться с базами данных на понятном языке

Это вводное руководство превращает сложные запросы в простые инструкции на примере обычного магазина. Ученики освоят базовый синтаксис SQL и научатся извлекать нужную информацию из таблиц без специальной подготовки.

1. Что такое база данных и зачем нам нужен SQL: аналогия с супермаркетом

Что такое база данных и зачем нам нужен SQL: аналогия с супермаркетом

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

Анатомия цифрового хранилища

Чтобы хаос превратился в магазин, нам нужна система. В мире IT такой системой является база данных. Если продолжать аналогию, то база данных — это само здание супермаркета со всеми его полками, складами и холодильниками. Но база данных не существует сама по себе как пассивный склад. Ей нужен «управляющий» — программа, которая следит за порядком, расставляет товары по местам и выдает их по запросу покупателя. Такую программу называют СУБД (Система управления базами данных).

Когда вы открываете приложение банка, ленту социальной сети или сайт с прогнозом погоды, вы не видите саму базу данных. Вы взаимодействуете с интерфейсом, который отправляет команды СУБД. Популярные СУБД, такие как PostgreSQL, MySQL или Microsoft SQL Server, — это те самые невидимые менеджеры, которые обрабатывают миллионы запросов в секунду.

Однако менеджеру нужно как-то объяснить, что именно мы хотим найти. Мы не можем просто крикнуть в пустоту: «Эй, дай мне те синие кроссовки 42-го размера, которые стоят дешевле пяти тысяч рублей!». Точнее, крикнуть можно, но программа нас не поймет. Для этого был создан SQL (Structured Query Language) — структурированный язык запросов. Это универсальный язык посредник, на котором человек (или другая программа) дает указания базе данных.

Таблицы: фундамент порядка

Вся информация в реляционных (наиболее распространенных) базах данных хранится в таблицах. Таблица — это идеальный стеллаж. У каждого стеллажа есть свое название, например, «Товары», «Клиенты» или «Чеки».

Таблица состоит из двух ключевых элементов:

  • Столбцы (Поля) — они определяют, какого типа информация хранится в таблице. В таблице «Товары» столбцами могут быть: Название, Категория, Цена, Количество_на_складе. Это структура нашего стеллажа.
  • Строки (Записи) — это конкретные экземпляры данных. Каждая строка — это отдельный товар. Одна строка содержит информацию об одном конкретном литре молока, другая — об одной конкретной буханке хлеба.
  • Важно понимать разницу: столбцы создаются один раз при проектировании базы, а строки добавляются, удаляются и изменяются постоянно. Если мы добавим новый столбец «Срок годности», это изменит структуру всей таблицы. Если мы добавим новую строку с информацией о йогурте, мы просто добавим данные в существующую структуру.

    Первый контакт: Оператор SELECT

    Самая частая операция, которую мы совершаем в магазине — это поиск и осмотр товара. В SQL за это отвечает оператор SELECT (выбрать). Это база любого запроса. С его помощью мы говорим базе данных: «Покажи мне содержимое вот этих столбцов».

    Если мы хотим увидеть абсолютно всё, что есть в таблице «Товары», мы используем символ «звездочка» (*), который в мире SQL означает «все столбцы».

    Этот запрос заставит СУБД выгрузить нам гигантский список всех товаров со всеми их характеристиками. Но в реальности нам редко нужно всё сразу. Представьте, что вы составляете список покупок и вам нужны только названия товаров и их цены. Зачем вам видеть артикулы, страну производителя и высоту упаковки? В SQL мы просто перечисляем нужные столбцы через запятую:

    Фильтрация реальности: Оператор WHERE

    Вернемся в наш супермаркет. Вы стоите перед огромным стеллажом с напитками. Но вам не нужны все напитки — вам нужна только минеральная вода без газа. Вы начинаете фильтровать товары глазами, отсекая лишнее. В SQL эту работу берет на себя оператор WHERE (где).

    WHERE — это набор условий, которым должна соответствовать строка, чтобы попасть в итоговый результат. Это мощнейший инструмент, превращающий гору данных в точный ответ.

    Предположим, мы хотим найти все товары в категории «Молочные продукты». Запрос будет выглядеть так:

    Обратите внимание на кавычки вокруг слова 'Dairy'. В SQL текстовые значения (строки) всегда пишутся в одинарных кавычках. Числа же пишутся без кавычек.

    Работа с числами и сравнениями

    SQL — отличный математик. Он умеет сравнивать значения, используя стандартные операторы, знакомые нам из школьной программы.

    * = — равно * != или <> — не равно * < — меньше * > — больше * <= — меньше или равно * >= — больше или равно

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

    А если нам нужны товары, которые стоят ровно 100 рублей или больше? Мы используем оператор >=:

    Сложные условия: Логические связки AND и OR

    В жизни наши запросы редко бывают простыми. Мы не просто ищем «хлеб», мы ищем «свежий хлеб, который стоит меньше 50 рублей и при этом не содержит сахара». Чтобы объединить несколько условий в один SQL-запрос, используются логические операторы AND (И) и OR (ИЛИ).

    Оператор AND (Строгий фильтр)

    AND требует, чтобы выполнялись все условия одновременно. Это как если бы вы сказали другу: «Купи мне сок, если он апельсиновый И если он стоит меньше 150 рублей». Если сок апельсиновый, но стоит 200 рублей — он вам не подходит. Если он стоит 100 рублей, но он яблочный — он тоже не подходит.

    Оператор OR (Гибкий фильтр)

    OR дает базе данных выбор. Достаточно, чтобы выполнялось хотя бы одно из условий. Это как просьба: «Купи мне или колу, или пепси». Если в магазине есть только кола — вы довольны. Если только пепси — тоже. Если есть и то, и другое — отлично.

    Приоритеты и скобки

    Когда условий становится много, может возникнуть путаница. Представьте запрос: «Я хочу купить молоко или сок, и чтобы цена была меньше 100 рублей». Как это поймет база данных?

  • (Молоко ИЛИ сок) И цена < 100. (Любой из этих напитков дешевле 100).
  • Молоко ИЛИ (сок И цена < 100). (Любое молоко по любой цене ИЛИ только дешевый сок).
  • Чтобы избежать неоднозначности, в SQL (как и в математике) используются круглые скобки. Они определяют порядок выполнения условий.

    Поиск по шаблону: Оператор LIKE

    Иногда мы не знаем точного названия товара. Например, мы помним, что в названии шоколадки было слово «Alpen». Или мы хотим найти все товары, названия которых начинаются на букву «А». В таких случаях обычное равно (=) не сработает, потому что оно ищет полное совпадение. На помощь приходит оператор LIKE.

    Вместе с LIKE используются специальные символы-подстановки (wildcards). Самый популярный из них — знак процента %. Он означает «любое количество любых символов» (включая ноль символов).

  • 'А%' — начинается на «А». (Арбуз, Ананас, Абрикос).
  • '%о%' — содержит букву «о» в любом месте. (Молоко, Хлеб, Торт).
  • '%ко' — заканчивается на «ко». (Молоко, Древко).
  • Попробуем найти все виды шоколада в нашем магазине:

    Если мы заменим % на нижнее подчеркивание _, это будет означать ровно один любой символ. Например, запрос LIKE 'Т_рт' найдет «Торт» и «Тирт» (если бы такое слово было), но не найдет «Йогурт».

    Работа с отсутствующими данными: NULL

    В базах данных часто случается ситуация, когда информация неизвестна. Например, в таблицу занесли новый товар, но еще не успели определить его категорию или забыли указать срок годности. В SQL такое «пустое место» называется NULL.

    Важно понимать: NULL — это не ноль и не пустая строка. Ноль — это число. Пустая строка — это текст, просто в нем нет букв. NULL — это состояние «данных нет».

    Поскольку NULL — это не значение, мы не можем сравнивать его через =. Мы не можем спросить «Цена = NULL», потому что нельзя быть равным пустоте. Для этого используются специальные конструкции IS NULL (является пустым) и IS NOT NULL (не является пустым).

    Сортировка результатов: ORDER BY

    Представьте, что вы нашли все нужные товары, но они выведены в случайном порядке. Чтобы ими было удобно пользоваться, их нужно отсортировать, например, от самых дешевых к самым дорогим. В SQL за это отвечает оператор ORDER BY.

    По умолчанию SQL сортирует данные по возрастанию (от меньшего к большему, от А до Я).

    Если мы хотим изменить порядок на обратный (от дорогих к дешевым), нужно добавить слово DESC (от английского descending — убывающий).

    Сортировать можно и по тексту. ORDER BY Name расставит товары в алфавитном порядке. А если вы хотите расставить их по алфавиту, но товары с одинаковым названием отсортировать по цене? SQL позволяет указывать несколько столбцов для сортировки:

    Ограничение выборки: LIMIT

    Иногда база данных настолько велика, что запрос может вернуть миллионы строк. Если вам нужны только «топ-5 самых дешевых товаров», нет смысла загружать весь список. Для ограничения количества строк используется оператор LIMIT.

    В некоторых СУБД (например, в MS SQL Server) вместо LIMIT в конце используется слово TOP в начале запроса (SELECT TOP 5 Name...), но логика остается прежней.

    Уникальные значения: DISTINCT

    Представьте, что вы хотите узнать, какие вообще категории товаров представлены в вашем магазине. Если вы просто напишете SELECT Category FROM Products, вы получите список из тысяч строк, где слово «Milk» повторится столько раз, сколько видов молока у вас на полках.

    Чтобы убрать дубликаты и оставить только уникальные значения, используется ключевое слово DISTINCT (отчетливый, отдельный).

    Математика «на лету»: Вычисляемые столбцы

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

    Допустим, в таблице есть цена за единицу товара (Price) и количество товара на складе (StockQuantity). Нам нужно узнать общую стоимость запасов каждого товара. Мы можем просто перемножить эти столбцы.

    Результат будет выглядеть немного некрасиво: заголовок второго столбца будет содержать формулу Price * StockQuantity. Чтобы дать столбцу понятное имя, используется оператор AS (псевдоним).

    Вы можете использовать любые арифметические знаки: +, -, *, /. Например, можно рассчитать цену со скидкой 10%:

    Почему SQL — это не Excel?

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

  • Объем данных. Excel начинает «тормозить», когда в нем несколько сотен тысяч строк. Базы данных SQL легко оперируют миллиардами записей.
  • Типизация. В Excel в одну ячейку можно записать число, в другую под ней — текст, а в третью — дату. В SQL столбец Price имеет строгий тип «Число». Вы физически не сможете записать туда слово «Дорого», СУБД просто выдаст ошибку. Это гарантирует порядок в данных.
  • Многопользовательский доступ. С одной базой данных могут одновременно работать тысячи людей и программ. СУБД следит за тем, чтобы они не мешали друг другу. Если один человек меняет цену товара, а другой в ту же секунду его покупает, СУБД обеспечит корректность этой операции.
  • Связи. Это самое главное. В реляционных базах данных таблицы связаны между собой. Например, в таблице «Продажи» не пишется имя клиента. Там пишется только его ID (номер). А вся информация о клиенте (имя, адрес, телефон) хранится в отдельной таблице «Клиенты». Это позволяет не дублировать информацию и экономить место.
  • Как SQL понимает нас (Порядок выполнения)

    Хотя мы пишем запрос в определенном порядке (SELECT -> FROM -> WHERE), компьютер выполняет его иначе. Понимание этого порядка помогает писать запросы без ошибок.

    Логика СУБД выглядит так:

  • FROM: Сначала я иду к нужному стеллажу (выбираю таблицу).
  • WHERE: Затем я отфильтровываю ненужные товары (применяю условия).
  • SELECT: Из оставшихся товаров я выбираю только те характеристики, которые просил пользователь (столбцы).
  • ORDER BY: В самом конце я расставляю результат в нужном порядке.
  • Именно поэтому вы не можете использовать псевдоним (AS), созданный в SELECT, внутри блока WHERE. Когда база данных фильтрует строки (WHERE), она еще «не знает», как вы переименовали столбцы в блоке SELECT.

    Практический пример: Собираем всё вместе

    Давайте представим реальную задачу. Директор магазина просит вас: «Найди мне все напитки и сладости, которые стоят от 50 до 200 рублей. Отсортируй их по названию, и покажи только первые 10 штук, чтобы я мог распечатать это на маленьком листке».

    Разложим это на части SQL-запроса: «Найди мне» -> SELECT (или конкретные столбцы). * «Напитки и сладости» -> WHERE Category = 'Beverages' OR Category = 'Sweets'. * «От 50 до 200 рублей» -> AND Price >= 50 AND Price <= 200. * «Отсортируй по названию» -> ORDER BY Name. * «Только первые 10» -> LIMIT 10.

    Итоговый запрос:

    Обратите внимание на скобки. Мы сгруппировали категории и сгруппировали диапазон цен. Это гарантирует, что условие AND свяжет именно эти две группы.

    Путь к мастерству

    SQL — это язык, который учится «на кончиках пальцев». Читать о нем полезно, но по-настоящему вы поймете его, когда напишете свой сотый или тысячный запрос. Главное преимущество SQL в том, что он декларативен. В обычном программировании вам нужно описывать как сделать задачу (сначала открой файл, потом создай цикл, потом проверь условие...). В SQL вы описываете только что вы хотите получить («Дай мне имена из таблицы Х, где цена больше Y»).

    Этот язык не меняется десятилетиями. Команды, которые вы выучили сегодня, будут работать и через 10, и через 20 лет. Это один из самых стабильных и полезных навыков в современном мире данных. Будь вы маркетологом, аналитиком, разработчиком или владельцем бизнеса — умение самостоятельно «спросить» базу данных о состоянии дел делает вас на голову выше тех, кто ждет готовых отчетов от ИТ-отдела.

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