唉今天面試問了個表連接的問題沒有答上來,好桑心,這東西敲一敲就會啦,真是的,整理一下吧
數(shù)據(jù)庫表如下:
SC(Sid,Cid,score)成績表
Sid:學(xué)號
Cid:編號
score:成績
Student(Sid,Sname,Sage,Ssex)學(xué)生表
Sid:學(xué)號
Sname:學(xué)生姓名
Sage:學(xué)生年齡
Ssex:學(xué)生性別
Course(Cid,Cname,Tid)課程表
Cid:課程編號
Cname:課程名稱
Tid:教師編號
Teacher(Tid,Tname)教師表
Tid:教師編號
Tname:教師名字
1. 插入數(shù)據(jù)到SC數(shù)據(jù)庫
insert into SC(Sid,Cid,score) values ('201043192','001','53')

2. 更新SC數(shù)據(jù)庫數(shù)據(jù)
update SC set Cid='003' where Sid='201043192'

3. 創(chuàng)建表
create table SC(Sid char(10),Cid char(5),score int(3))
4. 查詢學(xué)生成績>60的同學(xué)的學(xué)號和平均成績
select Sid,avg(score) as avgscore from SC group by Sid having avgscore>60

由于平均成績是分組之后才查詢出來的,所以必須先分組(group by)再取平均值,group by除了可以取平均值,還可以取sum(),min(),max(),count(*)
下面重點說下表的連接:
連接方式分三種,內(nèi)連接,外連接,交叉連接.
內(nèi)連接用inner join 取兩個表的交集
外連接包括左(外)連接和右(外)連接和全外連接
左外連接以左邊的表為主表 left join
右外連接以右邊的表為主表 right join
全外連接是取兩個表的并集 full join
交叉連接是取兩個表的笛卡爾積 cross join
下面說下常用的:一個內(nèi)連接+兩個外連接
tableA(sid,sname)

tableB(sid,score)

1. 查詢所有同學(xué)的學(xué)號,姓名(使用內(nèi)連接)
select tableA.sid,sname
from tableA inner join tableB
on tableA.sid=tableB.sid

內(nèi)連接取交集
2. 查詢所有同學(xué)的學(xué)號,姓名(使用左連接)
select tableA.sid,sname
from tableA left join tableB
on tableA.sid=tableB.sid

注意:左連接時,當(dāng)sid兩個表都有時,要標(biāo)注是哪個表的sid,要使用左表.sid,因為左連接時,是以左邊的表為基礎(chǔ),連接右邊的表,左邊表的數(shù)據(jù)應(yīng)該全部顯示,即使對應(yīng)的右邊表中某字段對應(yīng)的值有空數(shù)據(jù),也要全部顯示左邊的數(shù)據(jù),右邊的數(shù)據(jù)會以左邊表數(shù)據(jù)為基礎(chǔ)顯示
3. 查詢所有同學(xué)的學(xué)號,姓名(使用右連接)
select tableB.sid,sname
from tableA right join tableB
on tableA.sid=tableB.sid

右連接時,當(dāng)sid兩個表都有時,要標(biāo)注是哪個表的sid,要使用右表.sid,因為右連接就是以右邊的表為基礎(chǔ),連接左邊的表,右邊表的數(shù)據(jù)會全部顯示,即使對應(yīng)的左邊的表種某字段對應(yīng)的值有空數(shù)據(jù),也要全部顯示右邊表的數(shù)據(jù),左邊的數(shù)據(jù)會以右邊表數(shù)據(jù)為基礎(chǔ)顯示