07/07/2022

Базовые запросы с использованием LIKE, BETWEEN, ORDER BY, ALIASES, IN, TOP-LIMIT, DISTINCT

Базовые запросы с использованием LIKE, BETWEEN, ORDER BY, ALIASES, IN, TOP-LIMIT, DISTINCT

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

Для того чтобы отобрать все данные из таблицы используется SQL запрос следующей структуры:

ключевое слово SELECT; символ « *» ; ключевое слово FROM; имя таблицы.

SELECT * FROM book;

Выборка отдельных столбцов

Для того чтобы отобрать данные из определенных столбцов таблицы используется SQL запрос следующей структуры:

ключевое слово SELECT ; список столбцов таблицы через запятую; ключевое слово FROM ; имя таблицы.

SELECT title, amount FROM book;

AS - Выборка новых столбцов и присвоение им новых имен

Для того чтобы отобрать данные из определенных столбцов таблицы и одновременно задать столбцам новые имена используется SQL запрос следующей структуры:

ключевое слово SELECT ; имя столбца; ключевое слово AS ; новое название столбца (можно русскими буквами), но это должно быть одно слово, если название состоит из двух слов – соединяйте их подчеркиванием, например, Количество_книг ; запятая; имя столбца; .... ключевое слово FROM ; имя таблицы.

Результатом является таблица, в которую включены все данные из указанных после SELECT столбцов исходной таблицы. Каждому столбцу присваивается новое имя, заданное после AS, или столбец получает имя столбца исходной таблицы, если AS отсутствует.

SELECT title AS Название, amount 
FROM book;

Выборка данных, вычисляемые столбцы, математические функции

С помощью SQL запросов можно осуществлять вычисления по каждой строке таблицы с помощью вычисляемого столбца. Для него в списке полей после оператора SELECT указывается выражение и задается имя.

Выражение может включать имена столбцов, константы, знаки операций, встроенные функции.

Результатом является таблица, в которую включены все данные из указанных после SELECT столбцов, а также новый столбец, в каждой строке которого вычисляется заданное выражение.

SELECT title, author, price, amount, 
     price * amount AS total 
FROM book;

В SQL реализовано множество математических функций для работы с числовыми данными. В таблице приведены некоторые из них.

ФункцияОписаниеПример
CEILING(x)возвращает наименьшее целое число, большее или равное x (округляет до целого числа в большую сторону)CEILING(4.2)=5 CEILING(-5.8)=-5
ROUND(x, k)округляет значение x до k знаков после запятой, если k не указано – x округляется до целогоROUND(4.361)=4 ROUND(5.86592,1)=5.9
FLOOR(x)возвращает наибольшее целое число, меньшее или равное x (округляет до целого числа в меньшую сторону)FLOOR(4.2)=4 FLOOR(-5.8)=-6
POWER(x, y)возведение x в степень yPOWER(3,4)=81.0
SQRT(x)квадратный корень из xSQRT(4)=2.0 SQRT(2)=1.41...
DEGREES(x)конвертирует значение x из радиан в градусыDEGREES(3) = 171.8...
RADIANS(x)конвертирует значение x из градусов в радианыRADIANS(180)=3.14...
ABS(x)модуль числа xABS(-1) = 1 ABS(1) = 1
PI()pi = 3.1415926...

Существуют разные способы округления чисел. В SQL реализовано математическое округление. Для округления вещественного числа нужно в записи числа выбрать разряд в дробной части, до которого производится округление. Цифра, записанная в выбранном разряде: не меняется, если следующая за ней справа цифра - 0, 1, 2, 3 или 4; увеличивается на единицу, если следующая за ней справа цифра - 5,6,7,8 или 9.

SELECT title, 
    price, 
    ROUND((price*18/100)/(1+18/100),2) AS tax, 
    ROUND(price/(1+18/100),2) AS price_tax 
FROM book;

Выборка данных, вычисляемые столбцы, логические функции

В SQL реализована возможность заносить в поле значение в зависимости от условия. Для этого используется функция IF:

IF(логическое_выражение, выражение_1, выражение_2) Функция вычисляет логическое_выражение, если оно истина – в поле заносится значение выражения_1, в противном случае – значение выражения_2. Все три параметра IF() являются обязательными.

Допускается использование вложенных функций, вместо выражения_1 или выражения_2 может стоять новая функция IF.

SELECT title, amount, price, 
    ROUND(IF(amount<4, price*0.5, price*0.7),2) AS sale
