Шпаргалка по SQL. Часть #1

SQL (Structured Query Language) — это язык для работы с базами данных. Позволяет выбирать данные и строить сложные отчеты. Сегодня SQL стал универсальным языком данных.

Порядок выполнения операций в SQL


Пример данных

Таблица «страна»

idnamepopulationarea
1Россия147 000 00017 100 000
2Франция67 000 000551 695

Таблица «город»

idnamecountry_idpopulationrating
1Москва113 274 2855
2Париж22 102 6503

Выборка данных из таблицы

-- получить все атрибуты таблицы "страна" 
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.idcity.namecity.country_idcountry.idcountry.name
1Москва11Россия
2Париж22Франция
/* 
   Соединение 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.idcity.namecity.country_idcountry.idcountry.name
1Москва11Россия
2Париж22Франция
3Варшава4NULLNULL
/* 
   Соединение 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.idcity.namecity.country_idcountry.idcountry.name
1Москва11Россия
2Париж22Франция
NULLNULLNULL3Исландия
/* 
   Соединение 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.idcity.namecity.country_idcountry.idcountry.name
1Москва11Россия
2Париж22Франция
3Варшава4NULLNULL
NULLNULLNULL3Исландия
/* 
   Соединение 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.idcity.namecity.country_idcountry.idcountry.name
1Москва11Россия
1Москва12Франция
2Париж21Россия
2Париж22Франция
/* 
   Соединение NATURAL JOIN возвращает все соответствующие строки по 
   атрибутам с одинаковыми именами
*/
SELECT city.country_id,
       city.id, 
       city.name, 
       country.name,
       country.id
  FROM city NATURAL JOIN country;
city.country_idcity.idcity.namecountry.namecountry.id
66Сан МариноСан Марино6
77ВатиканВатикан7
1010МонакоМонако10