HSQLDB - wartości null

SQL NULL to termin używany do reprezentowania brakującej wartości. Wartość NULL w tabeli to wartość w polu, które wydaje się puste. Ilekroć próbujemy podać warunek porównujący wartość pola lub kolumny z wartością NULL, nie działa on poprawnie.

Możemy obsłużyć wartości NULL, używając trzech rzeczy.

  • IS NULL - Operator zwraca prawdę, jeśli wartość kolumny jest równa NULL.

  • IS NOT NULL - Operator zwraca prawdę, jeśli wartość kolumny NIE jest NULL.

  • <=> - Operator porównuje wartości, które (w przeciwieństwie do operatora =) są prawdziwe nawet dla dwóch wartości NULL.

Aby wyszukać kolumny o wartości NULL lub NOT NULL, użyj odpowiednio IS NULL lub IS NOT NULL.

Przykład

Rozważmy przykład, gdzie jest stół tcount_tblktóry zawiera dwie kolumny, autora i tutorial_count. Możemy podać wartości NULL do tutorial_count wskazującego, że autor nie opublikował nawet jednego samouczka. Dlatego wartość tutorial_count dla tego autora to NULL.

Wykonaj następujące zapytania.

create table tcount_tbl(author varchar(40) NOT NULL, tutorial_count INT);
INSERT INTO tcount_tbl values ('Abdul S', 20);
INSERT INTO tcount_tbl values ('Ajith kumar', 5);
INSERT INTO tcount_tbl values ('Jen', NULL);
INSERT INTO tcount_tbl values ('Bavya kanna', 8);
INSERT INTO tcount_tbl values ('mahran', NULL);
INSERT INTO tcount_tbl values ('John Poul', 10);
INSERT INTO tcount_tbl values ('Sathya Murthi', 6);

Użyj następującego polecenia, aby wyświetlić wszystkie rekordy z tcount_tbl stół.

select * from tcount_tbl;

Po wykonaniu powyższego polecenia otrzymasz następujące dane wyjściowe.

+-----------------+----------------+
|     author      | tutorial_count |
+-----------------+----------------+
|      Abdul S    |      20        |
|    Ajith kumar  |      5         |
|        Jen      |     NULL       |
|    Bavya kanna  |      8         |
|       mahran    |     NULL       |
|     John Poul   |      10        |
|   Sathya Murthi |      6         |
+-----------------+----------------+

Aby znaleźć rekordy, w których kolumna tutorial_count JEST NULL, wykonaj zapytanie.

SELECT * FROM tcount_tbl WHERE tutorial_count IS NULL;

Po wykonaniu zapytania otrzymasz następujące dane wyjściowe.

+-----------------+----------------+
|     author      | tutorial_count |
+-----------------+----------------+
|       Jen       |     NULL       |
|      mahran     |     NULL       |
+-----------------+----------------+

Aby znaleźć rekordy, w których kolumna tutorial_count NIE MA wartości NULL, poniżej znajduje się zapytanie.

SELECT * FROM tcount_tbl WHERE tutorial_count IS NOT NULL;

Po wykonaniu zapytania otrzymasz następujące dane wyjściowe.

+-----------------+----------------+
|      author     | tutorial_count |
+-----------------+----------------+
|      Abdul S    |      20        |
|     Ajith kumar |       5        |
|     Bavya kanna |       8        |
|     John Poul   |      10        |
|   Sathya Murthi |       6        |
+-----------------+----------------+

HSQLDB - program JDBC

Oto program JDBC, który pobiera rekordy niezależnie od tabeli tcount_tbl, gdzie tutorial_ count ma wartość NULL, a tutorial_count NIE jest NULL. Zapisz następujący program wNullValues.java.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class NullValues {
   public static void main(String[] args) {
      Connection con = null;
      Statement stmt_is_null = null;
      Statement stmt_is_not_null = null;
      ResultSet result = null;
      try {
         Class.forName("org.hsqldb.jdbc.JDBCDriver");
         con = DriverManager.getConnection(
            "jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
         stmt_is_null = con.createStatement();
         stmt_is_not_null = con.createStatement();
         result = stmt_is_null.executeQuery(
            "SELECT * FROM tcount_tbl WHERE tutorial_count IS NULL;");
         System.out.println("Records where the tutorial_count is NULL");
         
         while(result.next()){
            System.out.println(result.getString("author")+" |
            "+result.getInt("tutorial_count"));
         }
         result = stmt_is_not_null.executeQuery(
            "SELECT * FROM tcount_tbl WHERE tutorial_count IS NOT NULL;");
         System.out.println("Records where the tutorial_count is NOT NULL");
         
         while(result.next()){
            System.out.println(result.getString("author")+" |
            "+result.getInt("tutorial_count"));
         }
      } catch (Exception e) {
         e.printStackTrace(System.out);
      }
   }
}

Skompiluj i uruchom powyższy program, używając następującego polecenia.

\>javac NullValues.java
\>Java NullValues

Po wykonaniu powyższego polecenia otrzymasz następujące dane wyjściowe.

Records where the tutorial_count is NULL
Jen         | 0
mahran      | 0

Records where the tutorial_count is NOT NULL
Abdul S        | 20
Ajith kumar    | 5
Bavya kanna    | 8
John Poul      | 10
Sathya Murthi  | 6