środa, 19 września 2018

MySQL Obsługa wartości NULL

Obsługa wartości NULL w MySQL


Używaliśmy polecenie SQL SELECT wraz z klauzulą WHERE, aby pobrać dane z tabeli MySQL, ale gdy próbujemy podać warunek, który porównuje pole lub wartość kolumny do wartości NULL, to nie działa poprawnie.
Aby obsłużyć taką sytuację, MySQL zapewnia trzy operatory -
·      IS NULL - Ten operator zwraca wartość true, jeśli wartość kolumny ma wartość NULL.
·      IS NOT NULL - Ten operator zwraca wartość true, jeśli wartość kolumny nie ma wartości NULL.
·      <=> - Ten operator porównuje wartości, które (w przeciwieństwie do operatora =) są prawdziwe nawet dla dwóch wartości NULL.
Warunki dotyczące NULL są wyjątkowe. Nie można użyć wartości = NULL lub! = NULL, aby wyszukać wartości NULL w kolumnach. Takie porównania zawsze kończą się niepowodzeniem, ponieważ niemożliwe jest stwierdzenie, czy są one prawdziwe, czy nie. Czasami nawet NULL = NULL kończy się niepowodzeniem.
Aby wyszukać kolumny, które są lub nie są NULL, użyj IS NULL lub IS NOT NULL .

Używanie wartości NULL w wierszu polecenia

Załóżmy, że w bazie danych KURS znajduje się tabela o nazwie kurs_ils_tbl i zawiera ona dwie kolumny, a mianowicie kurs_author i kurs_ilosc, gdzie NULL w kurs_ilosc wskazuje, że wartość jest nieznana.
Przykład
Wypróbuj następujące przykłady  −
root@host# mysql -u root -p password;
Enter password:*******

mysql> use KURS;
Database changed

mysql> create table kurs_ils_tbl
   -> (
   -> kurs_author varchar(40) NOT NULL,
   -> kurs_ilosc  INT
   -> );
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO kurs_ils_tbl
   -> (kurs_author, kurs_ilosc) values ('Berg', '20');

mysql> INSERT INTO kurs_ils_tbl
   -> (kurs_author, kurs_ilosc) values ('K. Nelberg', NULL);

mysql> INSERT INTO kurs_ils_tbl
   -> (kurs_author, kurs_ilosc) values ('H.Kern', NULL);

mysql> INSERT INTO kurs_ils_tbl
   -> (kurs_author, kurs_ilosc) values ('Gilowski', 20);

mysql> select * from kurs_ils_tbl;
+-------------+-------------+------------+
| id_kurs_ils | kurs_author | kurs_ilosc |
+-------------+-------------+------------+
|           4 | Berg        | 20         |
|           5 | K. Nelberg  | NULL       |
|           6 | H.Kern      | NULL       |
|           7 | Gilowski    | 20         |
+-------------+-------------+------------+
4 rows in set (0.00 sec)
mysql>

Możesz zobaczyć, że = i != Nie działają z wartościami NULL w następujący sposób:
mysql> SELECT * FROM kurs_ils_tbl WHERE kurs_ilosc = NULL;
Empty set (0.00 sec)

mysql> SELECT * FROM kurs_ils_tbl WHERE kurs_ilosc != NULL;
Empty set (0.01 sec)

Aby znaleźć rekordy, w których kolumna kurs_ilosc ma wartość NULL lub nie, zapytania powinny być napisane tak, jak pokazano w poniższym programie.
mysql> select * from kurs_ils_tbl
    -> where kurs_ilosc is null;
+-------------+-------------+------------+
| id_kurs_ils | kurs_author | kurs_ilosc |
+-------------+-------------+------------+
|           5 | K. Nelberg  | NULL       |
|           6 | H.Kern      | NULL       |
+-------------+-------------+------------+
2 rows in set (0.00 sec))
mysql> select * from kurs_ils_tbl
    -> where kurs_ilosc is not null;
+-------------+-------------+------------+
| id_kurs_ils | kurs_author | kurs_ilosc |
+-------------+-------------+------------+
|           4 | Berg        | 20         |
|           7 | Gilowski    | 20         |
+-------------+-------------+------------+
2 rows in set (0.00 sec)

Obsługa wartości NULL w skrypcie PHP

Możesz użyć warunku if ... else, aby przygotować zapytanie na podstawie wartości NULL.
Przykład
Poniższy przykład pobiera kurs_ilosc z zewnątrz, a następnie porównuje go z wartością dostępną w tabeli.
<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Nie można się połączyć: ' . mysql_error());
   }

   if( isset($kurs_ilosc )) {
      $sql = 'SELECT kurs_author, kurs_count
         FROM  kurs_ils_tbl
         WHERE kurs_count = $kurs_ilosc';
   } else {
      $sql = 'SELECT kurs_author, kurs_count
         FROM  kurs_ils_tbl
         WHERE kurs_ilosc IS $kurs_ilosc';
   }

   mysql_select_db('KURS');
   $retval = mysql_query( $sql, $conn );
  
   if(! $retval ) {
      die('nie można otrzymać danych: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Autor:{$row['kurs_author']}  <br> ".
      "ilość: {$row['kurs_ilosc']} <br> ".
      "--------------------------------<br>";
   }
   echo "Pobrano dane pomyślnie\n";
   mysql_close($conn);
?>




Brak komentarzy:

Prześlij komentarz