SQL – Основы выборки данных
Базовый синтаксис SQL запроса
Для построения всевозможных запросов к базе данных используется оператор SELECT. Он позволяет выполнять сложные запросы и обработку данных.
Общая структура запроса
SELECT [DISTINCT | ALL] – поля_таблиц
FROM – список_таблиц
[WHERE -условия_на_ограничение_строк]
[GROUP BY – условия_группировки]
[HAVING – условия_на_ограничения_после_группировки]
[ORDER BY – порядок_сортировки]
[LIMIT – ограничение_количество_записей]
Параметры оператора
- DISTINCT используется для исключения повторяющихся строк из результата;
- ALL – используется для получения всех результатов, в том числе и повторений;
- FROM – перечисляют используемые в запросе таблицы;
- WHERE – условный оператор, который используется для ограничения строк по какому-либо условию;
- GROUP BY – используется для группировки строк;
- HAVING – применяется после группировки строк для фильтрации по значениям агрегатных функций;
- ORDER BY – используется для группировки. У него есть два параметра:
- ASC (по умолчанию) используется для сортировки по возрастанию;
- DESC – по убыванию;
- LIMIT – используется для ограничения количества строк для вывода;
Примеры использования
1. Вы можете выводить любые строки и числа вместо столбцов:
SELECT “Hello world”, 1;
2. Для того, чтобы вывести все столбцы из таблицы, вы можете использовать символ “*”:
SELECT * FROM tableName;
3. Вы можете вывести любой столбец, определенный в таблице:
SELECT columnName FROM tableName;
4. Также можно вывести несколько столбцов, просто перечислив их названия через запятую:
SELECT columnName1, columnName2 FROM tableName;
5. Иногда необходимо вывести только уникальные значения, для этого мы используем DISTINCT:
SELECT DISTINCT columnName FROM tableName;
ЗАДАЧИ:
- Вывести поле name из таблицы Passenger;
- Вывести поля member_id, member_name и status из таблицы FamilyMembers;
- Вывести все столбцы из таблицы Payments;
- Вывести только уникальные имена пассажиров;
Условный оператор WHERE
Очень часто необходимо делать выборку по определенному условию. Для этого существует условный оператор WHERE, после которого мы указываем наше условие. Если запись удовлетворяет наше условие, то запись попадает в результат, если нет – отбрасывается.
Общая структура запроса
SELECT – поля_таблиц
FROM – список_таблиц
WHERE -условия_на_ограничение_строк
Операторы сравнения
| Оператор | Описание |
| = | Оператор равенства |
| <=> | Оператор эквивалентности |
| <> или != | Оператор неравенства |
| < | Оператор меньше |
| <= | Оператор меньше или равно |
| > | Оператор больше |
| >= | Оператор больше или равно |
Специальные операторы
- IS [NOT] NULL – позволяет узнать равно ли проверяемое значение NULL
SELECT * FROM tableName
WHERE columnName IS NOT NULL
- [NOT] BETWEEN min AND max – позволяет узнать расположено ли проверяемое значение столбца в интервале между min и max
SELECT * FROM tableName
WHERE columnName BETWEEN value AND value
- [NOT] IN – позволяет узнать входит ли проверяемое значение столбца в список определенных значений
SELECT * FROM tableName
WHERE columnName IN (‘columnValue1’, ‘columnValue2’)
- [NOT] LIKE (шаблон) – позволяет узнать соответствует строка определенному шаблону
SELECT * FROM tableName
WHERE columnName LIKE ‘% sample’
Трафаретные символы
В шаблоне мы можем использовать два трафаретных символа:
- символ подчеркивания (_), который можно применять вместо любого единичного символа в проверяемом значении
- символ процента (%) заменяет последовательность любых символов в проверяемом значении
| Шаблон | Описание |
| never% | Сопоставляется любым строкам, начинающимся на “never” |
| %ing | Сопоставляется любым строкам, заканчивающимся на “ing” |
| _ing | Сопоставляется строкам, имеющим длину 4 символа, при этом 3 последних обязательно должно быть “ing” (“sing”, “wing”) |
Логические операторы
Необходимы для связывания нескольких условий ограничения строк:
- NOT (меняет значение специального оператора на противоположный)
- OR (общее значение истинно, если хотя бы одно из них истинно)
- AND (общее значение истинно, если они оба истины)
- XOR (общее значение выражения истинно, если один и только один аргумент является истинным)
SELECT * FROM tableName
WHERE columnName1 = ‘value’ AND NOT columnName1 = ‘value’
ЗАДАЧИ:
- Вывести идентификаторы товаров (поле good) из таблицы Payments, стоимость которых больше 2000 единиц;
- Вывести имена членов семьи из таблицы FamilyMembers, чей статус равен “father”;
- Вывести имя (member_name) и дату рождения (birthday) членов семьи из таблицы FamilyMembers, чей статус равен “father” или “mother” ;
- Необходимо получить все комнаты, в которых есть как кухня ( has_kitchen), так и интернет (has_internet). Написать запрос, удовлетворяющий вышеописанному условию, который выводит все поля из таблицы Rooms.Наличие обозначается 1 или true, а отсутствие 0 или false.
- Вывести резервации комнат (room_id, start_date, end_date) из таблицы Reservations, у которых итоговая стоимость аренды (total) находится в промежутке от 500 до 1200 включительно.
- Выведите всех членов семьи с фамилией “Quincey”.
Сортировка, оператор ORDER BY
При выполнении SELECT запроса, строки по умолчанию возвращаются в неопределенном порядке. Для упорядочивания записей используется конструкция ORDER BY.
Общая структура запроса
SELECT поля_таблиц
FROM список_таблиц
ORDER BY столбец_1 [ASC | DESC][, столбец_n [ASC | DESC]]
Для сортировки результатов по двум или более столбцам их следует указывать через запятую.
SELECT поля_таблиц
FROM список_таблиц
ORDER BY столбец_1 [ASC | DESC], столбец_2 [ASC | DESC]
Правило сортировки применяется только к одному столбцу, за которым оно следует!
ORDER BY столбец_1, столбец_2 DESC != ORDER BY столбец_1 DESC, столбец_2 DESC
Примеры использования
- Вывести название авиакомпаний в алфавитном порядке:
SELECT name
FROM Company
ORDER BY name
- Вывести всю информацию о полетах, отсортированную по времени вылета самолета в порядке возрастания и по времени прилета в аэропорт в порядке убывания:
SELECT *
FROM Trip
ORDER BY time_out, time_in DESC
- Вывести все данные о покупках, совершенных Headley Quincey, отсортировав их в порядке убывания стоимости товаров:
1.Сначала нам нужно узнать id Headley Quincey:
SELECT member_id
FROM FamilyMembers
WHERE member_name = ‘Headley Quincey’;
2 Выведем все данные о покупках, совершенные Headley Quincey:
SELECT *
FROM Payments
WHERE family_member = (
SELECT member_id
FROM FamilyMembers
WHERE member_name = ‘Headley Quincey’
);
3 Отсортируем получившиеся данные в порядке убывания стоимости товара:
SELECT *
FROM Payments
WHERE family_member = (
SELECT member_id
FROM FamilyMembers
WHERE member_name = ‘Headley Quincey’
);
ORDER BY unit_price DESC;
ЗАДАЧИ:
- Для каждого отдельного платежа вывести идентификатор товара и сумму, потраченную на него, в отсортированном по убыванию этой суммы виде. Список платежей находится в таблице Payments. Для вывода суммы используйте псевдоним sum.
- Выведите список членов семьи с фамилией Quincey, в отсортированном по возрастанию столбцам status и member_name виде.