MySQL IF () функция
ЕСЛИ () функция
MySQL IF () принимает три выражения и, если первое выражение истинно, не равно нулю и не равно NULL, оно возвращает второе выражение. В противном случае он возвращает третье выражение.
В зависимости от контекста, в котором он используется, он возвращает либо числовое, либо строковое значение.
Синтаксис:
IF (выражение, expr_true, expr_false);
параметры
название | Описание | Тип возврата |
---|---|---|
выражение | Выражение. | |
expr_true | Возвращает, когда условие ИСТИНА. | строка, когда expr_true является строкой, значение с плавающей запятой, когда expr _true является значением с плавающей запятой, и целое число, когда expr _true является целым числом. |
expr_false | Возвращает, когда условие ЛОЖЬ. | строка, когда expr_false является строкой, значение с плавающей запятой, когда expr _false является значением с плавающей запятой, и целое число, когда expr _false является целым числом. |
Версия MySQL: 5.6
Примечание: есть другой оператор IF , который отличается от функции IF (), описанной в главе процедуры MySQL.
Иллюстрированная презентация
Пример: функция MySQL IF ()
В следующем утверждении, поскольку 1 меньше 3, поэтому IF () возвращает третье выражение, т.е. false.
Код:
SELECT IF(1>3,'true','false');
Пример вывода:
mysql> SELECT IF (1> 3, «истина», «ложь»); + ------------------------ + | IF (1> 3, «истина», «ложь») | + ------------------------ + | ложь | + ------------------------ + 1 ряд в наборе (0,00 сек)
Пример: функция IF () с CASE
В следующем примере оператор MySQL возвращает третье выражение «ложь», поскольку первое выражение не является истинным.
Код:
SELECT IF((SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END),'true','false');
Пример вывода:
mysql> SELECT IF ((ВЫБЕРИТЕ СЛУЧАЙ, КОГДА 1> 0 THEN 'true' ELSE 'false' END), 'true', 'false'); + ------------------------------------------------- ----------------------- + | IF ((ВЫБЕРИТЕ СЛУЧАЙ, КОГДА 1> 0 ТОГДА 'истина', ДАЛЕЕ 'ложь' КОНЕЦ), 'истина', 'ложь') | + ------------------------------------------------- ----------------------- + | ложь | + ------------------------------------------------- ----------------------- + 1 ряд в наборе, 1 предупреждение (0,02 с)
MySQL IF в выражении SELECT
Следующая инструкция MySQL возвращает название книги и на каком языке книга была опубликована. Статус языка - английский. Книга для pub_lang. Английский, в противном случае возвращается «Другой язык».
Код:
SELECT book_name,
IF(pub_lang='English',"English Book","Other Language")
AS Language
FROM book_mast;
Пример таблицы: book_mast
Пример вывода:
mysql> SELECT book_name, -> IF (pub_lang = "Английский", "Английская книга", "Другой язык") -> AS Language -> ОТ book_mast; + ------------------------------------- + ----------- ----- + | book_name | Язык | + ------------------------------------- + ----------- ----- + | Введение в электродинамику | Английская книга | | Понимание стальных конструкций | Английская книга | | Руководство по сети | Другое Lnaguage | | Передача тепла и массы | Английская книга | | Концептуальная физика | Другое Lnaguage | | Основы жары | Другое Lnaguage | | Продвинутая 3d графика | Другое Lnaguage | | Анатомия человека | Другое Lnaguage | | Уход за психическим здоровьем | Английская книга | | Основы термодинамики | Английская книга | | Экспериментальный анализ кошек | Другое Lnaguage | | Природа Мира | Английская книга | | Окружающая среда - устойчивое будущее | Другое Lnaguage | | Концепции в здоровье | Другое Lnaguage | | Анатомия и физиология | Другое Lnaguage | | Сети и Телекоммуникации | Другое Lnaguage | + ------------------------------------- + ----------- ----- + 16 рядов в наборе (0,02 сек)
MySQL SELECT в выражении IF
Следующая инструкция MySQL возвращает имя книги, isbn no и псевдоним столбца Page / Price выражения из таблицы book_mast. Страницей / Ценой будет Цена, если число языков, отличных от английского, больше, чем языка Английский, в противном случае Страницей / Ценой будут Страницы и no_page. Здесь в этом примере количество книг на других языках больше, чем количество книг на английском языке.
Код:
SELECT book_name,isbn_no,
IF((SELECT COUNT(*) FROM book_mast WHERE pub_lang='English')>
(SELECT COUNT(*) FROM book_mast WHERE pub_lang<>'English'),
(CONCAT("Pages: ",no_page)),(CONCAT("Price: ",book_price)))
AS "Page / Price"
FROM book_mast;
Пример таблицы: book_mast
Пример вывода:
mysql> SELECT book_name, isbn_no, -> ЕСЛИ ((ВЫБЕРИТЕ СЧЕТЧИК (*) ОТ book_mast ГДЕ pub_lang = 'Английский')> -> (ВЫБЕРИТЕ COUNT (*) ИЗ book_mast, ГДЕ pub_lang <> 'English'), -> (CONCAT ("Страницы:", no_page)), (CONCAT ("Цена:", book_price))) -> AS "Страница / Цена" -> ОТ book_mast; + ------------------------------------- + ----------- - + --------------- + | book_name | isbn_no | Страница / Цена | + ------------------------------------- + ----------- - + --------------- + | Введение в электродинамику | 0000979001 | Цена: 85,00 | | Понимание стальных конструкций | 0000979002 | Цена: 105,50 | | Руководство по сети | 0000979003 | Цена: 200,00 | | Передача тепла и массы | 0000979004 | Цена: 250,00 | | Концептуальная физика | 0000979005 | Цена: 145,00 | | Основы жары | 0000979006 | Цена: 112,00 | | Продвинутая 3d графика | 0000979007 | Цена: 56,00 | | Анатомия человека | 0000979008 | Цена: 50,50 | | Уход за психическим здоровьем | 0000979009 | Цена: 145,00 | | Основы термодинамики | 0000979010 | Цена: 225,00 | | Экспериментальный анализ кошек | 0000979011 | Цена: 95,00 | | Природа Мира | 0000979012 | Цена: 88,00 | | Окружающая среда - устойчивое будущее | 0000979013 | Цена: 100,00 | | Концепции в здоровье | 0000979014 | Цена: 180,00 | | Анатомия и физиология | 0000979015 | Цена: 135,00 | | Сети и Телекоммуникации | 00009790_16 | Цена: 45,00 | + ------------------------------------- + ----------- - + --------------- + 16 рядов в наборе (0,00 сек)
Отображение настраиваемого текста вместо NULL с использованием функции MySQL IF
В таблице book_mast язык публикации некоторых книг не был установлен, поэтому, когда мы выбираем book_mast, столбец pub_lang отображает значения NULL, что не имеет смысла для целей отчетности. Смотрите следующий запрос:
ВЫБЕРИТЕ book_id, book_name, pub_lang -> ОТ book_mast; + --------- + ------------------------------------- + - --------- + | book_id | book_name | pub_lang | + --------- + ------------------------------------- + - --------- + | BK001 | Введение в электродинамику | Английский | | BK002 | Понимание стальных конструкций | Английский | | BK003 | Руководство по сети | Хинди | | BK004 | Передача тепла и массы | Английский | | BK005 | Концептуальная физика | NULL | | BK006 | Основы жары | Немецкий | | BK007 | Продвинутая 3d графика | Хинди | | BK008 | Анатомия человека | Немецкий | | BK009 | Уход за психическим здоровьем | Английский | | BK010 | Основы термодинамики | Английский | | BK011 | Экспериментальный анализ кошек | Французский | | BK012 | Природа Мира | Английский | | BK013 | Окружающая среда - устойчивое будущее | Немецкий | | BK014 | Концепции в здоровье | NULL | | BK015 | Анатомия и физиология | Хинди | | BK016 | Сети и Телекоммуникации | Французский | + --------- + ------------------------------------- + - --------- + 16 рядов в наборе (0,00 сек)
Мы можем избежать отображения NULL на выходе, используя функцию IF для возврата N / A вместо NULL. Вот запрос ниже.
Код:
SELECT book_id, book_name,
IF(pub_lang IS NULL,'N/A',pub_lang) AS "Pub. Language"
FROM book_mast;
Пример вывода:
mysql> SELECT book_id, book_name, -> IF (pub_lang IS NULL, 'N / A', pub_lang) AS "Pub. Language" -> ОТ book_mast; + --------- + ------------------------------------- + - -------------- + | book_id | book_name | Паб. Язык | + --------- + ------------------------------------- + - -------------- + | BK001 | Введение в электродинамику | Английский | | BK002 | Понимание стальных конструкций | Английский | | BK003 | Руководство по сети | Хинди | | BK004 | Передача тепла и массы | Английский | | BK005 | Концептуальная физика | N / A | | BK006 | Основы жары | Немецкий | | BK007 | Продвинутая 3d графика | Хинди | | BK008 | Анатомия человека | Немецкий | | BK009 | Уход за психическим здоровьем | Английский | | BK010 | Основы термодинамики | Английский | | BK011 | Экспериментальный анализ кошек | Французский | | BK012 | Природа Мира | Английский | | BK013 | Окружающая среда - устойчивое будущее | Немецкий | | BK014 | Концепции в здоровье | N / A | | BK015 | Анатомия и физиология | Хинди | | BK016 | Сети и Телекоммуникации | Французский | + --------- + ------------------------------------- + - -------------- + 16 рядов в наборе (0,01 с)
Функция MySQL IF с агрегатными функциями
MySQL SUM IF - функция IF с функцией SUM
Пример таблицы: покупка
Следующий оператор SQL будет отображать количество приобретенных книг, которые публикуются на английском и неанглийском языках подряд.
Код:
SELECT SUM(IF(pub_lang ='English',1,0)) AS English,
SUM(IF(pub_lang <> 'English',1,0)) AS "Non English"
FROM purchase;
Пример вывода:
mysql> SELECT SUM (IF (pub_lang = 'English', 1,0)) AS английский, -> SUM (IF (pub_lang <> 'English', 1,0)) AS "Non English" -> С покупки; + --------- + ------------- + | Английский | Не английский | + --------- + ------------- + | 4 | 1 | + --------- + ------------- + 1 ряд в наборе (0,02 сек)
MySQL COUNT IF - функция IF с функцией COUNT
Пример таблицы: издатель
Следующий оператор sql будет отображать количество издателей в строке для каждой страны, указанной в таблице издателей.
Код:
SELECT COUNT(IF(country ='USA',1,NULL)) USA,
COUNT(IF(country ='UK',1,NULL)) UK,
COUNT(IF(country ='India',1,NULL)) India,
COUNT(IF(country ='Australia',1,NULL)) Australia
FROM publisher;
Пример вывода:
mysql> SELECT COUNT (IF (страна = 'США', 1, NULL)) США, -> COUNT (IF (страна = 'UK', 1, NULL)) Великобритания, -> COUNT (IF (страна = 'Индия', 1, NULL)) Индия, -> COUNT (IF (страна = 'Австралия', 1, NULL)) Австралия -> ОТ издателя; + ----- + ---- + ------- + ----------- + | США | Великобритания | Индия | Австралия | + ----- + ---- + ------- + ----------- + | 3 | 2 | 2 | 1 | + ----- + ---- + ------- + ----------- + 1 ряд в наборе (0,00 сек)
Другим способом достижения аналогичного результата можно воспользоваться предложением GROUP BY и функцией COUNT, не используя функцию IF, отчет об отображении совершенно другой. Вышеуказанные выходные данные показаны в строке, но следующий запрос покажет количество строк для различного числа стран. Вот код и результат:
mysql> ВЫБРАТЬ страну, COUNT (страна) -> ОТ издателя -> GROUP BY страна; + ----------- + ---------------- + | страна | СЧЕТ (страна) | + ----------- + ---------------- + | Австралия | 1 | | Индия | 2 | | Великобритания | 2 | | США | 3 | + ----------- + ---------------- + 4 ряда в наборе (0,01 с)
Предыдущая: оператор CASE
Далее: IFNULL ()
Новый контент: Composer: менеджер зависимостей для PHP , R программирования