SQL SERVER實(shí)現(xiàn)連接與合并查詢
創(chuàng)建測(cè)試表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 )
聯(lián)合插入多條數(shù)據(jù)
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','長(zhǎng)沙',6 UNION SELECT 9,'小羅',27,'1','13175122786','武漢',7 UNION SELECT 10,'小袁',21,'2','17715872346','石家莊',8
創(chuàng)建測(cè)試表GradeInfo
CREATE table GradeInfo ( Id int not null primary key, GradeName varchar(16) )
聯(lián)合插入多條數(shù)據(jù)
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,'大數(shù)據(jù)'
內(nèi)鏈接
內(nèi)鏈接是從結(jié)果表中刪除其他被鏈接表中沒有匹配的所有行,所以我們說內(nèi)鏈接可能丟失數(shù)據(jù)
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

外部鏈接
左外聯(lián)接,關(guān)鍵字LEFT JOIN
左外聯(lián)接,結(jié)果集中包括左表中的所有行,如果左表的某一行在右表中沒有匹配行,則在關(guān)聯(lián)的結(jié)果集行中,
來自右表的所有選擇列表均為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

右外聯(lián)接
GIGHT JOIN進(jìn)行聯(lián)接
是左外聯(lián)接的反向聯(lián)接,將返回右表的所有行,如果右表的某一行在左表中沒有匹配行,則將為左表返回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

完整外聯(lián)接
關(guān)鍵字是FULL JOIN
完整外聯(lián)接使用了FULL JOIN進(jìn)行聯(lián)接,當(dāng)某一行在另一表中沒有匹配行,另一表的選擇列表將返回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

交叉聯(lián)接(笛卡爾積)
CORSS JOIN 沒有where 也沒有on,返回行數(shù)是兩表行數(shù)的乘積
SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName FROM MyStudentInfo s CROSS JOIN GradeInfo g

UNION:UNION操作符用于合并兩個(gè)或多個(gè) SELECT 語句的結(jié)果集
UNION必須遵循
- 1.兩個(gè)SELECT語句選擇列表中的列數(shù)目必須一樣,而且對(duì)應(yīng)位置上的列的數(shù)據(jù)類型必須相同或者兼容,每條 SELECT 語句中的列的順序必須相同
- 2.UNION 結(jié)果集中的列名總是等于 UNION 中第一個(gè) SELECT 語句中的列名
- 3.union默認(rèn)自動(dòng)去除重復(fù)行
- 4.如果需要手動(dòng)排序,order by語句必須加在最后一個(gè)select語句之后,但是他所使用的排序列名必須是第一個(gè)select選擇列表中的列名
SELECT Age,Name FROM MyStudentInfo UNION SELECT Id,GradeName FROM GradeInfo ORDER BY Age DESC

UNION ALL
- 1.加上ALL關(guān)鍵字之后,功能就是不刪除重復(fù)行,也不對(duì)行進(jìn)行自動(dòng)排序
- 2.如果希望把不同數(shù)據(jù)類型的字段合并查詢,必須進(jìn)行類型轉(zhuǎn)換使其相對(duì)應(yīng)的數(shù)據(jù)類型相同或者兼容
- 3.當(dāng)合并兩個(gè)表,列數(shù)不同時(shí).只要向其中一個(gè)表源中添加列,就可以使其兩個(gè)表的列數(shù)相同
SELECT Age,Name,Address FROM MyStudentInfo UNION ALL SELECT Id,GradeName,NULL FROM GradeInfo ORDER BY Age DESC

UNION和聯(lián)接查詢有什么區(qū)別
- 1.在合并中,兩個(gè)表的數(shù)量和數(shù)據(jù)類型必須相同 ; 在聯(lián)接中,一個(gè)表的行可能與另一個(gè)表的行有很大的區(qū)別
- 2.在合并中,行的數(shù)量是兩個(gè)表行的"和" ; 在聯(lián)接中,行的最大數(shù)目是他們的"乘積"
到此這篇關(guān)于SQL SERVER實(shí)現(xiàn)連接與合并查詢的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SQL2000中的默認(rèn)sa帳號(hào)的修改與刪除方法
MSSQL默認(rèn)的sa很少有人改動(dòng),但是經(jīng)常有人用工具掃描sa賬戶,并且爆破密碼2013-02-02
SQL實(shí)現(xiàn)模糊查詢的四種方法小結(jié)
在SQL中,模糊查詢是一種通過匹配字符串中的一部分或關(guān)鍵字來查詢數(shù)據(jù)的方法,本文主要介紹了SQL實(shí)現(xiàn)模糊查詢的四種方法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
sqlserver 2000 遠(yuǎn)程連接 服務(wù)器的解決方案
在連接本地服務(wù)器時(shí),通常使用的是命名管道協(xié)議(在服務(wù)器網(wǎng)絡(luò)實(shí)用工具里可以看到啟用的協(xié)議有這個(gè)2009-06-06
ODBC連接數(shù)據(jù)庫(kù)以SQLserver為例圖文詳解
開放數(shù)據(jù)庫(kù)互連(ODBC)是微軟提出的數(shù)據(jù)庫(kù)訪問接口標(biāo)準(zhǔn),開放數(shù)據(jù)庫(kù)互連定義了訪問數(shù)據(jù)庫(kù)的API一個(gè)規(guī)范,這些API獨(dú)立于不同廠商的DBMS,也獨(dú)立于具體的編程語言,下面這篇文章主要給大家介紹了關(guān)于ODBC連接數(shù)據(jù)庫(kù)以SQLserver為例的相關(guān)資料,需要的朋友可以參考下2023-05-05
MSSQL優(yōu)化之探索MSSQL執(zhí)行計(jì)劃(轉(zhuǎn))
最近總想整理下對(duì)MSSQL的一些理解與感悟,卻一直沒有心思和時(shí)間寫,晚上無事便寫了一篇探索MSSQL執(zhí)行計(jì)劃,本文講執(zhí)行計(jì)劃但不僅限于講執(zhí)行計(jì)劃2011-10-10
sqlserver數(shù)據(jù)庫(kù)加密后無法使用MDF,LDF,log文件名稱被修改的數(shù)據(jù)恢復(fù)
這篇文章主要給大家分享的是sqlserver數(shù)據(jù)庫(kù)加密后無法使用MDF,LDF,log文件名稱被修改的數(shù)據(jù)恢復(fù)案例,如果工作中你也遇到這樣的問題,可以參考一下2022-03-03

