關(guān)系數(shù)據(jù)庫SQL之高級數(shù)據(jù)查詢:去重復(fù)、組合查詢、連接查詢、虛擬表

前言


接上一篇關(guān)系數(shù)據(jù)庫SQL之基本數(shù)據(jù)查詢:子查詢、分組查詢、模糊查詢,主要是關(guān)系型數(shù)據(jù)庫基本數(shù)據(jù)查詢。包括子查詢、分組查詢、聚合函數(shù)查詢、模糊查詢,本文是介紹一下關(guān)系型數(shù)據(jù)庫幾種高級數(shù)據(jù)查詢SQL語法,包括虛擬表、去重復(fù)查詢、組合查詢、連接查詢。

關(guān)系數(shù)據(jù)庫SQL之高級數(shù)據(jù)查詢

去重復(fù)(DISTINCT)


DISTINCT:用于返回唯一不同的值,主要是用于某一字段。

  • 語法
SELECT DISTINCT <列名>|* FROM <表名>
  • 示例
--查詢所有班級名稱
SELECT DISTINCT Class FROM Students
字段去重復(fù)-DISTINCT

組合查詢


SQL組合查詢可以使用以下關(guān)鍵字進(jìn)行操作:

  • UNION(并集):比較兩個查詢的結(jié)果,返回兩個集合所有非重復(fù)行。
  • INTERSECT(交集):比較兩個查詢的結(jié)果,返回由左右雙側(cè)輸入查詢輸出的非重復(fù)行。
  • EXCEPT(差集):比較兩個查詢的結(jié)果,返回左側(cè)查詢集合中不包含左右集合交集部分的非重復(fù)行。
  • 注意:
    使用 EXCEPT 或 INTERSECT 的兩個查詢的結(jié)果集組合起來的基本規(guī)則:
    所有查詢中的列數(shù)和列的順序必須相同;數(shù)據(jù)類型必須兼容。

語法

[SQL查詢表達(dá)式1]
  UNION | INTERSECT | EXCEPT
[SQL查詢表達(dá)式2];

基礎(chǔ)數(shù)據(jù)

--創(chuàng)建數(shù)據(jù)表T1
CREATE TABLE T1(
    A int NULL,
    B int NULL,
    C int NULL
);
--創(chuàng)建數(shù)據(jù)表T2
CREATE TABLE T2(
    A int NULL,
    B int NULL,
    C int NULL
);
--插入基礎(chǔ)數(shù)據(jù)
INSERT INTO T1 VALUES(1,2,3);
INSERT INTO T1 VALUES(2,3,4);
INSERT INTO T1 VALUES(3,4,5);
INSERT INTO T1 VALUES(4,5,6);
INSERT INTO T1 VALUES(5,6,7);
INSERT INTO T2 VALUES(3,4,5);
INSERT INTO T2 VALUES(5,6,7);
INSERT INTO T2 VALUES(6,7,8);
INSERT INTO T2 VALUES(7,8,9);

UNION(并集)

  • 示例1(去重復(fù))
--查詢T1和T2的所有數(shù)據(jù),去重復(fù)
SELECT * FROM T1 UNION SELECT * FROM T2;
組合查詢-UNION(并集)-去重復(fù)
  • 示例2(不去重復(fù))
--查詢T1和T2的所有數(shù)據(jù),不去重復(fù),在UNION關(guān)鍵字后面加上ALL
SELECT * FROM T1 UNION ALL SELECT * FROM T2;
組合查詢-UNION(并集)-不去重復(fù)

INTERSECT(交集)

--查詢T1和T2的交集
SELECT * FROM T1 INTERSECT SELECT * FROM T2;
組合查詢-INTERSECT(交集)

EXCEPT(差集)

--查詢T1和T2的差集
SELECT * FROM T1 EXCEPT SELECT * FROM T2;
組合查詢-EXCEPT(差集)

連接查詢


