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表中的數據。

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章