1. 程式人生 > 其它 >sql查詢進階操作-多表查詢

sql查詢進階操作-多表查詢

資料庫的進階操作

一:連線查詢1)內連線 inner join

內連線:使用語法 表一 inner join 2 on 欄位1 = 欄位2
//在查詢中需要將兩張表存在對應關係的資料全部顯示出來,需要使用內連線,內連線顯示兩張表中存在對應關係的全部資料,沒有對應關係的資料不顯示
內連線使用前提:有兩張表,只顯示兩張表中某個欄位值相同的資料,每有相同欄位值的資料不顯示
eg:現有學生表和學生住址表,兩個表中的學號是存在對應關係,按照學號進行查詢學生的所有資訊
select * from student inner join studentaddress on student.studentid = studentaddress.student
//注意在使用內連線時on後面跟的表名與欄位名之間是有個點的,不是逗號是點

二:連線查詢通知識點

1:對連結後的表進行顯示欄位限制
select 1.欄位名 , 2.欄位名 from 1inner join 2on 1.欄位名 = 2.欄位名
eg:現有學生表和學生住址表,需要查詢他們的姓名,班級。聯絡電話和住址
select student.studentName as 姓名,student.studentClass as 班級,studentaddress.tal as 聯絡電話,studentaddress.address as 家庭住址 from student inner join studentaddress on student.studentid = studentaddress.studentid;
2:在連線查詢中往往會用到起別名的方式去縮短表名。給表單獨創造空間
eg
select st.studentName as 姓名,st.studentClass as 班級,ad.tal as 聯絡電話,ad.address as 家庭住址 from student st inner join studentaddress ad on st.studentid = ad.studentid;

三:連線查詢2)左連線 left join

左連線:以left join為界 關鍵字左邊表的資訊要全部顯示出來,關鍵字右邊表中只顯示有對應關係的欄位,沒有對應關係的欄位以null佔位填充即可
eg:select * from student left join studentaddress on student.studentid = studentaddress.studentid;

四:連線查詢3)右連線 right join

右連線主要解決三張及以上表查詢時常見
以right join為界,關鍵字左邊有關聯關係的對應欄位全部顯示,沒有關聯關係的欄位值不顯示以null填充,關鍵字右邊所有欄位全部顯示
右連線正好是與左連線相反的
eg:select * from student right join studentaddress on student.studentid = studentaddress.studentid;

連線查詢總結

一:內連線:匹配兩張表中右關聯關係的欄位值
二:左連線,關鍵字左邊所有欄位值全部限制,關鍵字右邊只顯示有關聯關係的欄位值,沒有關聯關係的欄位值以null進行填充
三:右連線,關鍵字右邊所有欄位值都顯示,關鍵字左邊只顯示右關聯關係的欄位值,沒有關聯關係以null進行填充
四:連線查詢的實質:只是將分佈於多張表的資料,通過連線的方式進行整理,形成資料來源
連線操作完成後,之前所有的查詢方法都可以使用
具體連線方法要根據實際工作時進行選擇
//注意:使用內連線時,要注意他的特性“如果兩張表之間有部分欄位沒有對應關係,那麼將不會顯示出來”

五:自關聯

特徵:只有一張表,表中最少有兩個欄位具備對應關係
步驟:通過起別名的方式將一張表變為兩張表,通過欄位的對應關係,進行條件對比,實現連線查詢
eg:有一張城市表,包含若干城市,現在需要查詢河南省所有城市
select * from areas a1 inner join areas a2 on a1.aid = a2.pid where a1.atitle = '河南省';
//注意:不要漏寫表名,否則會報錯欄位不明確
eg:查詢河南省所有的市區
select * from areas a inner join areas b on a.aid = b.pid left join areas c on c.aid = b.pid where a.atitle='河南省';

六:子查詢

在一條查詢語句中,利用另一條語句作為條件或資料來源,充當條件或資料來源的語句稱為子查詢
注意:子查詢語句在使用時無比使用括號括起來

子查詢-充當條件

eg:查詢商品價格超過平均價格的商品
//首先查商品的平均價格,在使用平均價格作為條件,對比高於平均價的商品
--查詢商品平均價格
select avg(price) from goods/得出平均價格為68.333
--在使用查詢出的平均價格作為條件,去查詢高於平均價格的商品和價格
select goodsName,price from goods where price >68.333;
--使用子查詢
select goodsName,price from goods where price >(select avg(price) from goods);
//猶如數學計算一樣,先查詢括號裡面的,在將括號裡面的結果作為條件查詢括號外面的

子查詢-充當資料來源

eg:查詢所有來自並夕夕的商品包含商品分類
實現步驟:先查詢所有商品,在查詢所有商品分類,在進行篩選出屬於並夕夕的商品
--查詢所有商品和所有分類
select * from goods;
select * from category;
--篩選出屬於並夕夕的商品
select * from goods where company='並夕夕';
--實現子查詢作為資料來源
select * from category F inner join (select * from goods where company="並夕夕") G on F.typeId = g.typeId
//解釋:現在有兩張表,一張表中包含商品資訊,一張表中包含商品分類,這兩張表的有個欄位資訊是有關聯的,那麼在表1中我麼要篩選出要求的公司產品,再將表1的結果作為第三張表與表二進行內連線查詢出商品所屬分類