MySql(三)之多表查詢
阿新 • • 發佈:2018-12-11
##概述
本篇blog主要講解多表查詢,包括連線查詢和子查詢,連線又分為交叉連線,內連線,外連線,外連線又分為左外連線和右外連線。
本篇blog主要以student表和score表為例說明多表查詢的操作。
student表結構如下:
create table student (
id int(11) primary key auto_increment,
name varchar(100) default '',
age int(11) default 0
);
student表的測試資料如下:
score表結構如下:
create table student ( id int(11) primary key auto_increment, student_id int(11), type varchar(100) default '', score int(11) default 0 );
score表的測試資料如下:
##交叉查詢
交叉查詢使用cross join關鍵詞。使用示例如下:
select * from student cross join score
得到的結果如下:
說明:此時得到的資料共12行,7列。這是一種笛卡爾積運算,即行數為兩錶行數相乘,列說為之前兩列相加。
這種使用者顯然沒有絲毫意思,但我們新增where條件後,就變得有意義了,如下:
select * from student st cross join score sc where st.id = sc.student_id
結果如下:
此時可以清晰的看到每個學生的各個成績。
在開發中最常用的是下面語句:
select st.name,st.age,sc.type,sc.score from student st,score sc where st.id = sc.student_id
說明:
- 此時分別給student和score分別起了別名st和sc。
- 此時cross join關鍵詞可以省略,使用逗號隔開即可。
- 此時查詢我們需要的欄位即可。
##內連線查詢
內連線使用關鍵詞inner join。sql示例如下:
select * from student st inner join score sc on st.id = sc.student_id
此時得到的結果如下:
注:這種方式與交叉連線得到的結果相同。所以這種方式很少使用。
##外連線查詢
外連線分為左外連線和右外連線。
##左外連線
左外連線使用關鍵詞:left outer join。示例如下:
select * from student st left outer join score sc on st.id = sc.student_id
得到的結果如下:
說明:左外連線會獲取左邊的所有資料。
##右外連線
左外連線使用關鍵詞:right outer join。示例如下
select * from student st right outer join score sc on st.id = sc.student_id
得到的結果如下:
說明:右外連線會獲取右邊的所有資料。
##巢狀查詢
巢狀查詢也叫子查詢,示例如下:
select * from score where student_id in (select id from student where name='guoxiang')
得到的結果如下:
說明:此時先根據name從student表中獲取id,然後根據student_id獲取score表中的資料。