Sự khác biệt giữa Chọn duy nhất và Chọn riêng biệt


145

Tôi nghĩ rằng đây là đồng bộ, nhưng tôi đã viết như sau trong Microsoft SQL:

Select Unique col from 
     (select col from table1 union select col from table2) alias

Và nó đã thất bại. Thay đổi nó thành

Select Distinct col from 
     (select col from table1 union select col from table2) alias

Đã sửa nó. Ai đó có thể giải thích?

Câu trả lời:


169

SELECT UNIQUElà cú pháp cũ được hỗ trợ bởi hương vị SQL của Oracle. Nó đồng nghĩa với SELECT DISTINCT.

Sử dụng SELECT DISTINCTvì đây là SQL tiêu chuẩn và SELECT UNIQUEkhông chuẩn và trong các nhãn hiệu cơ sở dữ liệu khác ngoài Oracle, SELECT UNIQUEcó thể không được công nhận.


113

Unique là một từ khóa được sử dụng trong chỉ thị Tạo Bảng () để biểu thị rằng một trường sẽ chứa dữ liệu duy nhất, thường được sử dụng cho các khóa tự nhiên, khóa ngoại, v.v.

Ví dụ:

Create Table Employee(   
    Emp_PKey Int Identity(1, 1) Constraint PK_Employee_Emp_PKey Primary Key,  
    Emp_SSN Numeric Not Null Unique,  
    Emp_FName varchar(16),   
    Emp_LName varchar(16) 
)

tức là Số An sinh Xã hội của Ai đó có thể là một trường duy nhất trong bảng của bạn, nhưng không nhất thiết phải là khóa chính.

Phân biệt được sử dụng trong câu lệnh Chọn để thông báo truy vấn rằng bạn chỉ muốn các mục duy nhất được trả về khi một trường chứa dữ liệu có thể không phải là duy nhất.

Select Distinct Emp_LName
From Employee

Bạn có thể có nhiều nhân viên có cùng họ, nhưng bạn chỉ muốn mỗi họ khác nhau.

Rõ ràng nếu trường bạn đang truy vấn chứa dữ liệu duy nhất, thì từ khóa riêng biệt sẽ trở nên thừa.


2
Bạn có thể muốn số an sinh xã hội là duy nhất, nhưng chúng không phải. Vd: Dailyfinance.com/2010/08/12/ cường
aij

18

chọn duy nhất không phải là cú pháp hợp lệ cho những gì bạn đang cố gắng làm

bạn muốn sử dụng hoặc chọn riêng biệt hoặc chọn phân biệt

Và thực tế, bạn thậm chí không cần phân biệt / khác biệt trong những gì bạn đang cố gắng làm. Bạn có thể loại bỏ trùng lặp bằng cách chọn các tham số câu lệnh union phù hợp.

truy vấn dưới đây tự nó sẽ chỉ cung cấp các giá trị riêng biệt

select col from table1 
union 
select col from table2

nếu bạn muốn sao chép, bạn sẽ phải làm

select col from table1 
union all
select col from table2

1
Nếu tôi không sai, Oracle cho phép bạn nói select unique..., mặc dù tôi thích làm theo cách tiêu chuẩn.
vào

3

Chỉ có trong Oracle =>

SELECT DISTINCTSELECT UNIQUEhành xử theo cùng một cách. Trong khi DISTINCT là tiêu chuẩn SQL ANSI, UNIQUE là một tuyên bố cụ thể của Oracle.

Trong các cơ sở dữ liệu khác (như máy chủ sql trong trường hợp của bạn) =>

SELECT UNIQUElà cú pháp không hợp lệ. UNIQUElà từ khóa để thêm các ràng buộc duy nhất trên cột.

CHỌN KHÁC BIỆT


0
  1. Duy nhất là cú pháp cũ trong khi Phân biệt là cú pháp mới, giờ là tiêu chuẩn sql.
  2. Unique tạo một ràng buộc rằng tất cả các giá trị được chèn phải khác với các giá trị khác. Một lỗi có thể được chứng kiến ​​nếu một người cố gắng nhập một giá trị trùng lặp. Khác biệtKết quả trong việc loại bỏ các hàng trùng lặp trong khi lấy dữ liệu.
  3. Ví dụ: CHỌN tên DISTINCT TỪ học sinh;

    TẠO BẢNG Người (Id varchar KHÔNG NULL UNIITE , Name varchar (20));

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.