1. 程式人生 > >MySql(三)之多表查詢

MySql(三)之多表查詢

##概述

本篇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

說明:

  1. 此時分別給student和score分別起了別名st和sc。
  2. 此時cross join關鍵詞可以省略,使用逗號隔開即可。
  3. 此時查詢我們需要的欄位即可。

##內連線查詢

內連線使用關鍵詞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表中的資料。