国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關系數據庫SQL之高級數據查詢:去重復、組合查詢、連接查詢、虛擬表

EasonTyler / 530人閱讀

摘要:前言接上一篇關系數據庫之基本數據查詢子查詢分組查詢模糊查詢,主要是關系型數據庫基本數據查詢。包括子查詢分組查詢聚合函數查詢模糊查詢,本文是介紹一下關系型數據庫幾種高級數據查詢語法,包括虛擬表去重復查詢組合查詢連接查詢。

前言

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

去重復(DISTINCT)

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

語法

SELECT DISTINCT <列名>|* FROM <表名>

示例

--查詢所有班級名稱
SELECT DISTINCT Class FROM Students

組合查詢

SQL組合查詢可以使用以下關鍵字進行操作:

UNION(并集):比較兩個查詢的結果,返回兩個集合所有非重復行。

INTERSECT(交集):比較兩個查詢的結果,返回由左右雙側輸入查詢輸出的非重復行。

EXCEPT(差集):比較兩個查詢的結果,返回左側查詢集合中不包含左右集合交集部分的非重復行。

注意:
使用 EXCEPT 或 INTERSECT 的兩個查詢的結果集組合起來的基本規則:

所有查詢中的列數和列的順序必須相同;數據類型必須兼容。

語法

[SQL查詢表達式1]
  UNION | INTERSECT | EXCEPT
[SQL查詢表達式2];

基礎數據

--創建數據表T1
CREATE TABLE T1(
    A int NULL,
    B int NULL,
    C int NULL
);
--創建數據表T2
CREATE TABLE T2(
    A int NULL,
    B int NULL,
    C int NULL
);
--插入基礎數據
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(去重復)

--查詢T1和T2的所有數據,去重復
SELECT * FROM T1 UNION SELECT * FROM T2;

示例2(不去重復)

--查詢T1和T2的所有數據,不去重復,在UNION關鍵字后面加上ALL
SELECT * FROM T1 UNION ALL SELECT * FROM T2;

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

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

連接查詢

常用的連接查詢有如下幾種:
內連接(INNER JOIN):返回連接的對象都滿足條件的行。
左連接(LEFT JOIN):返回左邊數據所有數據,即使右邊沒有數據
(沒有對應數據顯示為NULL)。
右連接(RIGHT JOIN):返回右邊數據所有數據,即使左邊沒有數據

(沒有對應數據顯示為NULL)。

全連接(FULL JOIN):返回左右交叉數據。
提示:INNER JOIN 與 JOIN 是相同的。

語法
SELECT 字段列表 FROM <數據表|視圖> INNER JOIN <數據表|視圖> ON 條件表達式;
數據

在上一篇關系數據庫SQL之基本數據查詢:子查詢、分組查詢、模糊查詢基礎數據基礎上,再增加一些數據。

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);
內連接(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;

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

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

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

虛擬表

SQL虛擬表是通過SELECT查詢語句返回的一個結果集。
當虛擬表構建出來后,可以直接當作實際數據表一樣查詢操作,在實際使用中會經常使用到。

語法

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 就是虛擬表名稱。

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/17542.html

相關文章

發表評論

0條評論

EasonTyler

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<