FROM book;
SELECT title, amount, price,
    ROUND(IF(amount < 4, price * 0.5, IF(amount < 11, price * 0.7, price * 0.9)), 2) AS sale,
    IF(amount < 4, 'скидка 50%', IF(amount < 11, 'скидка 30%', 'скидка 10%')) AS Ваша_скидка
FROM book;

Выборка данных по условию

С помощью запросов можно включать в итоговую выборку не все строки исходной таблицы, а только те, которые отвечают некоторому условию. Для этого после указания таблицы, откуда выбираются данные, задается ключевое слово WHERE и логическое выражение, от результата которого зависит будет ли включена строка в выборку или нет. Если условие – истина, то строка(запись) включается в выборку, если ложь – нет.

Логическое выражение может включать операторы сравнения (равно «=», не равно «<>», больше «>», меньше «<», больше или равно«>=», меньше или равно «<=») и выражения, допустимые в SQL.

SELECT title, price 
FROM book
WHERE price < 600;

Выборка данных, логические операции

Логическое выражение после ключевого слова WHERE кроме операторов сравнения и выражений может включать логические операции (И «and», ИЛИ «or», НЕ «not») и круглые скобки, изменяющие приоритеты выполнения операций.

Приоритеты операций: 1. круглые скобки 2. умножение (*), деление (/) 3. сложение (+), вычитание (-) 4. операторы сравнения (=, >, <, >=, <=, <>) 5. NOT 6. AND 7. OR

SELECT title, author, price 
FROM book
WHERE (author = 'Булгаков М.А.' OR author = 'Есенин С.А.') AND price > 600;

В данном запросе обязательно нужно поставить скобки, так как без них сначала вычисляется author = 'Есенин С.А.' and price > 600, а потом уже выражение через or. Без скобок были бы отобраны все книги Булгакова и те книги Есенина, цена которых больше 600.

Операторы BETWEEN, IN - выборка данных

Логическое выражение после ключевого слова WHERE может включать операторы BETWEEN и IN. Приоритет у этих операторов такой же как у операторов сравнения, то есть они выполняются раньше, чем NOT, AND, OR.

Оператор BETWEEN

Оператор BETWEEN позволяет отобрать данные, относящиеся к некоторому интервалу, включая его границы.

SELECT title, amount 
FROM book
WHERE amount BETWEEN 5 AND 14;

Оператор IN

Оператор IN позволяет выбрать данные, соответствующие значениям из списка.

SELECT title, price 
FROM book
WHERE author IN ('Булгаков М.А.', 'Достоевский Ф.М.');

Оператор ORDER BY - выборка данных с сортировкой

При выборке можно указывать столбец или несколько столбцов, по которым необходимо отсортировать отобранные строки. Для этого используются ключевые слова ORDER BY, после которых задаются имена столбцов. При этом строки сортируются по первому столбцу, если указан второй столбец, сортировка осуществляется только для тех строк, у которых значения первого столбца одинаковы. По умолчанию ORDER BY выполняет сортировку по возрастанию. Чтобы управлять направлением сортировки вручную, после имени столбца указывается ключевое слово ASC (по возрастанию) или DESC (по убыванию).

Столбцы после ключевого слова ORDER BY можно задавать:

  • названием столбца;
  • номером столбца;
  • именем столбца (указанным после AS).
SELECT title, author, price
FROM book
ORDER BY title;

Оператор LIKE - выборка данных

Оператор LIKE используется для сравнения строк. В отличие от операторов отношения равно (=) и не равно (<>), LIKE позволяет сравнивать строки не на полное совпадение (не совпадение), а в соответствии с шаблоном. Шаблон может включать обычные символы и символы-шаблоны. При сравнении с шаблоном, его обычные символы должны в точности совпадать с символами, указанными в строке. Символы-шаблоны могут совпадать с произвольными элементами символьной строки.

Символ-шаблонОписаниеПример
%Любая строка, содержащая ноль или более символовSELECT * FROM book WHERE author LIKE '%М.%' - выполняет поиск и выдает все книги, инициалы авторов которых содержат «М.»
_ (подчеркивание)Любой одиночный символSELECT * FROM book WHERE title LIKE 'Поэм_' - выполняет поиск и выдает все книги, названия которых либо «Поэма», либо «Поэмы» и пр.
ШаблонОписание
'Б%'значение, начинающееся с буквы «Б».
"_ _ _ _ _"значение, состоящее ровно из 5 букв
"_ _ _ _ _ _%"значение длиннее 5 символов
title LIKE "_% и _%" (отбирает слово И внутри названия)

OR title LIKE "и _%" (отбирает слово И в начале названия)

OR title LIKE "_% и" (отбирает слово И в конце названия)

