一粥帚、等值連接 .....=......
select * from 表1 as b1胰耗,表2 as b2 where b1.字段=b2.字段
再有其他條件,直接加在后邊即可
select * from stu,course,score
where stu.stuid=score.stuid and course.cid=score.cid
- 必須要出現(xiàn)后邊的等值條件芒涡,按照=的兩邊柴灯,取交集
- 不會出現(xiàn)新表,只是一個顯示結果
- 先連接成一個笛卡爾積(生成記錄總數(shù)=表1的總數(shù)*表2的總數(shù))费尽,在根據(jù)條件篩選
- 會產(chǎn)生臨時表赠群,占內(nèi)存
二、內(nèi)連接 inner join.....on.......
select * from 表1
inner join 表2 on 表1.字段=表2.字段
where 條件
order by .....
limit ....
select * from stu
inner join score on where stu.stuid=score.stuid
inner join course on course.cid=score.cid
where stu.name='王昭君'
#先兩個表連接旱幼,在和第三個表連接
#*要寫成列名時查描,列名要加前綴表明是哪個表的,有重復的
#起別名柏卤,只能用別名
- 先根據(jù)條件篩選冬三,在連接兩個表
- 不會產(chǎn)生臨時表,不占內(nèi)存缘缚,性能高一些
三勾笆、左連接 left join.....on.....
select * from 表1
left join 表2 on 表1.字段=表2.字段
select * from stu
left join score on where stu.stuid=score.stuid
#join前邊生成的結果作為左表
left join course on course.cid=score.cid
#查詢所有學生的成績,包括沒有成績的學生桥滨,需要顯示課程名
- join前面生成的結果作為左邊窝爪,join后面的是右表,把左表的數(shù)據(jù)全部顯示
- 取左表所有結果该园,右表有符合的連接到一起成一條數(shù)據(jù)酸舍,沒有符合的右表部分字段就都填上null成一條數(shù)據(jù)
- 和內(nèi)連接的區(qū)別就是,內(nèi)連接沒找到符合的不會顯示null,該條不會存在表中里初,所以只要有右表不符合的情況啃勉,左表結果不會全部顯示
四、右連接 right join....on.....
select * from 表1
right join 表2 on 表1.字段=表2.字段
select * from score
right join course on where course.cid=score.cid
left join stu on stu.stuid=score.stuid
#查詢所有課程的成績双妨,包括沒有成績的課程淮阐,需要顯示學生信息
- join前面生成的結果作為左邊,join后面的是右表刁品,把右表的數(shù)據(jù)全部顯示
- 取右表所有結果泣特,左表有符合的連接到一起成一條數(shù)據(jù),沒有符合的左表部分字段就都填上null成一條數(shù)據(jù)
使用左右連接(題目中包含所有挑随,沒有字眼需要用到左右連接)
- 只要明白那個是左表状您、右表;
- 那個需要所有結果;
- 那個需要null值膏孟;
五眯分、自關聯(lián)
-
一個表關聯(lián)多次
select * from areas as sheng,areas as shi
where sheng.aid=shi.pid
select * from areas as sheng,areas as shi,areas as qu
where sheng.aid=shi.pid and shi.aid=qu.pid
- 數(shù)據(jù)之間有上下級關系
- 在一個表中存儲所有數(shù)據(jù)
- 從一個表中查詢多次柒桑,必須起別名