2012-12-27 38 views
8

Đây là bảng NEWSPAPER của tôi.Thứ tự theo mệnh đề hoạt động như thế nào nếu hai giá trị bằng nhau?

National News A 1 
    Sports   D 1 
    Editorials  A 12 
    Business  E 1 
    Weather   C 2 
    Television  B 7 
    Births   F 7 
    Classified  F 8 
    Modern Life  B 1 
    Comics   C 4 
    Movies   B 4 
    Bridge   B 2 
    Obituaries  F 6 
    Doctor Is In F 6 

Khi tôi chạy truy vấn này

select feature,section,page from NEWSPAPER 
where section = 'F' 
order by page; 

Nó cung cấp cho sản lượng này

Doctor Is In F 6 
Obituaries  F 6 
Births   F 7 
Classified  F 8 

Nhưng trong Oracle 10g Complete Reference Kevin Loney của đầu ra là như thế này

Obituaries  F 6 
Doctor Is In F 6 
Births   F 7 
Classified  F 8 

Xin hãy giúp tôi d nó xảy ra như thế nào?

+3

Chúng không phải là cùng một đầu ra? Ở bất kỳ mức nào, thứ tự cho kết quả có cùng giá trị là không xác định và có thể quay lại dựa trên cách chúng được lưu trữ trên đĩa. – mellamokb

+0

Đầu ra là như nhau? – Jake1164

+0

Oh xin lỗi đã không thể sao chép đầu ra từ sách đúng cách. Đã thêm đầu ra từ sách chính xác. –

Trả lời

7

Trong cơ sở dữ liệu quan hệ, bàn là bộ và có thứ tự. Mệnh đề order by được sử dụng chủ yếu cho mục đích đầu ra (và một vài trường hợp khác như truy vấn con chứa rownum).

Đây là nơi tốt để bắt đầu. Chuẩn SQL không xác định những gì phải xảy ra khi các phím trên order by giống nhau. Và đây là lý do chính đáng. Các kỹ thuật khác nhau có thể được sử dụng để phân loại. Một số có thể ổn định (giữ nguyên thứ tự ban đầu). Một số phương pháp có thể không.

Tập trung vào việc các hàng giống nhau có nằm trong tập hợp không, không phải thứ tự của chúng. Nhân tiện, tôi sẽ xem đây là một ví dụ không may. Cuốn sách không nên có các loại mơ hồ trong các ví dụ của nó.

+0

Ý của bạn là gì? "Và đây là lý do chính đáng"? –

+2

@Abhishekkumar. . . Ý tôi là tiêu chuẩn cho phép các nhà cung cấp cơ sở dữ liệu mất nhiều thời gian về cách thực hiện những điều nhất định, và đây là một điều tốt. –

+0

Để mở rộng, đặt hàng có thể được xử lý chuyên sâu: không chỉ định thứ tự mặc định để các nhà cung cấp miễn phí tối ưu hóa các truy vấn không có mệnh đề ORDER BY nhưng chúng thấy phù hợp. – taswyn

7

Nếu bạn cần đáng tin cậy, có thể sao chép đặt hàng xảy ra khi hai giá trị trong cột đầu tiên của khoảncủa bạn giống nhau, bạn nên luôn cung cấp cột thứ hai khác để đặt hàng. Mặc dù bạn có thể giả định rằng chúng sẽ tự sắp xếp dựa trên thứ tự được nhập (hầu như luôn là trường hợp của kiến ​​thức của tôi, nhưng hãy lưu ý rằng tiêu chuẩn SQL không chỉ định bất kỳ thứ tự mặc định nào) hoặc chỉ mục, bạn sẽ không bao giờ nên (trừ khi nó được ghi cụ thể như vậy cho công cụ bạn đang sử dụng - và thậm chí sau đó tôi không bao giờ dựa vào điều đó).

truy vấn của bạn, nếu bạn muốn sắp xếp theo bảng chữ cái bởi tính năng bên trong mỗi trang phải nộp là:

select feature,section,page from NEWSPAPER 
where section = 'F' 
order by page, feature;
+0

@ taswyn- đây chính là ví dụ tiếp theo nói. Nhưng tôi đã tự hỏi tại sao tôi có đầu ra khác so với cuốn sách? Muốn biết về nếu có bất kỳ cách mặc định để xử lý. –

+0

Thậm chí nếu bạn coi đơn đặt hàng được nhập là thứ tự mặc định, bạn nên dựa vào logic được lập trình của riêng bạn thay vì dùng một phím tắt có thể dẫn đến các tình huống bạn không thấy. Chuẩn SQL không chỉ định thứ tự mặc định. Theo hiểu biết của tôi, Oracle không ghi lại một thứ tự mặc định, có nghĩa là bất cứ điều gì bạn dựa vào bởi vì bạn dường như có được kết quả có thể lặp lại bây giờ có thể thay đổi. Bất kỳ kết quả nào bạn muốn xem một cách đáng tin cậy phải luôn được biểu diễn bằng logic chương trình của bạn. Đừng đưa ra các giả định về bất kỳ điều gì không được xác định cụ thể bởi các công cụ hoặc mã của bạn. – taswyn

+0

bạn có ý tưởng nào về cột nào sẽ nhận được tùy chọn cao hơn trong khi đặt hàng tập hợp kết quả hay không.Tôi đang làm việc trên một số thứ hạng dựa trên một cột lưu trữ điểm số, nhưng vấn đề là nhiều hàng có cùng giá trị điểm và khi tôi tìm nạp chúng, chúng theo thứ tự ngẫu nhiên. nếu tôi sẽ sử dụng khóa chính của kiểu int làm đối số sắp xếp thứ hai, nó sẽ luôn cho tôi kết quả theo cùng một thứ tự. – sumit

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