2009-09-05 27 views
16

Theo MSDN BOL (Sách Online) mô tả trên SOME | ANY (Transact-SQL),TSQL - MỘT SỐ | BẤT CỨ tại sao chúng lại giống với những cái tên khác nhau?

some và any là tương đương.

Bạn nên sử dụng SOME | BẤT K to để làm cho một truy vấn dễ đọc hơn.

Nhưng là lý do chỉ tại sao có 2 từ khóa trong TSQL nơi họ phục vụ cho chính xác mục đích giống nhau không?

Có lý do lịch sử nào khiến chúng có cùng chức năng không?

Trả lời

11

Từ số ANSI-92 SQL Standard (tìm kiếm "SOME"). Also here, text

<some> ::= SOME | ANY 

tôi nghi ngờ lý do là ngôn ngữ SQL đến từ đầu những năm 1970, nhưng đã không có tiêu chuẩn cho đến năm 1986. Các tiêu chuẩn đã có thể lấy yếu tố của phương ngữ SQL hiện có, vì vậy chúng tôi có MỘT SỐ này/BẤT CỨ bất thường.

bài viết blog này bởi Brad Schulz giải thích một số khác biệt: "ALL, ANY, and SOME: The Three Stooges"

+4

@gbn Tôi thực sự rất thích "TẤT CẢ, BẤT CỨ, và MỘT SỐ: Ba bài viết". Cảm ơn. – Sung

+0

'ANSI-92 SQL Standard' liên kết đã chết – Ako

5

MỘT SỐ VÀ BẤT K are là tương đương. BẤT K is là cú pháp ANSI. Tại sao MỘT SỐ được giới thiệu, tôi không biết. Có thể là do khả năng đọc, nhưng cả hai câu tiếp theo đều dễ hiểu.

WHERE 5000 < ANY(SELECT Price FROM dbo.items) 
WHERE 5000 < SOME(SELECT Price FROM dbo.items) 

Mặc dù, SQL server trong cả hai trường hợp sẽ thực hiện:

WHERE EXISTS(SELECT * FROM dbo.items WHERE price>5000) 

mà cũng rất dễ hiểu.

+0

Xin chào, Niikola: "Tại sao MỘT SỐ được giới thiệu, tôi không biết". và đó là loại điểm của câu hỏi này. – Sung

+0

Tôi đã cố gắng tìm lý do để các nhà điều hành này tồn tại. Như ví dụ của bạn, tôi tìm thấy truy vấn dưới đây dễ đọc hơn. – regeter

2

MỘT SỐ VÀ BẤT K are tương đương với chuẩn SQL-92, vì vậy trong khi nó không trả lời câu hỏi của bạn để chỉ ra điều đó, nó chỉ ra rằng lịch sử quay trở lại một chặng đường dài.

2

Hãy nhớ rằng một số sản phẩm cơ sở dữ liệu đã được khoảng gần ba thập kỷ. Các nhà cung cấp như Oracle, IBM và Microsoft luôn bao gồm các tính năng trong các sản phẩm của họ sau đó đã được tích hợp vào tiêu chuẩn ANSI.

Đôi khi các tính năng này đã được phát triển bởi một số nhà cung cấp độc lập, do đó tiêu chuẩn hoặc nhà cung cấp phải hỗ trợ từ đồng nghĩa cho từ khóa. Ví dụ: Oracle có chiều dài SELECT DISTINCT trước khi ANSI chỉ định SELECT UNIQUE. Oracle hỗ trợ cả hai cách sử dụng.

Tôi không biết liệu một trường hợp tương tự có áp dụng trong trường hợp MỘT SỐ và BẤT K.. Nhưng có vẻ như vậy.

3

"Có lý do lịch sử nào khiến chúng có cùng chức năng không?"

Tôi sẽ trả lời câu hỏi thực tế ... Lúc đầu nó chỉ là TẤT CẢ và BẤT K..

TẤT CẢ là một trình định lượng phổ dụng, trong khi BẤT K was được cho là luôn luôn là một định lượng tồn tại. Tuy nhiên, bằng tiếng Anh, BẤT CỨ thường được sử dụng như một định lượng phổ quát."Tôi có thể đánh bại BẤT CỨ của bạn" không phải là đồng nghĩa của "Tôi có thể đánh bại MỘT SỐ bạn". Đó là trong thực tế đồng nghĩa của "Tôi có thể đánh bại TẤT CẢ các bạn".

Với BẤT KY khó hiểu, MỘT SỐ đã được giới thiệu là một từ đồng nghĩa đáng tin cậy hơn đối với BẤT CỨ với việc chấp nhận tiêu chuẩn SQL-92. BẤT CỨ được cho là được giữ lại trong một thời gian chỉ để tương thích ngược với các phiên bản sản phẩm trước đó. Nhưng hôm nay chúng ta vẫn có nó.

+0

Ngữ nghĩa, nhưng tôi muốn nói rằng trong ví dụ "bất kỳ" của bạn vẫn còn khá khác biệt với "tất cả": "** bất kỳ ** nào trong số các bạn" sẽ rất có thể có nghĩa là " bất kỳ [một] bạn ** (tại một thời điểm) ** ", _not_" tất cả các bạn ** (cùng một lúc) ** ". Upvoted anyway bởi vì tôi đồng ý có thể có sự mơ hồ, đặc biệt là cho bất cứ ai không phân tích quá mức như tôi. :) – criptych

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