2015-07-22 17 views
7

Tôi đã xem xét điều này khi sửa đổi Chế độ xem của người khác trong SQL Server.Có sự khác biệt nào giữa NOT (ColumnName LIKE '% a%') và ColumnName NOT LIKE '% a%'

Có bất kỳ sự khác nhau giữa:

NOT (ColumnName LIKE '%a%') 

ColumnName NOT LIKE '%a%' 

Có bất kỳ sự khác biệt hiệu suất hoặc bất kỳ sự khác biệt trong kết quả? Hay đây chỉ là một cách lạ lẫm (lạ với tôi) mà SQL Server làm thay đổi mã của bạn khi bạn sử dụng Trình tạo truy vấn hoặc Trình tạo khung nhìn?

+1

@tinka: tại sao chính xác?) – potashin

Trả lời

9

Không, không có sự khác biệt.

Cả hai cú pháp đều hợp lý - not like là cú pháp rõ ràng hơn, nhưng không giống như bạn chỉ có thể vô hiệu hóa not (toán tử boolean đơn giản đơn giản) trong các trường hợp như thế này.

Hầu hết thời gian, biểu mẫu truy vấn không thực sự quan trọng đối với hiệu suất - bất kỳ lúc nào, có thể bạn đang xem một lỗi nhỏ trong trình hoạch định thực thi. Trước khi truy vấn được thực hiện ở bất kỳ đâu, nó được phân tách và xây dựng lại thành các bước thực tế cần thiết để có được kết quả - bất cứ khi nào bạn tự hỏi sẽ thấy.

Nếu bạn là con người, có ít lý do để không sử dụng not like - bạn chủ yếu sử dụng cách khác như một phần của việc tạo mã tự động (phủ nhận kết quả của một biểu thức khác), chứ không phải bằng mã người. Trừ khi bạn đang xây dựng truy vấn đó bằng cách tát các chuỗi lại với nhau, tất nhiên - sau đó nó có thể có ý nghĩa ngay cả khi bạn tự viết nó.

Ồ, và về phong cách, lưu ý rằng như tôi đã nói, not là một toán tử, không phải là cuộc gọi hàm. Vì vậy, các cách thích hợp để sử dụng dấu ngoặc sẽ là một trong hai

not ColumnName like '%a%' 

hoặc tốt hơn,

(not ColumnName like '%a%') 

hoặc, nếu bạn đang điên (hoặc một lần nữa, tạo mã):

(not (ColumnName LIKE '%a%')) 

Sử dụng cú pháp gọi hàm có thể gây nhầm lẫn cho một số - và ưu tiên toán tử trong T-SQL không chính xác trực quan (nó cố gắng quá khó để dễ sử dụng và tránh các dấu ngoặc đơn, đôi khi đôi khi khó hiểu). Hầu hết các trình tạo SQL sẽ có xu hướng thận trọng và sử dụng nhiều dấu ngoặc đơn hơn mức cần thiết, thường dẫn đến khả năng đọc tốt hơn (và chính xác :)), trong khi không có tác động hiệu suất có ý nghĩa hay bất kỳ thứ gì.

+0

Cảm ơn bạn đã trả lời rộng rãi! – ASindleMouat

Các vấn đề liên quan