程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL 外鏈接操作小結 inner join left join right join

SQL 外鏈接操作小結 inner join left join right join

編輯:關於SqlServer
數據庫操作語句 
7. 外連接——交叉查詢
7.1 查詢 
7.2 等值連接
7.3 右外連接
7.4 左外連接
7.5 更新操作

簡介:

外部連接和自聯接
inner join(等值連接) 只返回兩個表中聯結字段相等的行
left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄
right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄
on 指定表間聯結字段及其關系的等號 "=" 表達式, 返回 true 或 false. 當表達式返回 true 時, 則查詢中包含該記錄. 
! 外部連接只能操作已存在於數據庫中的數據

7.5.2

 程序代碼
Update (ctarticle AS a LEFT JOIN ctclass AS c ON a.classid = c.classid) LEFT JOIN cttag AS b ON a.articleid = b.articleid 
SET tag=tag+' ', b.articleid=a.articleid, b.classid=a.classid, b.nclassid=a.nclassid 
Where a.classid=23 AND a.nclassid=0 AND tagid is not null


7.5.1 

 程序代碼
Update (ctarticle AS a LEFT JOIN (ctnclass AS c LEFT JOIN ctclass AS d ON c.classid = d.classid) ON a.nclassid = c.nclassid AND a.classid = c.classid) LEFT JOIN cttag AS b ON a.articleid = b.articleid SET tag=d.class+' '+c.nclass, b.articleid=a.articleid, b.classid=a.classid, b.nclassid=a.nclassid Where a.classid=23 AND a.nclassid=197;


7.5 更新操作

74.5 左連接中數據的篩選

 程序代碼
Insert INTO cttag(articleid,classid,nclassid) Select a.articleid,a.classid,a.nclassid from ctarticle a left join cttag b on a.articleid=b.articleid where b.articleid is null

//本語句功能為, 顯示主表的全部內容, 插入數據到副表中沒有的數據
//主要作用為: 讓數據減少冗余

7.4.4.1 上例中的延續

 程序代碼
Select a.*, b.*, c.*, d.*
FROM cttag as d left join ((ctarticle AS a LEFT JOIN ctclass AS b ON a.classid=b.classid) LEFT JOIN ctnclass AS c ON a.nclassid=c.nclassid) on d.articleid=a.articleid;


7.4.4 顯示文章表中的全部, 調用類別表中的欄目

 程序代碼
select a.*, b.*, c.* from (ctarticle a left join ctclass b on a.classid=b.classid) left join ctnclass c on a.nclassid=c.nclassid

//作用, 有時在文章表中包含了在個別類別表中沒有的數據, 用這個語法可以讀出文章表的全部數據
//a 為 文章表, b 為主類別, c 為子類別

7.4.3 同上例, 選擇追加數據時加上空格

 程序代碼
Insert INTO cttag(articleid,classid,nclassid,tag)
Select a.articleid,a.classid,a.nclassid,d.class+' '+c.nclass
FROM (ctarticle AS a left join (ctnclass c left join ctclass d on c.classid=d.classid) on a.classid=c.classid and a.nclassid=c.nclassid) LEFT JOIN cttag AS b ON a.articleid = b.articleid where a.classid=4 and a.nclassid=154;


7.4.2 連接N個表, 並追加數據到其中一個表, N=4

 程序代碼
Insert INTO cttag(articleid,classid,nclassid,tag)
Select a.articleid,a.classid,a.nclassid,d.class+c.nclass
FROM (ctarticle AS a left join (ctnclass c left join ctclass d on c.classid=d.classid) on a.classid=c.classid and a.nclassid=c.nclassid) LEFT JOIN cttag AS b ON a.articleid = b.articleid where a.classid=1 and a.nclassid=1;

//解讀
插入到 表2(欄1,欄2,欄3,欄4)
選擇 別名a.欄1, 別名a.欄2, 別名a.欄3, 別名d.欄4 加上 別名c.欄5
從 (表1 別名a 左連接 (表3 別名c 左連接 表4 別名d 在 別名c.欄2 等於 別名d.欄2) 在 別名a.欄2 等於 別名c.欄2 和 別名a.欄3=別名c.欄3) 左連接 表2 別名b 在 別名a.欄1 等於 別名b.欄1 在那裡 別名a.欄2=1 和 別名a.欄3=1

7.4.1 連接兩個表, 並追加數據到其中一個表

 程序代碼
Insert INTO cttag(articleid,classid,nclassid)
Select a.articleid,a.classid,a.nclassid
FROM ctarticle AS a LEFT JOIN cttag AS b ON a.articleid = b.articleid where a.classid=1 and a.nclassid=1;

//解讀
插入到 表2(欄1,欄2,欄3)
選擇 別名a.欄1, 別名a.欄2, 別名a.欄3
從 表1 別名a 左連接 表2 別名b 在 別名a.欄1 等於 別名b.欄1 在那裡 別名a.欄4=1 和 別名a.欄5=1

7.4. 左連接

7.3.1 同步兩表的數據

 程序代碼
Update ctarticle a INNER JOIN cttag b ON a.articleid = b.articleid SET b.classid=a.classid, b.nclassid=a.nclassid;

//解讀
更新 表1 別名a 聯接 表2 別名2 在 別名a.欄1 等於 別名b.欄1 設置 別名b.欄2 更新為 別名a.欄2, 別名b.欄3 更新為 別名a.欄3 

7.3 右外連接

 程序代碼
select a.*, b.* from bunclass a right join ctclass b on a.classid=b.classid where a.nclassid=20

查詢別名 a,b 表, 只匹配 b 表中的內容.

7.2.3 添加數據到連接表之一

 程序代碼
Insert INTO cttag ( tag, articleid ) Select top 1 b.tag, a.articleid FROM ctarticle AS a left JOIN cttag AS b ON a.articleid = b.articleid Where a.articleid order by a.articleid desc;


7.2.2 變通中的用法二

 程序代碼
Insert INTO bureply 
Select b.*, a.classid, a.nclassid
FROM article AS a INNER JOIN reply AS b ON a.articleid = b.articleid
Where classid=50;


7.2.1 實際應用中的變通

 程序代碼
Insert INTO butag ( tag, articleid, classid, nclassid)
Select b.tag, a.articleid, a.classid, a.nclassid
FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid
Where classid=24;


7.2 添加數據到其他表

 程序代碼
Insert INTO butag ( tag, articleid )
Select b.tag, a.articleid
FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid
Where a.articleid<>False;

//解讀
添加到 接收表(列1,列2)
選擇 別名b.列1, 別名a.列2
從 表1 表名a 聯接 表2 表名b 在 別名a.列c 等於 別名b.列c
在哪裡 別名a.列c 不等於 沒有

7.1.1 實際應用中的變通

 程序代碼
Select b.tag, a.articleid, a.classid, a.nclassid
FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid
Where a.classid=24;


7.1 查詢

 程序代碼
Select b.tag, a.articleid
FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid
Where a.articleid<>False;

//解讀
選擇 別名b.列, 別名a.列
從 表1 別名a 聯接 表2 別名b 在 別名a.列c = 別名b.列c
在哪裡 別名a.列c 不等於 沒有
注: as 不是必要

7. 外連接——交叉查詢
提示: 注意表中相同的欄目 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved