MySQL - NULL 值



MySQL NULL 值

MySQL 使用術語“NULL”來表示資料庫中不存在的資料值。這些值不同於空字串或零,並且在資料庫中不佔用任何儲存空間。它們用於指示資料欄位中值不存在或未知。

值可能為 NULL 的一些常見原因 -

  • 在資料輸入期間可能未提供該值。

  • 該值尚不清楚。

由於 NULL 值是不存在的,因此您不能使用標準比較運算子(如“=”、“<”或“>”)與它們進行比較。相反,您可以使用“IS NULL”、“IS NOT NULL”或“NOT NULL”運算子來檢查值是否為 NULL。

建立沒有 NULL 值的表

要建立沒有 NULL 值的表,您可以在定義列時使用“NOT NULL”關鍵字。如果將列指定為“NOT NULL”,則嘗試將 NULL 值插入該特定列時將發生錯誤。

語法

使用“NOT NULL”列建立表的基本語法如下 -

CREATE TABLE table_name (
   column1 datatype NOT NULL,
   column2 datatype NOT NULL,
   ...
   columnN datatype
);

其中,“NOT NULL”表示列必須始終包含定義資料型別的特定值。標記為“NOT NULL”的列不能接受 NULL 值。另一方面,您可以將 NULL 值插入沒有“NOT NULL”約束的列中。

示例

讓我們使用以下查詢建立一個名為“CUSTOMERS”的表 -

CREATE TABLE CUSTOMERS(
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25) ,
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

現在,讓我們在上面建立的表中插入一些記錄 -

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00),
(2, 'Khilan', 25, 'Delhi', 1500.00),
(3, 'Kaushik', 23, 'Kota', 2000.00),
(4, 'Chaitali', 25, 'Mumbai', 6500.00),
(5, 'Hardik', 27, 'Bhopal', 8500.00),
(6, 'Komal', 22, 'Hyderabad', NULL),
(7, 'Muffy', 24, 'Indore', NULL);

獲得的 CUSTOMERS 表如下 -

ID 姓名 年齡 地址 薪資
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad NULL
7 Muffy 24 Indore NULL

現在,要檢索不為 NULL 的記錄,您可以使用“IS NOT NULL”運算子,如下所示 -

SELECT ID, NAME, AGE, ADDRESS, SALARY 
FROM CUSTOMERS 
WHERE SALARY IS NOT NULL;

以下是上述程式碼的輸出 -

ID 姓名 年齡 地址 薪資
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00

要檢索為 NULL 的記錄,您可以使用“IS NULL”運算子,如下所示 -

SELECT ID, NAME, AGE, ADDRESS, SALARY 
FROM CUSTOMERS
WHERE SALARY IS NULL;

生成的輸出如下 -

ID 姓名 年齡 地址 薪資
6 Komal 22 Hyderabad NULL
7 Muffy 24 Indore NULL

更新表中的 NULL 值

要更新表中的 NULL 值,您可以使用“UPDATE”語句和“IS NULL”運算子。這將過濾包含 NULL 值的行,並使用“SET”關鍵字設定新值。

示例

在這裡,我們正在更新 CUSTOMERS 表的 SALARY 列中的 NULL 值,如下所示 -

UPDATE CUSTOMERS SET SALARY = 9000 WHERE SALARY IS NULL;

輸出

執行上述程式碼後,我們將獲得以下輸出 -

Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0

驗證

您可以使用以下查詢驗證表中的記錄是否已更新 -

SELECT * FROM CUSTOMERS;

顯示的輸出如下 -

ID 姓名 年齡 地址 薪資
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 9000.00
7 Muffy 24 Indore 9000.00

刪除具有 NULL 值的記錄

要從表中刪除具有 NULL 值的記錄,您可以使用“DELETE FROM”語句和“WHERE”子句中的“IS NULL”運算子。

示例

現在,我們正在刪除 SALARY 列中具有 NULL 值的記錄,如下所示 -

DELETE FROM CUSTOMERS WHERE SALARY IS NULL;

輸出

上述程式碼的輸出如下所示 -

Query OK, 2 rows affected (0.01 sec)

驗證

您可以使用 SELECT 語句驗證表中的記錄是否已刪除,如下所示 -

SELECT * FROM CUSTOMERS;

生成的表如下所示 -

ID 姓名 年齡 地址 薪資
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00

使用客戶端程式的 NULL 值

我們還可以使用客戶端程式執行 NULL 值。

語法

要透過 PHP 程式檢查列的值是否為空,我們需要使用mysqli函式query()執行“SELECT”語句,如下所示 -

$sql = "SELECT * from tcount_tbl WHERE tutorial_count IS NULL";
$mysqli->query($sql);

