Введение в язык SQL
SQL (Structured Query Language) — это язык запросов, используемый для работы с реляционными базами данных. Он позволяет создавать, изменять, извлекать и управлять данными в базах данных. Все операторы языка SQL можно разделить на две большие группы:
-
Операторы DDL (Data Definition Language) - язык определения данных. Позволяет создавать, изменять и удалять объекты БД, такие как таблицы, домены, хранимые представления и т.п.
-
Операторы DML (Data Manipulation Language) - язык манипулирования данными. Позволяет добавлять, модифицировать и удалять данные в объектах БД. Одним из самых сложных операторов DML является оператор выборки данных. С его помощью можно строить самые разнообразные запросы и производить вычисления.
Язык SQL является декларативным языком. С его помощью описывается результат, который необходимо получить, а процессор запросов и оптимизатор определяют оптимальный способ получить такой результат.
Для получения общего представления о языке и дальнейшего более глубокого его изучения, давайте рассмотрим простейшие примеры самых распространенных операторов.
Основные команды DDL
-
CREATE TABLE — создание новой таблицы.
CREATE TABLE table_name ( column1 datatype, column2 datatype, ... );Пример:
CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), age INT ); -
ALTER TABLE — изменение структуры таблицы (добавление, удаление или изменение столбцов).
ALTER TABLE table_name ADD column_name datatype;Пример:
ALTER TABLE users ADD email VARCHAR(100); -
DROP TABLE — удаление таблицы.
DROP TABLE table_name;Пример:
DROP TABLE users;
Пример базы данных
CREATE TABLE users (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50),
age INT
);
-- Мужские имена
INSERT INTO users (id, name, age) VALUES (1, 'Александр', 28);
INSERT INTO users (id, name, age) VALUES (2, 'Дмитрий', 34);
INSERT INTO users (id, name, age) VALUES (3, 'Иван', 22);
INSERT INTO users (id, name, age) VALUES (4, 'Сергей', 30);
-- Женские имена
INSERT INTO users (id, name, age) VALUES (5, 'Анна', 25);
INSERT INTO users (id, name, age) VALUES (6, 'Екатерина', 29);
INSERT INTO users (id, name, age) VALUES (7, 'Ольга', 31);
INSERT INTO users (id, name, age) VALUES (8, 'Мария', 19);
В результате выполнения этих команд, таблица users будет содержать следующие данные.
| id | name | age |
|---|---|---|
| 1 | Александр | 28 |
| 2 | Дмитрий | 34 |
| 3 | Иван | 22 |
| 4 | Сергей | 30 |
| 5 | Анна | 25 |
| 6 | Екатерина | 29 |
| 7 | Ольга | 31 |
| 8 | Мария | 19 |
Основные команды DML
-
SELECT — извлечение данных из таблицы.
SELECT column1, column2 FROM table_name;Пример:
SELECT name, age FROM users;вернет
name age Александр 28 Дмитрий 34 Иван 22 Сергей 30 Анна 25 Екатерина 29 Ольга 31 Мария 19 -
INSERT INTO — добавление новых данных в таблицу.
INSERT INTO table_name (column1, column2) VALUES (value1, value2);Пример:
INSERT INTO users (id, name, age) VALUES (9, 'Алиса', 25);id name age 1 Александр 28 2 Дмитрий 34 3 Иван 22 4 Сергей 30 5 Анна 25 6 Екатерина 29 7 Ольга 31 8 Мария 19 9 Алиса 25 -
UPDATE — обновление существующих данных.
UPDATE table_name SET column1 = value1 WHERE condition;Пример:
UPDATE users SET age = 26 WHERE name = 'Алиса';id name age 1 Александр 28 2 Дмитрий 34 3 Иван 22 4 Сергей 30 5 Анна 25 6 Екатерина 29 7 Ольга 31 8 Мария 19 9 Алиса 26 -
DELETE — удаление данных из таблицы.
DELETE FROM table_name WHERE condition;Пример:
DELETE FROM users WHERE name = 'Алиса';id name age 1 Александр 28 2 Дмитрий 34 3 Иван 22 4 Сергей 30 5 Анна 25 6 Екатерина 29 7 Ольга 31 8 Мария 19
Фильтрация данных
-
WHERE — фильтрация строк по условию.
SELECT * FROM users WHERE age > 25;id name age 1 Александр 28 2 Дмитрий 34 4 Сергей 30 6 Екатерина 29 7 Ольга 31 -
AND, OR, NOT — логические операторы для комбинирования условий.
SELECT * FROM users WHERE age > 20 AND name = 'Алиса';id name age 7 Ольга 31 -
LIKE — поиск по шаблону.
SELECT * FROM users WHERE name LIKE 'А%'; -- Начинается с "А"id name age 1 Александр 28 5 Анна 25 -
IN — проверка наличия значения в списке.
SELECT * FROM users WHERE age IN (20, 25, 30);id name age 4 Сергей 30 5 Анна 25 -
BETWEEN — выбор значений в диапазоне.
SELECT * FROM users WHERE age BETWEEN 20 AND 30;id name age 1 Александр 28 3 Иван 22 4 Сергей 30 5 Анна 25 6 Екатерина 29
Сортировка и группировка
-
ORDER BY — сортировка результатов.
SELECT * FROM users ORDER BY age DESC; -- По убываниюid name age 2 Дмитрий 34 7 Ольга 31 4 Сергей 30 6 Екатерина 29 1 Александр 28 9 Алиса 25 5 Анна 25 3 Иван 22 8 Мария 19 -
GROUP BY — группировка данных.
SELECT age, COUNT(*) FROM users GROUP BY age;Для таблицы
id name age 2 Дмитрий 34 7 Ольга 34 4 Сергей 29 6 Екатерина 29 1 Александр 29 9 Алиса 25 5 Анна 25 3 Иван 22 8 Мария 19 запрос вернет
age count 34 2 29 3 25 2 22 1 19 1 -
HAVING — фильтрация результатов группировки.
SELECT age, COUNT(*) FROM users GROUP BY age HAVING COUNT(*) > 1;Для таблицы
id name age 2 Дмитрий 34 7 Ольга 34 4 Сергей 29 6 Екатерина 29 1 Александр 29 9 Алиса 25 5 Анна 25 3 Иван 22 8 Мария 19 запрос вернет
age count 34 2 29 3 25 2
Агрегатные функции
-
COUNT() — подсчет строк.
SELECT COUNT(*) FROM users;Для таблицы
id name age 2 Дмитрий 34 7 Ольга 34 4 Сергей 29 6 Екатерина 29 1 Александр 29 9 Алиса 25 5 Анна 25 3 Иван 22 8 Мария 19 запрос вернет
count 9 -
SUM() — сумма значений.
SELECT SUM(age) FROM users;Для таблицы
id name age 2 Дмитрий 34 7 Ольга 34 4 Сергей 29 6 Екатерина 29 1 Александр 29 9 Алиса 25 5 Анна 25 3 Иван 22 8 Мария 19 запрос вернет
count 246 -
AVG() — среднее значение.
SELECT AVG(age) FROM users;Для таблицы
id name age 2 Дмитрий 34 7 Ольга 34 4 Сергей 29 6 Екатерина 29 1 Александр 29 9 Алиса 25 5 Анна 25 3 Иван 22 8 Мария 19 запрос вернет
count 27,33 -
MIN() и MAX() — минимальное и максимальное значение.
SELECT MIN(age), MAX(age) FROM users;Для таблицы
id name age 2 Дмитрий 34 7 Ольга 34 4 Сергей 29 6 Екатерина 29 1 Александр 29 9 Алиса 25 5 Анна 25 3 Иван 22 8 Мария 19 запрос вернет
min max 19 34
Контрольные вопросы
- Для чего предназначены операторы DDL?
- Для чего предназначены операторы DML?
- Назовите основные команды DDL и приведите примеры?
- Назовите основные команды DML и приведите примеры?
- Приведите примеры запросов для фильтрации данных?
- Приведите примеры агрегирующих операторов?