常用的連接查詢有如下幾種:
內(nèi)連接(INNER JOIN):返回連接的對象都滿足條件的行。
左連接(LEFT JOIN):返回左邊數(shù)據(jù)所有數(shù)據(jù),即使右邊沒有數(shù)據(jù)
(沒有對應(yīng)數(shù)據(jù)顯示為NULL)。
右連接(RIGHT JOIN):返回右邊數(shù)據(jù)所有數(shù)據(jù),即使左邊沒有數(shù)據(jù)
(沒有對應(yīng)數(shù)據(jù)顯示為NULL)。
全連接(FULL JOIN):返回左右交叉數(shù)據(jù)。
提示:INNER JOIN 與 JOIN 是相同的。

語法

SELECT 字段列表 FROM <數(shù)據(jù)表|視圖> INNER JOIN <數(shù)據(jù)表|視圖> ON 條件表達(dá)式;

數(shù)據(jù)

在上一篇關(guān)系數(shù)據(jù)庫SQL之基本數(shù)據(jù)查詢:子查詢、分組查詢、模糊查詢基礎(chǔ)數(shù)據(jù)基礎(chǔ)上,再增加一些數(shù)據(jù)。

INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,[Address]) 
VALUES(2016010,'小夏','一班','男',19,'18817716689','沈陽');
INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,[Address]) 
VALUES(2016011,'倪妮','二班','女',20,'18817716698','北京');

INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016012,1,90,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016012,2,86,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016012,3,79,1);

內(nèi)連接(INNER JOIN)

--查詢成績表并顯示課程名稱
SELECT S.Id,S.SId,C.Name,S.Grades,S.IsPassed
 FROM Scores S INNER JOIN Courses C ON S.CId=C.Id;
連接查詢-內(nèi)連接(INNER JOIN)

左連接(LEFT JOIN)

--查詢學(xué)生信息成績表
SELECT * FROM Students ST LEFT JOIN Scores S ON ST.Id=S.SId;
連接查詢-左連接(LEFT JOIN)

右連接(RIGHT JOIN)

--查詢學(xué)生信息成績表
SELECT * FROM Students ST RIGHT JOIN Scores S ON ST.Id=S.SId;
連接查詢-右連接(RIGHT JOIN)

全連接(FULL JOIN)

--查詢學(xué)生信息成績表
SELECT * FROM Students ST FULL JOIN Scores S ON ST.Id=S.SId;
連接查詢-全連接(FULL JOIN)

虛擬表


SQL虛擬表是通過SELECT查詢語句返回的一個結(jié)果集。
當(dāng)虛擬表構(gòu)建出來后,可以直接當(dāng)作實(shí)際數(shù)據(jù)表一樣查詢操作,在實(shí)際使用中會經(jīng)常使用到。

  • 語法
SELECT 字段列表1 FROM
  (SELECT 字段列表2 FROM <表名> [WHERE子句]) <虛擬表名稱> 
[WHERE子句]
  • 示例
SELECT * FROM ( SELECT S.Id,S.Name CName,S.Grades,S.IsPassed,S.SId,ST.Name,ST.Class 
FROM Students ST LEFT JOIN (SELECT Scores.*,C.Name FROM
 Scores LEFT JOIN Courses C ON Scores.CId=C.Id) S ON ST.Id=S.SId ) T

示例中的SELECT Scores.*,C.Name FROMScores LEFT JOIN Courses C ON Scores.CId=C.Id中 C 和最后面 T 就是虛擬表名稱。

虛擬表查詢

本文到這里先告一段落,后面會接著更新。
歡迎大家多多指正不足之處。

本文采用知識共享署名-相同方式共享 4.0 國際許可協(xié)議進(jìn)行許可。
基于簡書上的作品創(chuàng)作。 可轉(zhuǎn)載、引用,但需經(jīng)本人同意后署名作者且注明文章出處,并以相同方式共享。

知識共享許可協(xié)議
知識共享許可協(xié)議

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

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

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