接上一篇關係數據庫SQL之基本數據查詢:子查詢、分組查詢、模糊查詢,主要是關係型數據庫基本數據查詢。包括子查詢、分組查詢、聚合函數查詢、模糊查詢,本文是介紹一下關係型數據庫幾種高級數據查詢SQL語法,包括虛擬表、去重複查詢、組合查詢、鏈接查詢。sql
DISTINCT:用於返回惟一不一樣的值,主要是用於某一字段。數據庫
語法函數
SELECT DISTINCT <列名>|* FROM <表名>
示例spa
--查詢全部班級名稱 SELECT DISTINCT Class FROM Students
SQL組合查詢可使用如下關鍵字進行操做:code
UNION(並集):比較兩個查詢的結果,返回兩個集合全部非重複行。對象
INTERSECT(交集):比較兩個查詢的結果,返回由左右雙側輸入查詢輸出的非重複行。ip
EXCEPT(差集):比較兩個查詢的結果,返回左側查詢集合中不包含左右集合交集部分的非重複行。get
注意:
使用 EXCEPT 或 INTERSECT 的兩個查詢的結果集組合起來的基本規則:it全部查詢中的列數和列的順序必須相同;數據類型必須兼容。io
語法
[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);
示例1(去重複)
--查詢T1和T2的全部數據,去重複 SELECT * FROM T1 UNION SELECT * FROM T2;
示例2(不去重複)
--查詢T1和T2的全部數據,不去重複,在UNION關鍵字後面加上ALL SELECT * FROM T1 UNION ALL SELECT * FROM T2;
--查詢T1和T2的交集 SELECT * FROM T1 INTERSECT SELECT * FROM T2;
--查詢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);
--查詢成績表並顯示課程名稱 SELECT S.Id,S.SId,C.Name,S.Grades,S.IsPassed FROM Scores S INNER JOIN Courses C ON S.CId=C.Id;
--查詢學生信息成績表 SELECT * FROM Students ST LEFT JOIN Scores S ON ST.Id=S.SId;
--查詢學生信息成績表 SELECT * FROM Students ST RIGHT JOIN Scores S ON ST.Id=S.SId;
--查詢學生信息成績表 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 就是虛擬表名稱。
本文到這裏先告一段落,後面會接着更新。歡迎你們多多指正不足之處。