1. 資料庫-聯表查詢
sql使用(一)——聯合查詢
1.聯合查詢分類
內連接(inner Join 或 Join)
外連接(outer Join)
左外連接(left outer Join 或 left Join)
右外連接(right outer Join 或 right Join)
全外連接(full outer Join 或 full Join)
交叉連接 (cross Join)
結果集鏈接 (union 和 union all)
2.聯合查詢介紹
相關數據表如下:
A表
B表
C表
2.1內連接(Inner Join)
內連接:僅顯示兩個表中匹配行,即兩表中都有才顯示。
SQL如下:
SELECT A.id AS AID, A.content AS AContent, B.id AS BID, B.content AS BContent FROM A INNERJOIN B ON (A.id = B.id);
1
2
3
4
5
6
7
8
查詢結果:
由查詢結果可以看出,內連接根據連接條件(A.id=B.id)查詢出了A、B兩表中都存在的數據信息。2個表的聯合查詢結果如此,那麼3個表甚至更多表聯合查詢的結果呢?
A、B、C三表聯合內查詢SQL
SELECTA.idASAID, A.contentASAContent, B.idASBID, B.contentASBContent, C.idASCID, C.(A.id = B.id)INNERJOINCON(A.id = C.id)
1
2
3
4
5
6
7
8
9
10
11
查詢結果:
啊?怎麼多了一行數據?不用驚訝,其實C表中有2個id為1的記錄,然而我們怎麼理解得到的查詢結果呢?
可以把A、B兩表的查詢結果作為T表(中間結果表),然後T表內連接C表,連接條件為T.A.id=C.id。
簡單來說n(n>=2)都可以看做兩張表的聯合查詢,後面的小節將只介紹兩個表的聯合查詢。
2.2外連接(Outer Join)
2.2.1左外連接(Left outer Join)
左外連接:左表有就顯示,不論右表。
SQL:
SELECTA.idASAID, A.contentASAContent, B.idASBID, B.(A.id = B.id);
1
2
3
4
5
6
7
8
查詢結果:
左連接並不是把B表左連接到A表上,而是把A表作為基準表。由查詢結果可以看出,A、B兩表左連接,只要A中有結果,無論B表中有無結果,都會被查詢出來。
2.2.2右外連接(Right outer Join)
右外連接:右表有就顯示,不論左表。
SQL:
SELECTA.idASAID, A.contentASAContent, B.idASBID, B.(A.id = B.id);
1
2
3
4
5
6
7
8
9
查詢結果:
右連接和左連接類似,只是把B表(連接的表)作為基準表。由查詢結果可以看出,無論A表是否存在其他數據,只要B表數據存在就會被查詢出來。
2.2.3全外連接(Full outer Join)
全外連接:左表/右表,有一個有就顯示。
SQL:
SELECTA.idASAID, A.contentASAContent, B.idASBID, B.(A.id = B.id);
1
2
3
4
5
6
7
8
9
查詢結果:
全外連接查詢就字面意思也不難看出是查詢出兩表(A、B)中的所有記錄信息。
註:MySQL中不支持全外連接(但是可以union來實現,後面會介紹)。
2.2交叉連接(Cross Join)
SQL:
SELECTA.idASAID, A.contentASAContent, B.idASBID, B.;
1
2
3
4
5
6
7
8
9
查詢結果:
由結果可以看出,交叉連接是對A、B量表進行笛卡爾積的結果查詢出來。即A的每條記錄都有和B中所有記錄相對應的信息。
2.3 SQL Union
SQL Union用於將多個select結果集進行合並。值得注意的是,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。
SQL:
SELECT*FROMAUNIONSELECT*fromB;
1
查詢結果:
Union是把2個Select結果集進行合並,由查詢結果也不難看出,A、B兩表的結果數據進行了合並,並且都被查詢出來了。
如果2個Select結果集中存在相同的結果,用Union則會把相同的記錄進行合並,查詢結果中僅僅會顯示一條。那麼如果想都顯示出來,把Union換成Union All 即可。
Union實現Full outer Join:
1.首先獲取A、B表中id的不同組合。
SQL:
CREATEVIEWvasSELECTA.idfromAUNIONSELECTB.idfromB;
1
視圖內存如下:
2.以視圖V為基本表,Left Join A、B表即可。
SQL:
SELECTA.id, A.content, B.id, B.contentFROMvLEFTJOINAON(A.id = v.id)LEFTJOINBON(B.id = v.id);
1
2
3
4
5
6
7
8
9
查詢結果如下:
2. SQL資料庫的表。怎麼同時連接3個表查詢。
可以參考下面的方法:
1、select * from 表1,表2,表3 where 表1.欄位=表2.欄位 and 表1.欄位=表3.欄位
2、select * from 表1 join 表2 on 表1.欄位=表2.欄位 and join 表3 on 表1.欄位=表3.欄位
如果沒有AND,前面就需要加括弧了。
(2)資料庫中三表聯查怎麼弄擴展閱讀:
參考語句
創建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據已有的表創建新表:
1、create table tab_new like tab_old (使用舊表創建新表)
2、create table tab_new as select col1,col2… from tab_old definition only
刪除新表
drop table tabname
3. SQL三表關聯查詢是什麼
關系型資料庫中,每個表之間必需有一個或多個列與其它的表有關系(如相等),才能把兩個表合在一起查詢。x0dx0a你的用戶表下沒與作者表或作品表有關系的列,所以沒辦法連在一塊查的,就算連在一塊查也是沒意義的。x0dx0ax0dx0a除非你的用戶表下再加一個作品ID,這樣就可以關連起來查詢了x0dx0ax0dx0aSELECT a.用戶名,c.作品名字,b.作者名,c.出版社,x0dx0aFROM用戶表 as a x0dx0a JOIN 作品表 as c ON a.作品ID = c.作品IDx0dx0a JOIN 作者表 as b ON c.作者ID = b.作者IDx0dx0aWHERE a.用戶名 = 『XXX』;
4. 資料庫如何三表關聯查詢
明明是對的啊
5. T-SQL中怎麼實現3表聯查
三表查詢,先兩張表關聯,然後用關聯的表和第三張表關聯,也可以利用with as語法、臨時表等等。
--例子1
select a.stuName as stuName,a.className as className,b.proName as project,c.score
into #fk
from student a,project b,marks c
where a.stuId=c.stuId and b.proId=c.proId
select stuName,className,project,max(score) as score
from #fk
where stuName in (select stuName from #fk where score in(select max(score) from #fk group by className,project))
group by className,project,stuName
--例子2
with cte1 as(
select a.stuName as stuName,a.className as className,b.proName as project,max(c.score) as score
from marks c join student a on a.stuId=c.stuId
join project b on b.proId=c.proId
group by a.className,b.proName,a.stuName)
select stuName,className,project,max(score) as score
from cte1
where stuName in (select stuName from cte1 where score in(select max(score) from cte1 group by className,project))
group by className,project,stuName
6. 求三表聯合查詢的SQL查詢語句
車訊語句:select username,psw from (a1 left join a2 on a1.a1_id=a2.a1_id) left join a3 on a1.a1_id=a3.a1_id
這樣寫:
SELECT
S.SName AS 姓名, CS.CourseName AS 課程, C.Score AS 成績
FROM Students AS S
INNER JOIN Score AS C ON (S.SCode = C.StudentID)
INNER JOIN Course AS CS ON (CS.CourseID = C.CourseID
(6)資料庫中三表聯查怎麼弄擴展閱讀:
SQL聯合查詢的分類
一、內連接查詢:只查詢左邊表有且右邊表也有的數據,本質上是依據外鍵關系,在笛卡爾積查詢的基礎上過濾出正確的數據。
語句有2種形式:
Select * from dept ,emp where dept.id=emp.dept_id
Select * from dept inner join emp on dept.id =emp.dept_id
二、外連接查詢:外連接是用於查詢倆邊一邊有一邊沒有的數據。
三、左外連接查詢:在內連接的基礎上增加上左邊表有而右邊表沒有的數據
語句:Select * from dept join emp on dept.id=emp.dept_id
四、右外連接:在內連接的基礎上增加上右邊表沒有的記錄
語句:Select * from dept right join emp on dept.id =emp.dept_id
7. 求三表聯合查詢的SQL查詢語句
第一種方法:select * from student,teacher,project wherestudent.id=teacher.sid andstudent.id=project.sid;
第二種:select * from student inner join teacher onstudent.id=teacher.sid inner join project onstudent.id=project.sid。
8. 如何sql三張表關聯查詢
三張表關聯查詢
使用場景:A\B\C 三張表,現在要查詢並展示A表和C表中的某些欄位,但是A、C兩表沒有相同欄位,無法關聯,此時有B表恰好有兩個欄位,一個欄位和A表一個欄位相同,一個欄位和C表一個欄位相同,我們稱B表為「中間表」,因此通過B表把A、C表關聯起來
SELECT A1,A2,C1,C2 --展示A表中的A1\A2欄位和C表中的C1\C2
FROM B --中間表
INNER JOIN A ON A.A1 = B.B1 --A表中的與B表中相同的欄位
INNER JOIN C ON C.C1 = B.B1 --C表中的與B表中相同的欄位
where xxxxx ---條件你自己按照需求來加,沒有條件就不寫where了
9. 資料庫三表連接查詢怎麼做
1、創建三張測試表;
createtabletest_a(aidint,anamevarchar(20));
createtabletest_b(bidint,bnamevarchar(20));
createtabletest_c(aidint,bidint,valuevarchar(20));
2、三張表中分別插入數據;
insertintotest_avalues(1,'aname1');
insertintotest_bvalues(2,'bname1');
insertintotest_cvalues(1,2,'cvalue');
3、查詢表中記錄;
select10,a.*fromtest_aa
unionall
select20,b.*fromtest_bb
unionall
select*fromtest_cc;
4、編寫sql,進行三表關聯;
selecta.aname,b.bname,c.value
fromtest_ccjointest_aa
onc.aid=a.aid
jointest_bb
onc.bid=b.bid