В MySQL оператор CASE описывает способы обработки цикла для выполнения определенного набора условий и возврата регистра, сопоставленного с использованием IF-ELSE. Это управляющий оператор, который проверяет набор условий. Если какой-либо регистр найден как ИСТИНА, он возвращает значение. Если ни один регистр не подходит, возвращается значение ELSE. Также если значение ELSE не было определено, возвращается NULL.
В этом руководстве будет подробно рассмотрен оператор CASE в MySQL.
Оператор CASE в MySQL
Если у вас есть предыдущий опыт программирования на любом из популярных языков программирования, то оператор CASE определенно вам знакома. Структура следующая.
CASE
WHEN THEN
WHEN THEN
ELSE
END
Давайте вкратце разберем каждую из частей.
- <condition_n>: условия, необходимые для оценки оператора CASE.
- <result_n>: результат соответствующего совпадения регистра.
- <else_result>: результат, когда совпадение не найдено. Если не определено, CASE возвращает NULL.
Если вы присмотритесь, то структура почти такая же, как в типичной логической структуре if-else в Java.
Использование оператора CASE
Базовое использование
Чтобы продемонстрировать применение CASE, мы собираемся использовать выделенную базу данных MySQL. Для простоты использования я буду использовать phpMyAdmin для доступа к базам данных и управления ими.
Я создал пустую базу данных hello_world.
Наша примерная база данных будет содержать информацию о студентах. Создайте новую таблицу с именем » Студенты«.
$ 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.
Создайте новую таблицу Заказы.
$ 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 каждый раз, когда он сопоставляется с соответствующим статусом заказа. Наконец, функция СУММ () вычисляет общее количество заказов.
Заключение
В этом руководстве мы исследовали использование оператора CASE в MySQL. Короче говоря, это логический оператор, который позволяет эффективно выполнять логику IF-ELSE для запросов SQL. Мы показали, как это реализовать в различных ситуациях. По сравнению с использованием нескольких операторов IF-ELSE, CASE делает код более читаемым и эффективным.