SQL – Основы выборки данных

Базовый синтаксис SQL запроса

Для построения всевозможных запросов к базе данных используется оператор SELECT. Он позволяет выполнять сложные запросы и обработку данных.

Общая структура запроса

SELECT [DISTINCT | ALL] – поля_таблиц

FROM – список_таблиц

[WHERE -условия_на_ограничение_строк]

[GROUP BY – условия_группировки]

[HAVING – условия_на_ограничения_после_группировки]

[ORDER BY – порядок_сортировки]

[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;

ЗАДАЧИ:

  1. Вывести поле name из таблицы Passenger;
  2. Вывести поля member_id, member_name и status из таблицы FamilyMembers;
  3. Вывести все столбцы из таблицы Payments;
  4. Вывести только уникальные имена пассажиров;

Условный оператор 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”)

Логические операторы

Необходимы для связывания нескольких условий ограничения строк:

SELECT * FROM tableName
WHERE columnName1 = ‘value’ AND NOT columnName1 = ‘value’

ЗАДАЧИ:

  1. Вывести идентификаторы товаров (поле good) из таблицы Payments, стоимость которых больше 2000 единиц;
  2. Вывести имена членов семьи из таблицы FamilyMembers, чей статус равен “father”;
  3. Вывести имя (member_name) и дату рождения (birthday) членов семьи из таблицы FamilyMembers, чей статус равен “father” или “mother” ;
  4. Необходимо получить все комнаты, в которых есть как кухня ( has_kitchen), так и интернет (has_internet). Написать запрос, удовлетворяющий вышеописанному условию, который выводит все поля из таблицы Rooms.Наличие обозначается 1 или true, а отсутствие 0 или false.
  5. Вывести резервации комнат (room_id, start_date, end_date) из таблицы Reservations, у которых итоговая стоимость аренды (total) находится в промежутке от 500 до 1200 включительно.
  6. Выведите всех членов семьи с фамилией “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 *
FROM Trip
ORDER BY time_out, time_in DESC

     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;

ЗАДАЧИ:

  1. Для каждого отдельного платежа вывести идентификатор товара и сумму, потраченную на него, в отсортированном по убыванию этой суммы виде. Список платежей находится в таблице Payments. Для вывода суммы используйте псевдоним sum.
  2. Выведите список членов семьи с фамилией Quincey, в отсортированном по возрастанию столбцам status и member_name виде.

Rudchenko Yuliya

Автор: Rudchenko Yuliya