数据库多表链接查询的方式
大家好,在日常學(xué)習(xí)中分享一下所學(xué)的筆記,希望可以幫助到大家~
本篇將多表聯(lián)查分為三部分來介紹:
1. 通過Select子句進(jìn)行查詢
2.? 通過內(nèi)連接 inner join進(jìn)行查詢
3. 通過外連接left join,left outer join,right join,right outer join,union進(jìn)行查詢
?
一、通過SELECT子句進(jìn)行多表查詢
語法:
select ?字段名 ?
from 表1,表2 …
where 表1.字段 = 表2.字段
and?其它查詢條件
例:以學(xué)生表student和班級表class為例
Select? ?student.sid,? student.sname,? student.classid, class.classid,? class.classname
from student,class
where student.classid = class.classid
注意:上面的代碼中,以兩張表相同的字段信息作為條件,進(jìn)行兩個表聯(lián)查,但在實際開發(fā)中不建議這樣使用,最好用主外鍵約束來實現(xiàn)。
二、通過內(nèi)連接 inner join進(jìn)行查詢
語法:
select ?字段名 ?
from 表1
inner join 表2
on?表1.字段 = 表2.字段
例:以學(xué)生表student和班級表class為例
select? ?student.sid,? student.sname,? student.classid, class.classid,? class.classname
from student
inner join class
on student.classid = class.classid
這種場景下得到的是滿足某一條件的student,class內(nèi)部的數(shù)據(jù);正因為得到的是內(nèi)部共有數(shù)據(jù),所以連接方式稱為內(nèi)連接。
三、通過外連接left join,left outer join,right join,right outer join,union進(jìn)行查詢
1.left join
語法:
select ?字段名 ?
from 表1
left join 表2
on?表1.字段 = 表2.字段
例:以學(xué)生表student和班級表class為例
select? ?student.*? , class.*
from student
left join class
on student.classid = class.classid
結(jié)果如下,class表中不存在的記錄填充Null:
這種場景下得到的是student的所有數(shù)據(jù),和滿足某一條件的class的數(shù)據(jù);
2.left outer join(相當(dāng)于left join? + ?[where 表2.字段 is null])
語法:
select 字段名 ?
from 表1
left join 表2
on?表1.字段 = 表2.字段
where?表2.字段 is?null
例:以學(xué)生表student和班級表class為例
select? ?student.sid,student.sname,class.classid,class.classname
from student
left join class
on student.classid = class.classid
where class.classid is null
這種場景下得到的是student中的所有數(shù)據(jù)減去"與class滿足同一條件 的數(shù)據(jù)",然后得到的student剩余數(shù)據(jù)?
3.right join
語法:
select ?字段名 ?
from 表1
right? join 表2
on?表1.字段 = 表2.字段
例:以學(xué)生表student和班級表class為例
select? student.*? , class.*
from student
right join class
on student.classid = class.classid
?這種場景下得到的是class的所有數(shù)據(jù),和滿足某一條件的student的數(shù)據(jù);
4.right outer join(相當(dāng)于right join? + ?[where 表1.字段 is null])
語法:
select 字段名 ?
from 表1
right join 表2
on?表1.字段 = 表2.字段
where?表1.字段 is?null
例:以學(xué)生表student和班級表class為例
select? ?student.sid,student.sname,class.classid,class.classname
from student
right join class
on student.classid = class.classid
where student.classid is null
這種場景下得到的是class中的所有數(shù)據(jù)減去 "與student滿足同一條件 的數(shù)據(jù)“,然后得到的class剩余數(shù)據(jù);
4.left join ?union right join
語法:
select ?字段名 ?
from 表1
left join 表2
on?表1.字段 = 表2.字段
union
select ?字段名 ?
from 表1
right? join 表2
???????on?表1.字段 = 表2.字段
例:以學(xué)生表student和班級表class為例
select? ?student.*? , class.*
from student
left join class
on student.classid = class.classid
union
select? student.*? , class.*
from student
right join class
on student.classid = class.classid
?這種場景下得到的是滿足某一條件的公共記錄,和獨有的記錄
以上分享希望能幫到你,有錯誤及時指正哦~?
總結(jié)
以上是生活随笔為你收集整理的数据库多表链接查询的方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio最好用的快捷键
- 下一篇: 数据库--多表查询