OR title LIKE "и"
Значение которое содержит букву "и" как отдельное слово, если считать, что слова отделяются друг от друга пробелами и не содержат знаков препинания.
"% %"значение состоит ровно из одного слова
"_% %"значение состоит из двух и более слов

Оператор DISTINCT - Выбор уникальных элементов столбца

Чтобы отобрать уникальные элементы некоторого столбца используется ключевое слово DISTINCT, которое размещается сразу после SELECT.

SELECT DISTINCT author
FROM book;

Оператор GROUP BY - Выбор уникальных элементов столбца

Оператор GROUP BY группирует данные при выборке, имеющие одинаковые значения в некотором столбце. Столбец, по которому осуществляется группировка, указывается после GROUP BY .

С помощью GROUP BY можно выбрать уникальные элементы столбца, по которому осуществляется группировка. Результат будет точно такой же как при использовании DISTINCT.

SELECT  author
FROM book
GROUP BY author;

Групповые функции SUM и COUNT - Выборка данных

При группировке над элементами столбца, входящими в группу можно выполнить различные действия, например, просуммировать их или найти количество элементов в группе.

SELECT author, sum(amount), count(amount)
FROM book
GROUP BY author;
  1. В таблице book определяются строки, в которых в столбце author одинаковые значения
  2. Вместо каждой группы в результирующий запрос включается одна запись. Запись как минимум включает значение столбца, по которому осуществляется группировка (в нашем случае это author)
  3. Дальше можно выполнить вычисления над элементами КАЖДОЙ группы в отдельности, например, посчитать общее количество экземпляров книг каждого автора. Для этого используется групповая функция SUM(), а в скобках указывается столбец, по которому нужно выполнить суммирование ( в нашем случае amount)
  4. Также можно посчитать, сколько записей относится к группе. Для этого используется функция COUNT(), в скобках можно указать ЛЮБОЙ столбец из группы, если группа не содержит пустых значений (ниже приведен пример, в котором показано, как работает COUNT(), если в группе есть пустые значения)

Функцию COUNT() можно применять к любому столбцу, в том числе можно использовать и *, если таблица не содержит пустых значений. Если же в столбцах есть значения Null, то

  • COUNT(*) — подсчитывает все записи, относящиеся к группе, в том числе и со значением NULL;
  • COUNT(имя_столбца) — возвращает количество записей конкретного столбца (только NOT NULL), относящихся к группе.

Групповые функции MIN, MAX и AVG

К групповым функциям SQL относятся: MIN(), MAX() и AVG(), которые вычисляют минимальное, максимальное и среднее значение элементов столбца, относящихся к группе.

SELECT author, MIN(price) AS min_price
FROM book
GROUP BY author;

Выборка данных c вычислением, групповые функции

В качестве аргумента групповых функций SQL может использоваться не только столбец, но и любое допустимое в SQL арифметическое выражение.

SELECT author, SUM(price * amount) AS Стоимость
FROM book
GROUP BY author;
+------------------+-----------+
| author           | Стоимость |
+------------------+-----------+
| Булгаков М.А.    | 4715.47   |
| Достоевский Ф.М. | 11802.03  |
| Есенин С.А.      | 9750.00   |
+------------------+-----------+
SELECT author, ROUND(AVG(price),2) AS Средняя_цена
FROM book
GROUP BY author;

Вычисления по таблице целиком

Групповые функции позволяют вычислять итоговые значения по всей таблице. Например, можно посчитать общее количество книг на складе, вычислить суммарную стоимость и пр. Для этого после ключевого слова SELECT указывается групповая функция для выражения или имени столбца, а ключевые слова GROUP BY опускаются.

SELECT SUM(amount) AS Количество
FROM book;

Выборка данных по условию, групповые функции

В запросы с групповыми функциями можно включать условие отбора строк, которое в обычных запросах записывается после WHERE. В запросах с групповыми функциями вместо WHERE используется ключевое слово HAVING , которое размещается после оператора GROUP BY.

SELECT author,
    MIN(price) AS Минимальная_цена, 
    MAX(price) AS Максимальная_цена
FROM book
GROUP BY author
HAVING SUM(price * amount) > 5000; 

Также в запросах с группировкой можно сортировать данные.

SELECT author,
    MIN(price) AS Минимальная_цена, 
    MAX(price) AS Максимальная_цена
FROM book
GROUP BY author
HAVING SUM(price * amount) > 5000 
ORDER BY Минимальная_цена DESC;

WHERE и HAVING могут использоваться в одном запросе. При этом необходимо учитывать порядок выполнения SQL запроса на выборку на СЕРВЕРЕ:

FROM WHERE GROUP BY HAVING SELECT ORDER BY