要透過 JavaScript 程式檢查列的值是否為空,我們需要使用mysql2庫的query()函式執行“SELECT”語句,如下所示 -

sql = "SELECT * from tcount_tbl WHERE tutorial_count IS NOT NULL";
con.query(sql);

要透過 Java 程式檢查列的值是否為空,我們需要使用JDBC函式executeQuery()執行“SELECT”語句,如下所示 -

String sql = "SELECT * FROM tcount_tbl WHERE tutorial_count IS NULL";
statement.executeQuery(sql);

要透過 Python 程式檢查列的值是否為空,我們需要使用MySQL Connector/Pythonexecute()函式執行“SELECT”語句,如下所示: -

null_values_query = "SELECT * FROM tcount_tbl WHERE tutorial_count IS NULL"
cursorObj.execute(null_values_query)

示例

以下是程式 -

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$db = 'TUTORIALS';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $db);
if ($mysqli->connect_errno) {
    printf("Connect failed: %s
", $mysqli->connect_error); exit(); } //printf('Connected successfully.
'); $sql = "SELECT * from tcount_tbl WHERE tutorial_count IS NULL"; if($result = $mysqli->query($sql)){ printf("Table record: \n"); while($row = mysqli_fetch_array($result)){ printf("Tutorial_author %s, Tutorial_count %d", $row['tutorial_author'], $row['tutorial_count']); printf("\n"); } } if($mysqli->error){ printf("Error message: ", $mysqli->error); } $mysqli->close();

輸出

獲得的輸出如下所示 -

Table record:
Tutorial_author mahnaz, Tutorial_count 0
Tutorial_author Jen, Tutorial_count 0
var mysql = require('mysql2');
var con = mysql.createConnection({
host:"localhost",
user:"root",
password:"password"
});
 //Connecting to MySQL
 con.connect(function(err) {
 if (err) throw err;
  //console.log("Connected successfully...!");
  //console.log("--------------------------");
 sql = "USE TUTORIALS";
 con.query(sql);
 sql = "SELECT * from tcount_tbl WHERE tutorial_count IS NOT NULL";
 if(con.query(sql)){
    console.log("Select query executed successfully....!");
 }
 else{
    console.log("Error");
 }
 console.log("Table records: ");
 con.query(sql, function(err, result){
 if (err) throw err;
 console.log(result);
 });
});                     

輸出

獲得的輸出如下所示 -

Select query executed successfully....!
Table records: 
[
  { tutorial_author: 'mahran', tutorial_count: 20 },
  { tutorial_author: 'Gill', tutorial_count: 20 }
]
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) {
      String url = "jdbc:mysql://:3306/TUTORIALS";
      String user = "root";
      String password = "password";
      ResultSet rs;
      try {
         Class.forName("com.mysql.cj.jdbc.Driver");
            Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            //System.out.println("Database connected successfully...!");
            String sql = " SELECT * FROM tcount_tbl WHERE tutorial_count = NULL";
            rs = st.executeQuery(sql);
            System.out.println("Table records(tutorial_count = null): ");
            while(rs.next()) {
               String tutorial_author = rs.getString("tutorial_author");
               String tutorial_count = rs.getString("tutorial_count");
               System.out.println("Author: " + tutorial_author + ", Tutorial_count: " + tutorial_count);
            }
            String sql1 = "SELECT * FROM tcount_tbl WHERE tutorial_count IS NULL";
            rs = st.executeQuery(sql1);
            System.out.println("Table records(tutorial_count is null): ");
            while(rs.next()) {
               String tutorial_author = rs.getString("tutorial_author");
               String tutorial_count = rs.getString("tutorial_count");
               System.out.println("Author: " + tutorial_author + ", Tutorial_count: " + tutorial_count);
            }
      }catch(Exception e) {
         e.printStackTrace();
      }
   }
}      

輸出

獲得的輸出如下所示 -

This will generate the following output - 
Table records(tutorial_count = null): 
Table records(tutorial_count is null): 
Author: mahnaz, Tutorial_count: null
Author: Jen, Tutorial_count: null
import mysql.connector
#establishing the connection
connection = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='tut'
)
cursorObj = connection.cursor()
null_values_query = f"""
SELECT * FROM tcount_tbl 
WHERE tutorial_count IS NULL
"""
cursorObj.execute(null_values_query)
# Fetching all the rows that meet the criteria
filtered_rows = cursorObj.fetchall()
for row in filtered_rows:
    print(row)
cursorObj.close()
connection.close() 

輸出

獲得的輸出如下所示 -

('mahnaz', None)
('Jen', None)
廣告