Bài viết này sẽ hiển thị các hàm và toán tử để xử lý các giá trị SQL NULL.

Bạn đang xem : chọn các hàng có giá trị rỗng trong sql

Bài viết này sẽ giải thích những vấn đề nào có thể xảy ra khi làm việc với các giá trị SQL NULL và nó cũng đưa ra một số
kiến nghị giải pháp để khắc phục những vấn đề này.

Giá trị SQL NULL là gì?

Về mặt mô hình cơ sở dữ liệu quan hệ, giá trị NULL chỉ ra một giá trị không xác định. Nếu chúng ta mở rộng lý thuyết này
giải thích, giá trị NULL trỏ đến một giá trị không xác định nhưng giá trị không xác định này không tương đương với một giá trị 0 hoặc
một trường có chứa khoảng trắng. Do cấu trúc này của các giá trị NULL, không thể sử dụng
toán tử so sánh (=, & lt ;, & gt; và & lt; & gt;) trong truy vấn. Trên thực tế, trong các Tiêu chuẩn SQL sử dụng
mệnh đề WHERE như bên dưới sẽ dẫn đến trả về các tập kết quả trống.

1

2

3

CHỌN

column_name1

,

column_name2

,

column_name3

,

.

< p class = "crayon-sy">.

.

,

column_nameN

TỪ

table_name

WHERE

column_nameN

=

KHÔNG ĐỦ

Vì lý do này, làm việc với các giá trị NULL có thể hơi phức tạp và được yêu cầu sử dụng một số cài đặt sẵn
các hàm được tùy chỉnh để xử lý các giá trị NULL.

Tình trạng KHÔNG ĐẦY ĐỦ

Điều kiện IS NULL được sử dụng để trả về các hàng chứa giá trị NULL trong một cột và
cú pháp như sau:

1

2

3

CHỌN

column_name1

,

column_name2

,

column_name3

,

.

< p class = "crayon-sy">.

.

,

column_nameN

TỪ

table_name

WHERE

column_nameN

KHÔNG ĐỦ

Truy vấn sau sẽ truy xuất các hàng từ bảng Người có giá trị cột Tên trung gian bằng NULL.

1

2

CHỌN

FirstName

,

LastName

,

MiddleName

TỪ

Người

.

Người

WHERE

MiddleName

KHÔNG ĐỦ

Điều kiện KHÔNG ĐẦY ĐỦ được sử dụng để trả về các hàng có chứa giá trị không phải NULL trong một cột. Các
truy vấn sau sẽ truy xuất các hàng từ bảng Người Tên trung gian
giá trị cột không bằng giá trị NULL.

1

2

CHỌN

FirstName

,

LastName

,

MiddleName

TỪ

Người

.

Người

WHERE

MiddleName

KHÔNG PHẢI

KHÔNG ĐỦ

Xử lý các giá trị SQL NULL bằng các hàm

Như chúng tôi đã nêu trước đó, SQL Server cung cấp một số chức năng giúp xử lý các giá trị NULL.

ISNULL (): Hàm ISNULL () nhận hai tham số và nó cho phép chúng tôi thay thế các giá trị NULL bằng một
giá trị xác định.

1

ISNULL

(< / p>

biểu thức

,

thay thế

)

Tham số biểu thức cho biết biểu thức mà chúng tôi muốn kiểm tra các giá trị NULL.

Tham số thay thế cho biết giá trị mà chúng tôi muốn thay thế các giá trị NULL.

Ví dụ: trong truy vấn sau, hàm ISNULL () thay thế các giá trị NULL trong hàng bằng
giá trị được chỉ định.

1

2

CHỌN

Tiêu đề

,

ISNULL

(

Tiêu đề

,

‘NewTitle’

)

AS < / p>

NewTitle

,

FirstName

,

LastName

TỪ

Người

.

Người

WHERE

BusinessEntityID

< / p>

=

74

COALESCE (): Hàm COALESCE () nhận các tham số không giới hạn và trả về
biểu thức khác rỗng đầu tiên trong danh sách.

1

THAN

(< / p>

val1

,

val2

,

.

.

.

.

,

val_n

)

