Perbedaan antara Select Unique dan Select Distinct

145

Saya pikir ini sinonomis, tetapi saya menulis yang berikut ini di Microsoft SQL:

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

Dan itu gagal. Mengubahnya menjadi

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

memperbaikinya. Bisakah seseorang menjelaskan?

pengguna42712
sumber

Jawaban:

169

SELECT UNIQUEadalah sintaks lama yang didukung oleh rasa Oracle dari SQL. Ini identik dengan SELECT DISTINCT.

Gunakan SELECT DISTINCTkarena ini adalah SQL standar, dan SELECT UNIQUEtidak standar, dan dalam merek basis data selain Oracle, SELECT UNIQUEmungkin tidak dikenali sama sekali.

Bill Karwin
sumber
113

Unik adalah kata kunci yang digunakan dalam arahan Buat Tabel () untuk menyatakan bahwa suatu bidang akan berisi data unik, biasanya digunakan untuk kunci alami, kunci asing, dll.

Sebagai contoh:

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) 
)

yaitu Nomor Jaminan Sosial Seseorang mungkin akan menjadi bidang unik di tabel Anda, tetapi belum tentu kunci utama.

Perbedaan digunakan dalam pernyataan Pilih untuk memberi tahu kueri bahwa Anda hanya ingin item unik dikembalikan ketika bidang menyimpan data yang mungkin tidak unik.

Select Distinct Emp_LName
From Employee

Anda mungkin memiliki banyak karyawan dengan nama belakang yang sama, tetapi Anda hanya menginginkan setiap nama belakang yang berbeda.

Jelas jika bidang yang Anda cari memiliki data unik, maka kata kunci Berbeda menjadi berlebihan.

BenAlabaster
sumber
2
Anda mungkin ingin nomor jaminan sosial menjadi unik, tetapi tidak. Contoh: dailyfinance.com/2010/08/12/…
aij
18

pilih unik bukan sintaks yang valid untuk apa yang Anda coba lakukan

Anda ingin menggunakan pilih yang berbeda atau pilih yang berbeda

Dan sebenarnya, Anda bahkan tidak perlu berbeda / jelas dalam apa yang Anda coba lakukan. Anda dapat menghilangkan duplikat dengan memilih parameter pernyataan serikat yang sesuai.

kueri di bawah ini dengan sendirinya hanya akan memberikan nilai yang berbeda

select col from table1 
union 
select col from table2

jika Anda memang ingin duplikat, Anda harus melakukannya

select col from table1 
union all
select col from table2
mson
sumber
1
jika saya tidak salah, Oracle mengizinkan Anda untuk mengatakannya select unique..., meskipun saya lebih suka melakukan cara standar.
asgs
3

Hanya di Oracle =>

SELECT DISTINCTdan SELECT UNIQUEberperilaku dengan cara yang sama. Sementara DISTINCT adalah standar SQL ANSI, UNIQUE adalah pernyataan spesifik Oracle.

Dalam database lain (seperti sql-server dalam kasus Anda) =>

SELECT UNIQUEsintaks tidak valid. UNIQUEadalah kata kunci untuk menambahkan batasan unik pada kolom.

PILIH PERBEDAAN

Somnath Muluk
sumber
0
  1. Uniknya adalah sintaks lama sedangkan Distinct adalah sintaks baru, yang sekarang menjadi sql Standar.
  2. Unik membuat batasan bahwa semua nilai yang dimasukkan harus berbeda dari yang lain. Kesalahan dapat disaksikan jika seseorang mencoba memasukkan nilai duplikat. Perbedaan menghasilkan penghapusan baris duplikat saat mengambil data.
  3. Contoh: SELECT DISTINCT names DARI siswa;

    BUAT TABEL Orang (Id varchar BUKAN NULL UNIK , Nama varchar (20));

aashna mahajan
sumber