Программирование

SQL

Что такое SQL?

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

SQL — не язык программирования общего назначения, как Python или JavaScript. Его дело не строить окно программы, а говорить с сохранёнными данными. Сайт или приложение часто держат данные в базе и обращаются к ним через SQL.

Системы вроде PostgreSQL, MySQL, SQLite и SQL Server принимают SQL. Основные команды похожи, но у каждой системы могут быть небольшие отличия. Запрос, который работает в одной системе, в другой может быть записан не теми же буквами.

Для чего используется SQL?

SQL используют там, где хранятся данные:

  • Выбрать нужные строки
  • Добавить новую запись
  • Изменить существующую запись
  • Удалить запись, которая больше не нужна
  • Считать и группировать по условию
  • Соединить подходящие строки из нескольких таблиц

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

Что можно делать с SQL?

С помощью SQL можно делать основную работу с таблицей:

  • Читать все столбцы или только некоторые
  • Находить строки, которые подходят под условие
  • Записывать новую строку
  • Менять значение столбца
  • Удалять выбранную строку

Простой пример

SELECT name
FROM books
WHERE year = 2026;

Этот запрос выбирает из таблицы books только имена за 2026 год. Таблица и столбцы должны уже существовать.

Сложно ли изучать SQL?

Прочитать первый запрос SELECT нетрудно. Труднее становится с условиями, несколькими таблицами и неверной командой удаления. DELETE без WHERE может удалить все строки таблицы.

В начале полезен такой порядок:

  1. Что такое таблица, строка и столбец
  2. SELECT и FROM
  3. Условие через WHERE
  4. Новая строка через INSERT
  5. Изменение через UPDATE
  6. Пробовать DELETE на строке, которую вы сначала выбрали
  7. Самому менять тот же запрос на маленькой таблице

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

Преимущества и недостатки

Преимущества

  • Выбирает нужную строку, не обходя всю таблицу вручную
  • Основные команды похожи в нескольких системах баз данных
  • Условие, порядок и подсчёт можно записать в одном запросе
  • Коду приложения не нужно хранить все данные внутри себя
  • Для учёбы есть бесплатные системы баз данных

Недостатки

  • Не пишет страницу, кнопку или игровую логику
  • Запись не одинакова во всех системах
  • Обновление или удаление без условия может изменить много строк
  • Вставлять текст, который ввёл пользователь, прямо в запрос небезопасно

Синтаксис и основные понятия

Запрос обычно начинается с команды, которая говорит, что сделать. SELECT читает, INSERT добавляет, UPDATE меняет, DELETE удаляет. Имя таблицы пишут после FROM или INTO.

Чтение

SELECT name, year
FROM books
WHERE year >= 2020;

Добавление

INSERT INTO books (name, year)
VALUES ('Пример книги', 2026);

Изменение

UPDATE books
SET year = 2025
WHERE name = 'Пример книги';

Часть WHERE говорит, каких строк касается команда. Если убрать её из UPDATE или DELETE, может измениться не одна подходящая строка, а остальные строки таблицы.

Примеры кода

Строки под одно условие

SELECT title
FROM notes
WHERE lang = 'ru';

Подсчёт

SELECT COUNT(*)
FROM notes
WHERE lang = 'ru';

Удалить только выбранную строку

DELETE FROM notes
WHERE id = 15;

Рабочие примеры

Короткие запросы выше читают одно. Эти четыре строят маленькую таблицу и потом её используют. Запусти их по порядку на пустой базе. Хватит SQLite. Первый делает таблицу. Второй пишет две строки. Третий оставляет одну. Четвёртый меняет число.

Сделать таблицу

CREATE TABLE делает пустую таблицу students. id — целое число и первичный ключ, поэтому две строки не делят один id. name — текст и NOT NULL, строка без имени не принимается. score — целое число и может быть пустым. Эта строка не добавляет Aysel и Murad. Она только строит столбцы.

CREATE TABLE students (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  score INTEGER
);

После этого таблица есть, и в ней ноль строк. Запусти второй раз — база скажет, что таблица уже есть.

Добавить двух учеников

INSERT пишет строки. Имена в скобках — это столбцы. Значения идут в том же порядке: id, name, score. У Aysel 85. У Murad 40. Текст стоит в кавычках. Число без кавычек. Если вставить id 1 ещё раз, первичный ключ остановит вторую копию.

INSERT INTO students (id, name, score) VALUES
  (1, 'Aysel', 85),
  (2, 'Murad', 40);

В таблице теперь две строки. Ничего не печатается, пока не спросишь через SELECT.

Оставить только проходной балл

SELECT выбирает столбцы. WHERE выбрасывает строку, которая не проходит проверку. 85 остаётся, 40 нет, потому что 40 меньше 50. ORDER BY score DESC ставит больший балл первым. DESC значит по убыванию. Без WHERE увидишь обоих. Без ORDER BY база может вернуть их в любом порядке.

SELECT name, score
FROM students
WHERE score >= 50
ORDER BY score DESC;

Возвращается одна строка: Aysel, 85. Murad всё ещё в таблице. Этот запрос только спрятал его.

Изменить один балл

UPDATE пишет новое значение в столбец, который уже есть. SET говорит, что новый балл 70. WHERE говорит, что меняется только строка с именем Murad. SELECT под ним читает таблицу снова, и видны обе строки. Забудешь WHERE — балл каждого ученика станет 70. Это обычная ошибка.

UPDATE students
SET score = 70
WHERE name = 'Murad';

SELECT name, score
FROM students;

Murad теперь 70. Aysel остаётся 85. Старые 40 пропали, потому что UPDATE ставит на их место новое.

Часто задаваемые вопросы

Что такое SQL?

SQL — язык запросов, которым читают и меняют данные в реляционной базе.

SQL — это язык программирования?

Это язык запросов для данных. Им не пишут всё приложение так, как пишут на Python.

SQL бесплатный?

Сам язык можно изучать бесплатно. Системы вроде PostgreSQL и SQLite тоже можно поставить бесплатно. У некоторых серверных продуктов свои условия.

SQL и MySQL — это одно и то же?

Нет. SQL — это язык. MySQL — одна из систем баз данных, которая этот язык принимает.

Excel и SQL — это одно и то же?

Нет. Таблица — похожая идея, но SQL работает запросом и предназначен для строк, которые лежат в базе данных.

Может ли один неверный запрос удалить данные?

Да. DELETE или UPDATE без WHERE может затронуть больше строк, чем вы ожидали. Сначала проверьте это на маленькой таблице.

Можно ли вставлять текст пользователя прямо в запрос?

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

Инструмент этой темы