Trong truy vấn sau, hàm COALESCE () trả về SQLShack.com bởi vì
nó là giá trị không rỗng đầu tiên trong danh sách.

1

CHỌN

THAN

(

NULL

,

NULL

,

‘SQLShack.com’

,

KHÔNG ĐỦ

,

‘Những bài báo hay nhất’

)

Trong ví dụ thứ hai này, hàm COALESCE () trả về biểu thức khác rỗng đầu tiên trong danh sách các cột.

1

2

3

CHỌN

BusinessEntityID

,

FirstName

,

LastName

,

Hậu tố

,

Tiêu đề

,

THAN

(

Tiêu đề

,

Hậu tố

,

FirstName

)

< p class = "crayon-h">

AS

NewValue

TỪ

< p class = "crayon-h">

Người

.

Người

WHERE

BusinessEntityID

IN

(

5

,

74

)

Làm cách nào để đếm các giá trị SQL NULL trong một cột?

Hàm COUNT () được sử dụng để lấy tổng số hàng trong tập kết quả. Khi chúng tôi sử dụng
hàm này với dấu sao nó đếm tất cả các hàng từ bảng bất kể giá trị NULL. Chẳng hạn như, khi chúng ta đếm
bảng Người thông qua truy vấn sau, nó sẽ trả về 19972.

Xem Thêm  Tìm hiểu các thuộc tính HTML với các ví dụ - các thuộc tính trong html là gì

1

CHỌN

COUNT

(

*

)

NHƯ

[

Tổng số

< p class = "crayon-i"> Số

trong số

Hàng

]

TỪ

Người

.

Người

Mặt khác, khi chúng ta sử dụng hàm COUNT () với tên cột, nó chỉ đếm các giá trị không phải NULL trong đó
cột.

1

CHỌN

COUNT

(

Tiêu đề

)

NHƯ

[

Tổng số

< p class = "crayon-i"> Số

trong số

Tiêu đề

]

TỪ

Người

.

Người

Để đếm giá trị NULL của một cột, chúng ta có thể sử dụng truy vấn sau.

1

2

3

4

CHỌN

SUM

(

TRƯỜNG HỢP

KHI NÀO

Tiêu đề

null

THÌ

1

ELSE

0

HẾT

)

NHƯ

[

Số

Của

Không có

Giá trị

]

,

COUNT

(

Tiêu đề

)

AS

[

Số

Trong số

Không

Không

Giá trị

]

TỪ

Người

.

Người

Hàm AVG () và các giá trị SQL NULL

AVG () được sử dụng để tính toán giá trị trung bình của một tập kết quả, nghĩa là, nó tính tổng tất cả các giá trị trong tập kết quả đó và chia tổng đó cho số hàng. Một điểm cần lưu ý về tính toán hàm AVG () là NULL
giá trị sẽ không được bao gồm trong tính toán trung bình.

1

2

3

4

5

6

7

8

9

10

TẠO

BẢNG

DailyFee

(

WeekDayName < / p>

VARCHAR

(

50

)

,

Phí

TIỀN

DEFAULT

NULL

)

CHÈN

VÀO

DailyFee

GIÁ TRỊ

(

‘Thứ Hai’

,

20

)

,

(

‘Thứ Ba’

,

60

)

,

(

‘Thứ Tư y ‘

,

KHÔNG ĐỦ

)

,

(

‘Thurusday’

,

40

)

,

(

‘Friday’

,

80

)

Khi chúng tôi tính phí trung bình hàng tuần, phí thứ Tư không được bao gồm trong tính toán.

1

2

3

CHỌN

*

TỪ

DailyFee

CHỌN

AVG

(

Phí < / p>

)

AS

AverageFee

FROM

DailyFee

Nếu chúng ta muốn bao gồm các giá trị NULL trong phép tính, chúng ta có thể sử dụng hàm COALESCE.

1

2

3

CHỌN

*

TỪ

DailyFee

CHỌN

AVG

(

THAN < / p>

(

Phí

,

0

)

)

AS

AverageFee

TỪ

Phí hàng ngày

Sự khác biệt giữa ‘IS NULL’ và ‘= NULL’ là gì?

