Задачі з SQL

лютий 2015

Сontent

Оператор CASE

Завдання

Необхідно вивести значення моделі PC та її вартість з таблиці Product_PC;
замінити відсутнє значення ціни на повідомлення "Модель відсутня".


Таблиця Product_PC

modelprice
1121600
1122700
1123650
2220NULL
2240650
2260NULL


Рішення завдання

Синтаксис CASE. Документація mysql.com

SQL-запит:

SELECT DISTINCT Product_PC.model,  
 CASE  
  WHEN price IS NULL  
  THEN 'Модель відсутня'
 ELSE price   
 END price 
FROM Product_PC;


Об'єктно-орієнтовний стиль кодування php-частини:

<?php 
$con = new mysqli("host","user","pass","db"); 
$con->set_charset("utf8");

$SQL='SELECT DISTINCT Product_PC.model, 
     CASE 
      WHEN price IS NULL 
      THEN "Модель відсутня" 
      ELSE price  
      END price  
   FROM Product_PC';
   
$result=$con->query("$SQL;");
   
while ($row = $result->fetch_assoc()){
    echo $row['model'].'  '.$row['price']."<br>"; 
  };
$con->close();
?>

Результат виконання php-частини:

1121 600
1122 700
1123 650
2220 Модель відсутня
2240 650
2260 Модель відсутня

Завдання також можна вирішити застосовуючи оператор COALESCE.
Синтаксис якого має вигляд:

CASE 
  WHEN A IS NOT NULL 
  THEN A 
  ELSE B 
END

SQL-запит в такому випадку буде мати слідуючий вигляд:

SELECT model, 
 COALESCE(price,'Модель відсутня') price
FROM Product_PC 

<?php 
$con = new mysqli("host","user","pass","db"); 
$con->set_charset("utf8");

$SQL='SELECT model, 
      COALESCE(price,"Модель відсутня") price
      FROM Product_PC';
   
$result=$con->query("$SQL;");
   
while ($row = $result->fetch_assoc()){
    echo $row['model'].'  '.$row['price']."<br>"; 
  };
$con->close();
?>

1121 600
1122 700
1123 650
2220 Модель відсутня
2240 650
2260 Модель відсутня