📜 Читайте также: Ускорение работы сайта: перенос MySQL в tmpfs
SQL-выражения представляют собой формулы в виде комбинаций значений, операторов и/или функций, используемые для вывода нужных значений. А еще при помощи этих выражений осуществляются запросы из баз данных для создания определенных выборок. Выражения SQL делятся на логические, числовые и в формате даты. Давайте рассмотрим каждый тип отдельно.
Логические выражения SQL
Как и следует из названия, извлечение данных здесь выполняется по условию. В этой операции используются операторы SELECT, FROM и WHERE. Оператор SELECT указывает на то, из какого столбца будет извлечено интересующее нас значение, FROM — из какой таблицы оно будет извлечено, а WHERE указывает на уникальный идентификатор (и его местоположение), при обращении к которому SQL сможет извлечь нужное нам значение. Допустим, у нас есть таблица с названием Clubs, которая выглядит так (о том, как создавать и заполнять таблицы SQL, написана отдельная статья):
Представим, что у нас есть две задачи: получить название клуба с идентификатором 002 и название страны по идентификатору 004. Для этого используем следующие инструкции (и ниже сразу же покажем вывод):
SELECT Club FROM Clubs WHERE id = 002;
Barcelona
SELECT Country FROM Clubs WHERE id = 004;
Italy
Вывод оказался таким потому, что Barcelona находится в столбце Club в строке с идентификатором 002, а Italy — в столбце Country в строке с идентификатором 004.
Логические И (AND) и ИЛИ (OR)
Сделать выборку из нескольких значений нам помогут логические операторы AND и OR, которые мы будем использовать вместе с WHERE. Начнем с оператора AND. Он перечисляет условия, соблюдение каждого из которых обязательно для того, чтобы строки (или значения) попадали в выборку. Вернемся к нашей таблице и выполним следующий запрос:
SELECT * FROM Clubs WHERE Year < 1900 AND Cups > 10;
Мы получим вот такой вывод:
002 | Barcelona | Spain | 1899 | 26 | 31
004 | Juventus | Italy | 1897 | 36 | 14
Теперь объяснение. Мы «попросили» нашу СУБД выдать нам строки клубов, которые были основаны ранее 1900 года (Year < 1900) и при этом (AND) выиграли не менее 10 национальных кубков (Cups > 10). Таким критериям соответствовали только строки с id 002 и 004. А теперь давайте заменим AND на OR и посмотрим, каким получится вывод:
SELECT * FROM Clubs WHERE Year < 1900 OR Cups > 10;
В выборку попадут все без исключения id:
001 | Real Madrid | Spain | 1902 | 35 | 19
002 | Barcelona | Spain | 1899 | 26 | 31
003 | Milan | Italy | 1899 | 19 | 5
004 | Juventus | Italy | 1897 | 36 | 14
005 | Bavaria | Germany | 1900 | 32 | 20
Дело в том, что оператор OR перечисляет условия, из которых нужно соблюсти хотя бы одно, чтобы строка попала в выборку. А поскольку у нас каждый клуб был основан либо ранее 1900 года, либо выиграл более 10 кубков, в выборку попали все. Давайте изменим условие:
SELECT * FROM Clubs WHERE Year < 1900 OR Cups > 20;
002 | Barcelona | Spain | 1899 | 26 | 31
003 | Milan | Italy | 1899 | 19 | 5
004 | Juventus | Italy | 1897 | 36 | 14
«Реал» (id = 001) не попал в выборку, поскольку не выиграл 20 национальных кубков и основан в 1902 году. «Бавария» же (id = 005) выиграла 20 кубков и основана в 1900 году, но обратите внимание на условия: Cups > 20, а не Cups >= 20, и Year < 1900, а не Year <= 1900. Таким образом, оба условия для «Баварии» также не были соблюдены, и она тоже оказалась вне выборки. Для корректной выборки всегда обращайте внимание на правильное использование математических операторов сравнения (>, <, =, >=, <=) совместно с логическими.
Числовые выражения SQL
Числовые выражения служат для операций со значениями, представленными в виде чисел:
- count() используется для подсчета определенных элементов (например, строк);
- sum() подсчитывает сумму значений определенного столбца;
- avg() выдает среднее арифметическое для значений в определенном столбце;
- min() выводит минимальное значение в каком-либо столбце;
- max() выведет, соответственно, максимальное значение.
Теперь рассмотрим это на примере нашей таблицы, используя табличные выражения SQL с числовыми операторами (ниже сразу же будет показан вывод):
SELECT count(*) FROM Clubs;
5
SELECT min(Year) FROM Clubs;
1897
SELECT max(Year) FROM Clubs;
1902
SELECT sum(Champs) FROM Clubs;
148
SELECT avg(Cups) FROM Clubs;
17.8
Это значит, что в нашей таблице 5 строк, минимальный найденный год основания клуба — 1897-й, а максимальный — 1902-й. Также все клубы из таблицы суммарно выиграли 148 национальных чемпионатов и по 17,8 национальных кубков в среднем на каждый клуб. Теперь давайте подключим WHERE для точной выборки по определенному значению:
SELECT count(*) FROM Clubs WHERE Champs > 20;
4
Программа вернула нам значение 4, потому что строка с id = 003 (Milan) не подходит под выбранные критерии (мы указали, что количество выигранных чемпионатов должно быть более 20, а у «Милана» их на данный момент 19). Еще пример:
SELECT count(*) FROM Clubs WHERE Cups < 20;
3
У «Баварии» (id = 005) 20 выигранных кубков Германии, но в эту выборку она не попала, поскольку мы указали значение < 20, а чтобы включить и немецкий клуб, нужно было написать так: <= 20, то есть меньше или равно 20.
Выражения SQL в формате даты
Эти выражения используются для того, что выводить данные в формате даты. Например, нам нужно получить системное время. Для этого используем такой синтаксис (инструкции будут различаться в зависимости от СУБД, с которой мы работаем).
Для MySQL:
SELECT now();
2022-03-19 06:15:34
Для SQL Server:
SELECT GetDate();
2022-03-19
Для Oracle DB:
select sysdate from Dual;
19-MAR-22
Как видим, никаких проблем с получением данных в формате даты ни в одной из систем нет: эти данные вызываются очень простыми командами.
Надеемся, принцип работы с выражениями SQL теперь вам понятен, и вы сможете использовать их для точной выборки в своих базах данных. Успехов в работе!
Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.💥