SQL (Structured Query Language) — это язык для работы с базами данных. Позволяет выбирать данные и строить сложные отчеты. Сегодня SQL стал универсальным языком данных.
Порядок выполнения операций в SQL
Пример данных
Таблица «страна»
id
name
population
area
1
Россия
147 000 000
17 100 000
2
Франция
67 000 000
551 695
…
…
…
…
Таблица «город»
id
name
country_id
population
rating
1
Москва
1
13 274 285
5
2
Париж
2
2 102 650
3
…
…
…
…
Выборка данных из таблицы
-- получить все атрибуты таблицы "страна"
SELECT *
FROM country;
-- получить необходимые атрибуты таблицы "город"
SELECT id, name
FROM city;
-- вернуть города отсортированные по возрастающему рейтингу
SELECT name
FROM city
ORDER BY rating [ASC];
-- вернуть города отсортированные по убывающему рейтингу
SELECT name
FROM city
ORDER BY rating DESC;
Алиасы (псевдонимы)
-- указать псевдоним для атрибута
SELECT name AS city_name
FROM city;
-- указать псевдоним для таблиц
SELECT co.name,
ci.name
FROM city AS ci JOIN country AS co ON ci.country_id = co.id;
Фильтрация результатов
-- вернуть города с рейтингом больше 3
SELECT name
FROM city
WHERE rating > 3;
-- Получить города, которые не являются ни Берлином, ни Мадридом
SELECT name
FROM city
WHERE name != 'Berlin' AND
name != 'Madrid';
-- Получить города, которые начинаются на 'М' или заканчиваются на 'а'
SELECT name
FROM city
WHERE name LIKE 'М%' OR
name LIKE '%а';
-- Города, которые начинаются с любой буквы, за которой следует 'осква'
SELECT name
FROM city
WHERE name LIKE '_осква';
-- Получить города с населением от 500000 и до 5000000 включительно
SELECT name
FROM city
WHERE population BETWEEN 500000 AND 5000000;
-- Получить города с сохраненным рейтингом
SELECT name
FROM city
WHERE rating IS NOT NULL;
-- Получить города с указанными ID ключами
SELECT name
FROM city
WHERE country_id IN (1, 4, 7, 8);
Запросы к нескольким таблицам
-- Соединение INNER JOIN возвращает соответствующие строки по ключу
SELECT city.id,
city.name,
city.country_id,
country.id,
country.name
FROM city [INNER] JOIN country ON city.country_id = country.id;
city.id
city.name
city.country_id
country.id
country.name
1
Москва
1
1
Россия
2
Париж
2
2
Франция
…
…
…
…
…
/* Соединение LEFT JOIN возвращает все строки из левой таблицы с
соответствующими строками из правой и NULL значениями если нет
соответствия между строками
*/
SELECT city.id,
city.name,
city.country_id,
country.id,
country.name
FROM city LEFT JOIN country ON city.country_id = country.id;
city.id
city.name
city.country_id
country.id
country.name
1
Москва
1
1
Россия
2
Париж
2
2
Франция
3
Варшава
4
NULL
NULL
/* Соединение RIGHT JOIN возвращает все строки из правой таблицы с
соответствующими строками из левой и NULL значениями если нет
соответствия между строками
*/
SELECT city.id,
city.name,
city.country_id,
country.id,
country.name
FROM city RIGHT JOIN country ON city.country_id = country.id;
city.id
city.name
city.country_id
country.id
country.name
1
Москва
1
1
Россия
2
Париж
2
2
Франция
NULL
NULL
NULL
3
Исландия
/* Соединение FULL JOIN возвращает все соответствующие строки из правой и левой таблици NULL значениями если нет соответствия между строками
*/
SELECT city.id,
city.name,
city.country_id,
country.id,
country.name
FROM city FULL JOIN country ON city.country_id = country.id;
city.id
city.name
city.country_id
country.id
country.name
1
Москва
1
1
Россия
2
Париж
2
2
Франция
3
Варшава
4
NULL
NULL
NULL
NULL
NULL
3
Исландия
/* Соединение CROSS JOIN возвращает всевозможные комбинации строк из
обоих таблиц
*/
SELECT city.id,
city.name,
city.country_id,
country.id,
country.name
FROM city CROSS JOIN country;
SELECT city.id,
city.name,
city.country_id,
country.id,
country.name
FROM city, country;
city.id
city.name
city.country_id
country.id
country.name
1
Москва
1
1
Россия
1
Москва
1
2
Франция
2
Париж
2
1
Россия
2
Париж
2
2
Франция
…
…
…
…
…
/* Соединение NATURAL JOIN возвращает все соответствующие строки по атрибутам с одинаковыми именами
*/
SELECT city.country_id,
city.id,
city.name,
country.name,
country.id
FROM city NATURAL JOIN country;