Перейти к основному содержимому

SQL - язык структурированных запросов

Разработчику Аналитику Тестировщику
Архитектору Инженеру

Play ITЗагрузка интерактивного демо…


Основы SQL

Что такое SQL?

SQL (Structured Query Language) – язык структурированных запросов для работы с реляционными (табличными) базами данных. Это не язык программирования, это декларативный язык – мы говорим "что нужно сделать", а СУБД сама решает, "как это сделать".


Возможности SQL

Какие возможности предоставляет SQL?

  • создавать, изменять и удалять таблицы, поля, ограничения;
  • организовать данные в понятную, согласованную и контролируемую структуру;
  • хранение информации с гарантией целостности: каждое значение соответствует своей структуре, типу и ограничениям;
  • добавлять, изменять, удалять и извлекать данные по заданным условиям;
  • выбирать данные на основе условий, связей между таблицами, агрегатных функций;
  • обеспечение связи "один-к-одному", "один-ко-многим", "многие-ко-многим";
  • выполнение операций в рамках транзакций: всё либо выполняется целиком, либо откатывается;
  • определять, кто может читать, писать, изменять или управлять данными;
  • вычисление сумм, средних, максимумов, группировок, подсчёт уникальных значений и другие статистические операции;
  • создавать виртуальные таблицы, которые представляют собой результат сложного запроса;
  • выполнять промежуточные вычисления внутри одного запроса или сессии.

Play ITЗагрузка интерактивного демо…

Практика с разбором

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

Теория по темам — SELECT, JOIN, GROUP BY.

Интересный факт

Изначально, для того чтобы люди могли запрашивать данные из баз на английском языке, вместо написания сложных программ, Дональд Чэмберлин и Рэймонд Бойс в 1970 году разработали SEQUEL (Structured English Query Language), но оказалось – SEQUEL уже был зарегистрирован торговой маркой авиакомпании, поэтому название сократили до SQL.


Как работает SQL?

Пример запроса:

SELECT name FROM users WHERE age > 25;

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

image.png

На примере выше есть две таблицы – Вопросы и Categories. В Вопросы есть CategoryId, которая связана с Id в таблице Categories. Так данные могут разделяться, организовывая структуру и связывая таблицы между собой.

Диаграмма таких связей называется Entity Relationship Diagram - ERD.

Таблица Categories

IdName
1Наука
2Literature

Таблица Вопросы

IdCategoryIdQuestion
11Что такое гравитация?
22Кто написал "Гамлета"?

Вот SQL как раз обеспечивает такую связь и это главное отличие реляционных БД - реляции (relations), что означает "связи".


Таблицы в SQL

Таблицы состоят из:

  1. Строк (records, не путать со строковым типом данных) – отдельные записи (к примеру, один пользователь = 1 строка).
  2. Столбцов (fields) – поля, это свойства записей (имя, возраст, email).
  3. Ключей – уникальных полей, которые связывают таблицы между собой (на примере выше это CategoryId и Id):
    • id для Вопросы, и id для Categories будут первичными ключами (Primary Key, PK), определяющий её связь с другими;
    • CategoryId для Вопросы будет внешним ключом (Foreign Key, FK), определяющий связь с определённой таблицей.

Таким образом, можно определить что есть какие-то виды ключей, так?


Ключи

Первичный ключ - это уникальный идентификатор для каждой строки (записи) в таблице. Он должен быть уникальным (никакие две строки не могут иметь одинаковое значение первичного ключа), не может быть пустым (NULL) и обязательно должен иметь значение.

В таблице может быть только один первичный ключ.

Внешний ключ - это поле (или набор полей) в одной таблице, которое ссылается на первичный ключ другой таблицы. Используется для установления связей между таблицами. Что-то вроде указателя, но в качестве "стрелки" использует идентификатор. Он может содержать повторяющиеся значения (к примеру, автор может иметь несколько книг, а значит, в таблице с книгами внешний ключ, указывающий на id автора будет совпадать). Он может быть NULL, если это разрешено, и обеспечивает целостность ссылок.

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

Первичный ключ — это минимальный суперключ (то есть суперключ без лишних атрибутов). К примеру, id уникален, а значит однозначно идентифицирует строку, и является суперключом.

Имя, например, может быть не уникальным, поэтому не является суперключом. А вот {id, Имя} будет уже уникальной комбинацией, а значит - суперключ. Но уникальность обеспечивается именно id, а "Имя" теперь избыточно. Это называется суперключ с избыточностью.

Поэтому можно сказать, что суперключом является любое описание, по которому мы точно найдём нужную запись.


Суперключ, кандидатный и первичный ключ — короткая схема для собеседования

Чтобы уверенно ответить на вопрос про суперключ, держите в голове три шага:

  1. Суперключ — любой набор столбцов, который однозначно находит строку.
  2. Кандидатный ключ — минимальный суперключ, где каждый столбец нужен для уникальности.
  3. Первичный ключ (PK) — один выбранный кандидатный ключ, который объявлен как основной.

Пример для таблицы users(id, email, passport_no, name):

  • {id} — кандидатный ключ;
  • {email} — кандидатный ключ;
  • {passport_no} — кандидатный ключ;
  • {id, name} — суперключ с избыточностью;
  • если выбрали id как PRIMARY KEY, то email и passport_no обычно оформляют как UNIQUE.
CREATE TABLE users (
id BIGINT PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
passport_no TEXT UNIQUE NOT NULL,
name TEXT NOT NULL
);

Такой ответ показывает понимание теории и практики проектирования схемы.


Поле

Поле — это один столбец в таблице, представляющий определённый атрибут (характеристику) сущности. Каждое поле имеет имя, тип данных и ограничения. Поле иногда называют атрибутом. Важно не путать со строкой (записью), которая представляет собой одну сущность.

Если приводить в пример Excel-таблицы, то:

  • Таблица - отдельный лист;
  • Поле - заголовое столбца;
  • Запись - одна строка в таблице.