SQL中 DISTINCT 和 UNIQUE

以下內(nèi)容參考w3school中關(guān)于SQL的教學(xué),可以點(diǎn)擊藍(lán)字參考原文。

DISTINCTUNIQUE意思分別為截然不同的獨(dú)一無(wú)二的。看起來(lái)好像很相似,但是實(shí)際上用法卻完全不同。

一、UNIQUE

1.UNIQUE定義

UNIQUE 約束唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄。

UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證。

PRIMARY KEY 擁有自動(dòng)定義的 UNIQUE 約束。

請(qǐng)注意,每個(gè)表可以有多個(gè) UNIQUE 約束,但是每個(gè)表只能有一個(gè) PRIMARY KEY 約束。

簡(jiǎn)單來(lái)說(shuō),UNIQUE的使用就是為了保證數(shù)據(jù)庫(kù)表同一列中不會(huì)出現(xiàn)重復(fù)的數(shù)據(jù),比如說(shuō)學(xué)生表的學(xué)號(hào),這一欄就應(yīng)該用UNIQUE約束,因?yàn)椴粫?huì)也不應(yīng)該出現(xiàn)兩個(gè)同樣學(xué)號(hào)的學(xué)生。

2.UNIQUE用法(MySQL)
  • 在 "Persons" 表創(chuàng)建時(shí)在 "Id_P" 列創(chuàng)建 UNIQUE 約束:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)
  • 需要命名 UNIQUE 約束,以及為多個(gè)列定義 UNIQUE 約束,請(qǐng)使用下面的 SQL 語(yǔ)法:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)

CONSTRAINT 單詞意為約束,在后面的uc_PersonID是為這個(gè)約束取的名字,UNIQUE意思是這個(gè)約束類型為唯一型約束,約束的列為Id_PLastName。

  • 當(dāng)表已被創(chuàng)建時(shí),如需在 "Id_P" 列創(chuàng)建 UNIQUE 約束,請(qǐng)使用下列 SQL:
ALTER TABLE Persons 
ADD UNIQUE (Id_P)
  • 如需命名 UNIQUE 約束,并定義多個(gè)列的 UNIQUE 約束,請(qǐng)使用下面的 SQL 語(yǔ)法:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
  • 如需撤銷 UNIQUE 約束,請(qǐng)使用下面的 SQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID

二、DISTINCT

1.DISTINCT定義

在表中,可能會(huì)包含重復(fù)值。有時(shí)我們希望僅僅列出不同(distinct)的值。

關(guān)鍵詞 DISTINCT 用于在查詢時(shí)返回唯一不同的值。

不同之處:UNIQUE不允許表中某一列存在相同的值,而DISTINCT是在表中可能存在不同值的時(shí)候,查詢到的值有重復(fù)時(shí)僅列出一次。

2.DISTINCT用法

如果要從 "Company" 列中選取所有的值,我們需要使用 SELECT 語(yǔ)句:

SELECT Company FROM Orders

注:如果表Orders的Company列用UNIQUE修飾,則表中Company列不可能出現(xiàn)下面兩個(gè)W3School的情況。

"Orders"表:

Company OrderNumber
IBM 1122
W3School 2333
Apple 3334
W3School 6668

結(jié)果:

Company
IBM
W3School
Apple
W3School

注意,在結(jié)果集中,W3School 被列出了兩次。

如需從 Company" 列中僅選取唯一不同的值,我們需要使用 SELECT DISTINCT 語(yǔ)句:

SELECT DISTINCT Company FROM Orders 
Company
IBM
W3School
Apple

現(xiàn)在,在結(jié)果集中,"W3School" 僅被列出了一次。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在互聯(lián)網(wǎng)行業(yè)從事數(shù)據(jù)分析,要學(xué)一些必備的技能,比如SQL/HIVE。因此我將之前學(xué)習(xí)的SQL知識(shí)資源進(jìn)行統(tǒng)一整理一...
    年少輕狂不能用來(lái)?yè)]霍閱讀 1,161評(píng)論 0 0
  • sql常用語(yǔ)法 SQL 中最重要的 DDL ( 數(shù)據(jù)定義語(yǔ)言)語(yǔ)句: CREATE DATABASE - 創(chuàng)建新數(shù)...
    程序媛_閱讀 289評(píng)論 0 0
  • 學(xué)習(xí)web安全足足有一個(gè)半月有余,之前學(xué)的是前端,也會(huì)一點(diǎn)python。。好吧差不多忘了。常規(guī)工具算是熟悉基本...
    一葉紅塵哦喲閱讀 3,475評(píng)論 4 92
  • SQL 是用于訪問(wèn)和處理數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)的計(jì)算機(jī)語(yǔ)言,使用 SQL 訪問(wèn)和處理數(shù)據(jù)系統(tǒng)中的數(shù)據(jù),這類數(shù)據(jù)庫(kù)包括:Ora...
    子非魚(yú)_t_閱讀 898評(píng)論 0 3
  • sql基礎(chǔ)教程 sql教程 什么是sql? SQL 指結(jié)構(gòu)化查詢語(yǔ)言 SQL 使我們有能力訪問(wèn)數(shù)據(jù)庫(kù) SQL 是一...
    Help_II閱讀 388評(píng)論 0 0

友情鏈接更多精彩內(nèi)容