Базовые запросы с использованием LIKE, BETWEEN, ORDER BY, ALIASES, IN, TOP-LIMIT, DISTINCT
Для того чтобы отобрать все данные из таблицы используется SQL запрос следующей структуры:
ключевое слово SELECT; символ « *» ; ключевое слово FROM; имя таблицы.
SELECT * FROM book;
Для того чтобы отобрать данные из определенных столбцов таблицы используется SQL запрос следующей структуры:
ключевое слово SELECT ; список столбцов таблицы через запятую; ключевое слово FROM ; имя таблицы.
SELECT title, amount FROM book;
Для того чтобы отобрать данные из определенных столбцов таблицы и одновременно задать столбцам новые имена используется 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 в степень y | POWER(3,4)=81.0 |
SQRT(x) | квадратный корень из x | SQRT(4)=2.0 SQRT(2)=1.41... |
DEGREES(x) | конвертирует значение x из радиан в градусы | DEGREES(3) = 171.8... |
RADIANS(x) | конвертирует значение x из градусов в радианы | RADIANS(180)=3.14... |
ABS(x) | модуль числа x | ABS(-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.
Логическое выражение после ключевого слова WHERE может включать операторы BETWEEN и IN. Приоритет у этих операторов такой же как у операторов сравнения, то есть они выполняются раньше, чем NOT, AND, OR.
Оператор BETWEEN позволяет отобрать данные, относящиеся к некоторому интервалу, включая его границы.
SELECT title, amount
FROM book
WHERE amount BETWEEN 5 AND 14;
Оператор IN позволяет выбрать данные, соответствующие значениям из списка.
SELECT title, price
FROM book
WHERE author IN ('Булгаков М.А.', 'Достоевский Ф.М.');
При выборке можно указывать столбец или несколько столбцов, по которым необходимо отсортировать отобранные строки. Для этого используются ключевые слова ORDER BY, после которых задаются имена столбцов. При этом строки сортируются по первому столбцу, если указан второй столбец, сортировка осуществляется только для тех строк, у которых значения первого столбца одинаковы. По умолчанию ORDER BY выполняет сортировку по возрастанию. Чтобы управлять направлением сортировки вручную, после имени столбца указывается ключевое слово ASC (по возрастанию) или DESC (по убыванию).
Столбцы после ключевого слова ORDER BY можно задавать:
SELECT title, author, price
FROM book
ORDER BY title;
Оператор 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, которое размещается сразу после SELECT.
SELECT DISTINCT author
FROM book;
Оператор GROUP BY группирует данные при выборке, имеющие одинаковые значения в некотором столбце. Столбец, по которому осуществляется группировка, указывается после GROUP BY .
С помощью GROUP BY можно выбрать уникальные элементы столбца, по которому осуществляется группировка. Результат будет точно такой же как при использовании DISTINCT.
SELECT author
FROM book
GROUP BY author;
При группировке над элементами столбца, входящими в группу можно выполнить различные действия, например, просуммировать их или найти количество элементов в группе.
SELECT author, sum(amount), count(amount)
FROM book
GROUP BY author;
Функцию COUNT() можно применять к любому столбцу, в том числе можно использовать и *, если таблица не содержит пустых значений. Если же в столбцах есть значения Null, то
К групповым функциям SQL относятся: MIN(), MAX() и AVG(), которые вычисляют минимальное, максимальное и среднее значение элементов столбца, относящихся к группе.
SELECT author, MIN(price) AS min_price
FROM book
GROUP BY author;
В качестве аргумента групповых функций 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