首頁 > 軟體

SQL SERVER實現連線與合併查詢

2022-02-24 13:01:40

建立測試表MyStudentInfo

CREATE table MyStudentInfo
(
Id int not null primary key,
Name varchar(16),
Age int,
Gender varchar(2),
Phone varchar(16),
Address varchar(50),
GradeId int
)

聯合插入多條資料

INSERT INTO MyStudentInfo
SELECT 1,'張三',20,'1','15801258912','上海',1 UNION
SELECT 2,'李四',22,'1','12345678901','北京',1 UNION
SELECT 3,'王五',16,'1','13976891234','天津',2 UNION
SELECT 4,'趙六',19,'1','18676891234','重慶',3 UNION
SELECT 5,'小紅',21,'2','17776891234','廣州',4 UNION
SELECT 6,'小王',25,'2','13176891234','深圳',5 UNION
SELECT 7,'小劉',18,'2','13374591234','南京',6 UNION
SELECT 8,'小張',16,'1','13974596734','長沙',6 UNION
SELECT 9,'小羅',27,'1','13175122786','武漢',7 UNION
SELECT 10,'小袁',21,'2','17715872346','石家莊',8

建立測試表GradeInfo

CREATE table GradeInfo
(
Id int not null primary key,
GradeName varchar(16)
)

聯合插入多條資料

INSERT INTO GradeInfo
SELECT 1,'.NET' UNION
SELECT 2,'Android' UNION
SELECT 3,'PHP' UNION
SELECT 4,'UI' UNION
SELECT 5,'HTML5' UNION
SELECT 6,'JAVA' UNION
SELECT 9,'HADOOP' UNION
SELECT 10,'巨量資料'

內連線

內連線是從結果表中刪除其他被連結表中沒有匹配的所有行,所以我們說內連線可能丟失資料

SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s INNER JOIN GradeInfo g ON s.GradeId=g.Id

外部連結

左外聯接,關鍵字LEFT JOIN

左外聯接,結果集中包括左表中的所有行,如果左表的某一行在右表中沒有匹配行,則在關聯的結果集行中,

來自右表的所有選擇列表均為NULL

SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s LEFT JOIN GradeInfo g ON s.GradeId=g.Id

右外聯接

GIGHT JOIN進行聯接

是左外聯接的反向聯接,將返回右表的所有行,如果右表的某一行在左表中沒有匹配行,則將為左表返回NULL

SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s RIGHT JOIN GradeInfo g ON s.GradeId=g.Id

完整外聯接

關鍵字是FULL JOIN

完整外聯接使用了FULL JOIN進行聯接,當某一行在另一表中沒有匹配行,另一表的選擇列表將返回NULL

SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s FULL JOIN GradeInfo g ON s.GradeId=g.Id

交叉聯接(笛卡爾積)

CORSS JOIN 沒有where 也沒有on,返回行數是兩錶行數的乘積

SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s CROSS JOIN GradeInfo g

UNION:UNION操作符用於合併兩個或多個 SELECT 語句的結果集

UNION必須遵循

  • 1.兩個SELECT語句選擇列表中的列數目必須一樣,而且對應位置上的列的資料型別必須相同或者相容,每條 SELECT 語句中的列的順序必須相同
  • 2.UNION 結果集中的列名總是等於 UNION 中第一個 SELECT 語句中的列名
  • 3.union預設自動去除重複行
  • 4.如果需要手動排序,order by語句必須加在最後一個select語句之後,但是他所使用的排序列名必須是第一個select選擇列表中的列名
SELECT Age,Name FROM MyStudentInfo
UNION
SELECT Id,GradeName FROM GradeInfo
ORDER BY Age DESC

UNION ALL

  • 1.加上ALL關鍵字之後,功能就是不刪除重複行,也不對行進行自動排序
  • 2.如果希望把不同資料型別的欄位合併查詢,必須進行型別轉換使其相對應的資料型別相同或者相容
  • 3.當合並兩個表,列數不同時.只要向其中一個表源中新增列,就可以使其兩個表的列數相同
SELECT Age,Name,Address FROM MyStudentInfo
UNION ALL
SELECT Id,GradeName,NULL FROM GradeInfo
ORDER BY Age DESC

UNION和聯接查詢有什麼區別

  • 1.在合併中,兩個表的數量和資料型別必須相同 ; 在聯接中,一個表的行可能與另一個表的行有很大的區別
  • 2.在合併中,行的數量是兩個錶行的"和" ; 在聯接中,行的最大數目是他們的"乘積"

到此這篇關於SQL SERVER實現連線與合併查詢的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com