В MySQL оператор CASE описывает способы обработки цикла для выполнения определенного набора условий и возврата случая, сопоставленного с использованием IF-ELSE. Это управляющий оператор, который проверяет набор условий. Если какой-либо регистр найден как TRUE, он возвращает значение. Если ни один регистр не подходит, возвращается значение ELSE. Если значение ELSE не было определено, возвращается NULL.
В этой статье будет подробно рассмотрен оператор CASE в MySQL.
Оператор CASE в MySQL
Если у вас есть предыдущий опыт программирования на любом из популярных языков программирования , то оператор CASE определенно вам знакома. Структура следующая.
CASE WHEN condition_n THEN result_n WHEN condition_n THEN result_n ELSE else_result END
Давайте вкратце разберем каждую из частей.
- <condition_n>: условия, необходимые для оценки оператора CASE.
- <result_n>: результат соответствующего совпадения регистра.
- <else_result>: результат, когда совпадение не найдено. Если не определено, CASE возвращает NULL.
Если вы присмотритесь, то структура почти такая же, как в типичной логической структуре if-else в Java.
Использование оператора CASE
Базовое использование
Чтобы продемонстрировать применение CASE, мы собираемся использовать выделенную базу данных MySQL. Для простоты использования я буду использовать phpMyAdmin для доступа к базам данных и управления ими. Узнайте больше об установке и настройке phpMyAdmin и MySQL в Ubuntu.
Мы создали пустую базу данных hello_world.
Наша примерная база данных будет содержать информацию о студентах. Создайте новую таблицу с именем «Students».
$ CREATE TABLE Students(ID int, Name varchar(255), State varchar(255), City varchar(255));
Теперь вставьте образец ввода в таблицу.
$ INSERT INTO Students (ID, Name, State, City) VALUES ('1', 'Adrien', 'Arizona', 'Prescott'); $ INSERT INTO Students (ID, Name, State, City) VALUES ('2', 'Alisha', 'Nebraska', 'Omaha'); $ INSERT INTO Students (ID, Name, State, City) VALUES ('3', 'Brenda', 'Michigan', 'Detroit'); $ INSERT INTO Students (ID, Name, State, City) VALUES ('4', 'Thompson', 'New York', ''); $ INSERT INTO Students (ID, Name, State, City) VALUES ('5', 'David', '', 'Portland');
Взгляните на следующий запрос и его результат.
SELECT Name, State, City FROM Students ORDER BY ( CASE WHEN State is NULL THEN City ELSE State END);
Использование оператора CASE с агрегатной функцией
В следующем примере мы создадим новую таблицу базы данных, содержащую информацию о продажах. На основе этой информации мы определим количество заказов по статусу заказа. Для этого мы также будем использовать функцию SUM() в MySQL. В следующем руководстве подробно рассматривается функция SUM() в MySQL.
Создайте новую таблицу Orders.
$ CREATE TABLE Orders (order_ID int, sales_ID int, status varchar(255));
Давайте заполним таблицу некоторыми образцами данных.
$ INSERT INTO Orders (order_ID, sales_ID, status) VALUES ('5', '10', 'processing'); $ INSERT INTO Orders (order_ID, sales_ID, status) VALUES ('8', '244', 'success'); $ INSERT INTO Orders (order_ID, sales_ID, status) VALUES ('4', '274', 'processing'); $ INSERT INTO Orders (order_ID, sales_ID, status) VALUES ('80', '452', 'success'); $ INSERT INTO Orders (order_ID, sales_ID, status) VALUES ('10', '10000', 'processing');
Следующий код будет подсчитывать экземпляры успеха и обработки.
SELECT SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) AS 'Success count', SUM(CASE WHEN status = 'processing' THEN 1 ELSE 0 END) AS 'processing', COUNT(*) AS 'Sum total' FROM Orders;
Код показывает сумму всех заказов в соответствии с их статусом. Во-первых, операторы CASE выполняются и возвращают 1 каждый раз, когда он сопоставляется с соответствующим статусом заказа. Наконец, функция SUM() вычисляет общее количество заказов.
Последняя мысль
В этой статье мы исследовали использование оператора CASE в MySQL. Короче говоря, это логический оператор, который позволяет эффективно выполнять логику IF-ELSE для запросов SQL. Мы показали, как это реализовать в различных ситуациях. По сравнению с использованием нескольких операторов IF-ELSE, CASE делает код более читаемым и эффективным.
MySQL богат мощными функциями. Чтобы узнать больше, ознакомьтесь со следующими руководствами по схеме , функции DATEDIFF(), работе с подстрокой и т. д.