Toán tử bằng (=) được sử dụng để so sánh hai giá trị biểu thức và nếu các giá trị được so sánh bằng nhau thì so sánh
kết quả sẽ đúng. Mặt khác, khi chúng ta cố gắng sử dụng một toán tử bằng để tìm các hàng chứa giá trị rỗng
giá trị, tập kết quả sẽ không trả về gì. Ví dụ: truy vấn sau sẽ không trả về bất kỳ hàng nào.

1

2

CHỌN

FirstName

,

LastName

,

MiddleName

TỪ

Người

.

Người

WHERE

MiddleName

=

KHÔNG ĐỦ

Lý do cho vấn đề này có liên quan đến cấu trúc của SQL NULL vì nó không chỉ định một giá trị rõ ràng, do đó so sánh một giá trị không xác định với một giá trị chính xác kết quả sẽ là sai.

Theo tiêu chuẩn ANSI (Viện Tiêu chuẩn Quốc gia Hoa Kỳ) , bất kỳ sự so sánh nào
hoặc phép tính được thực hiện với giá trị NULL kết quả phải là NULL như chúng tôi vừa nêu ở trên. Tuy nhiên, chúng tôi có thể tắt
mẫu hành vi này bằng cách sử dụng lệnh SET ANSI_NULLS . Theo mặc định, trạng thái tùy chọn này là BẬT nhưng
chúng tôi có thể tắt tùy chọn này trong cấp phiên để các toán tử so sánh bằng (=) và không bằng (& lt; & gt;)
không áp dụng cho tiêu chuẩn ANSI-SQL.

1

2

3

4

BỘ

ANSI_NULLS

TẮT

CHỌN

FirstName

,

LastName

,

MiddleName

TỪ

Người

.

Người

< / p>

WHERE

MiddleName

= < / p>

KHÔNG ĐỦ

Như đã thấy ở trên, câu lệnh select trả về các hàng có giá trị rỗng trong cột MiddleName
khi chúng tôi vô hiệu hóa tùy chọn ANSI_NULLS

Chỉ mục không phân cụm và giá trị SQL NULL

Các chỉ mục có thể giúp cải thiện hiệu suất của các truy vấn nhưng tại thời điểm này, một câu hỏi có thể xuất hiện trong
tâm trí.

“Chúng tôi có thể sử dụng các chỉ mục không phân cụm cho các cột có thể làm trống trong SQL Server và các chỉ mục này có thể cải thiện hiệu suất các truy vấn của chúng tôi không?”

Xem Thêm  Phông chữ đậm trong HTML - Độ đậm phông chữ cho các chữ cái - mã html cho văn bản in đậm

Hãy thử tìm ra câu trả lời cho điều này bằng một ví dụ.

Khi chúng tôi thực hiện truy vấn sau, trình tối ưu hóa truy vấn đề xuất một chỉ mục không phân cụm và nó tuyên bố rằng điều này
chỉ mục cải thiện đáng kể hiệu suất của truy vấn.

1

2

CHỌN

FirstName

,

LastName

,

MiddleName

TỪ

Người

.

Người

WHERE

MiddleName

KHÔNG ĐỦ

Như đã thấy trong kế hoạch thực thi, trình tối ưu hóa đã quyết định sử dụng toán tử quét chỉ mục không phân cụm và nó đọc
107 trang dữ liệu từ bộ nhớ cache dữ liệu. Bây giờ, chúng tôi sẽ áp dụng gợi ý chỉ mục còn thiếu.

1

2

3

4

5

6

SỬ DỤNG

[

AdventureWorks2017

]

ĐI

TẠO

KHÔNG ĐƯỢC ĐIỀU CHỈNH

CHỈ SỐ

< / p>

IX_001_MiddleName

BẬT

[

Người

]

.

[

< p class = "crayon-i"> Người

]

(

[

MiddleName

]

)

BAO GỒM

(

[

FirstName

]

,

[

< p class = "crayon-i"> LastName

]

)

ĐI

Trong bước này, chúng tôi sẽ thực hiện lại cùng một truy vấn và phân tích lại kế hoạch thực thi và thống kê I / O.

1

2

3

BỘ

THỐNG KÊ

IO

BẬT

CHỌN

Tên đầu tiên

,

LastName

,

MiddleName

TỪ

Người

.

Người

WHERE

MiddleName

KHÔNG ĐỦ

Không nghi ngờ gì nữa, chỉ mục đã tạo được sử dụng bởi công cụ cơ sở dữ liệu và nó tăng hiệu suất của truy vấn vì số lần đọc logic thấp hơn số lần đọc trước đó.

Chi tiết toán tử tìm kiếm chỉ mục cho chúng ta thấy không có bất kỳ sự khác biệt nào giữa Số lượng hàng thực tế Số lượng hàng ước tính .

Tình huống này cho thấy rằng trình tối ưu hóa truy vấn tìm thấy thông tin chính xác về số lượng hàng NULL được lưu trữ trong
cột MiddleName . Rất có thể, câu hỏi sau sẽ hiện lên trong đầu bạn.

“Làm cách nào để trình tối ưu hóa truy vấn SQL Server biết có bao nhiêu hàng NULL được lưu trữ cho một cột trong bảng?”

Về cơ bản, thống kê lưu trữ phân phối dữ liệu về các bảng và trình tối ưu hóa truy vấn sử dụng thông tin này trong quá trình tạo kế hoạch truy vấn. Khi chúng ta tạo một chỉ mục, thông tin phân phối dữ liệu này cũng được lưu trữ cho các cột có giá trị NULL. Vì vậy, trình tối ưu hóa ước tính lượng bộ nhớ và các tài nguyên khác được yêu cầu cho một truy vấn

Lệnh DBCC SHOW_STATISTICS cung cấp cho chúng tôi thông tin chi tiết về thống kê và dữ liệu
các bản phân phối. Thông qua truy vấn sau, chúng tôi sẽ trả lại tất cả chi tiết về thống kê chỉ mục được sử dụng cho
Chỉ mục IX_001_MiddleName .

1

DBCC

SHOW_STATISTICS

(

‘Person.Person’

,

‘IX_001_MiddleName’

)

Như chúng ta có thể thấy, có 8499 số giá trị NULL được lưu trữ trong MiddleName
và thông tin này được sử dụng bởi trình tối ưu hóa truy vấn.

Trong một số trường hợp, hàm ISNULL được sử dụng với điều kiện where nhưng phương pháp sử dụng này có thể dẫn đến sử dụng các chỉ mục
không hiệu quả. Mục đích của truy vấn sau là tìm nạp các hàng của cột MiddleName có giá trị bằng nhau
thành A hoặc NULL. Tuy nhiên, truy vấn này không thể sử dụng chỉ mục không phân cụm đã tạo nên nó sẽ đọc tất cả các trang chỉ mục và
sau đó trả về các hàng thích hợp.

1

CHỌN

FirstName

,

LastName

,

MiddleName

TỪ

Người

.

Người

WHERE

ISNULL

(

MiddleName

,

‘A’

)

=

‘A’

Để loại bỏ tình huống này, chúng tôi có thể thực hiện một chút sửa đổi mã trong truy vấn để trình tối ưu hóa truy vấn có thể sử dụng
các chỉ mục hiệu quả hơn. Truy vấn sau trả về một số hàng giống như truy vấn trước đó nhưng nó sử dụng các chỉ mục
hiệu quả hơn.

Xem Thêm  tipped pcd inserts with brazed pcd cutting edges for hard turning of aluminum alloy - jsx la gi

1

2

CHỌN

FirstName

,

LastName

,

MiddleName

TỪ

Người

.

Người

WHERE

(

MiddleName

NULL

HOẶC

MiddleName

=

‘A’

)

Kết luận

Trong bài viết này, chúng ta đã học cách làm việc với các giá trị SQL NULL và đã tìm hiểu tác động hiệu suất của nó đối với các truy vấn.


Xem thêm những thông tin liên quan đến chủ đề chọn các hàng có giá trị null trong sql

SQL Null or Empty – How to Check for Null or Empty Column in SQL Server – Quick Tips Ep42

  • Tác giả: Joey Blue
  • Ngày đăng: 2012-11-05
  • Đánh giá: 4 ⭐ ( 6923 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: http://www.sqltrainingonline.com SQL Null or Empty – How to Check for Null or Empty Column in SQL Server – SQL Training Online

    You can download the sample table script at http://www.sqltrainingonline.com/how-to-filter-for-sql-null-or-empty-string/.

    In this video, I show you how to filter for a SQL null or empty string. It can be difficult to filter a null because you can’t simply compare with an equal sign. You have to use a special IS NULL clause to make the filter work.

    I also show you how to combine both the SQL Null and Empty String together in a special trick with the isnull SQL Server function. I use SQL Server to demonstrate the technique.

    If you enjoy the video, please give it a like, comment, or subscribe to my channel.

    READ THE ORIGINAL ARTICLE WITH SQL SCRIPTS HERE
    http://www.sqltrainingonline.com/

    YOUTUBE NEWS UPDATES
    http://www.youtube.com/user/sqltrainingonline

    VISIT SQLTRAININGONLINE.COM FOR MORE VIDEO NEWS & TIPS
    http://www.sqltrainingonline.com

    SUBSCRIBE FOR OTHER SQL TIPS AND NEWS!
    http://www.youtube.com/subscription_center?add_user=sqltrainingonline

    SUBSCRIBE TO OUR EMAIL LIST!
    http://www.sqltrainingonline.com

    LET’S CONNECT!
    Facebook: http://facebook.com/SQLTrainingOnline
    Twitter: http://twitter.com/sql_by_joey
    Linkedin: http://linkedin.com/in/joeyblue
    SQLTrainingOnline: http://www.sqltrainingonline.com

Các kiểu dữ liệu trong SQL và những thông tin cần biết

  • Tác giả: bizflycloud.vn
  • Đánh giá: 3 ⭐ ( 6310 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: SQL Server đang dần trở nên ưa chuộng bởi người dùng trong công nghệ hiện nay. Vì vậy hãy cùng Bizfly Cloud tìm hiểu về các kiểu dữ liệu trong SQL qua bài viết này nhé!

[MySQL 07] Sử dụng lệnh SELECT trong MySQL

  • Tác giả: www.codelean.vn
  • Đánh giá: 4 ⭐ ( 3021 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: CodeLean.vn là nơi chia sẻ kiến thức của những người học, làm và dạy trong lĩnh vực công nghệ thông tin.

Giá trị NULL trong SQL

  • Tác giả: vietjack.com
  • Đánh giá: 3 ⭐ ( 2767 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Giá trị NULL trong SQL – Học SQL cơ bản nâng cao. Học SQL trực tuyến theo các bước từ Khái niệm về database, Cú pháp SQL, Truy vấn SELECT, Truy vấn INSERT, Lệnh DELETE, Truy vấn UPDATE, Ràng buộc (Constraint), Truy vấn DROP, Lệnh TRUNCATE, Từ khóa DISTINCT, Mệnh đề ORDER BY, Mệnh đề GROUP BY, Mệnh đề WHERE, Sử dụng Join, Sử dụng View, Sử dụng Sequence, Transaction, Hàm xử lý, Bảng tạm, Toán tử.

SQL: Chỉ chọn các cột có giá trị NULL

  • Tác giả: vi.gupgallery.com
  • Đánh giá: 4 ⭐ ( 2135 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Làm cách nào để chọn tất cả các cột trong bảng chỉ chứa giá trị NULL cho tất cả các hàng? Tôi đang sử dụng MS SQL Server 2005. Tôi đang cố gắng tìm hiểu những cột nào không được sử dụng trong bảng để tôi có thể …

Lập Trình Từ Đầu

  • Tác giả: laptrinhtudau.com
  • Đánh giá: 5 ⭐ ( 8671 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Từ khóa trong SQL – Lập Trình Từ Đầu 3 SQL References

Chọn các hàng có cùng id nhưng null và một số giá trị khác trong cột khác cho id đó

  • Tác giả: qastack.vn
  • Đánh giá: 3 ⭐ ( 4300 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Bạn sẽ có thể sử dụng kết hợp có điều kiện để có được tên người…

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php