[TOC]
前面我們學習了sql語句的操作,但是我們大部分都是操作的單張表,大部分問題只有一張表是不能解決的。我們需要從多張表中獲得數據,或者通過其他表的數據刪除某個表的記錄等操作,這個時候就需要多表操作。在了解多表操作前我們先了解下表關系。
## 表關系
### 一對一關系
一個城市只能有一個區號這種關系是最簡單的一對一關系
一個人只能對應一個身份證號,這也是一對一關系
如果兩張表,一張存儲學生的基本信息,一張存學生的擴展信息,這種關系也是一對一。

### 一對多關系
在學校中,咱們一個班級有很多學生,但一個學生不會有多少班級,如果一個學生表,另外一張是班級表,那他們之間的關系就是一對多

### 多對多關系
在學校中,咱們一個班級有多個任課老師,同時一個老師可以去多個班任課,這種就是多對多關系,那么如果記錄這種關系呢,

## 笛卡爾積原理
在數學中,兩個集合X和Y的笛卡尓積(Cartesian product),又稱直積,表示為X × Y,第一個對象是X的成員而第二個對象是Y的所有可能有序對的其中一個成員。
假設集合A={a, b},集合B={0, 1, 2},則兩個集合的笛卡爾積為{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

~~~
mysql>select * from class,stu
~~~
但是單純的對兩個表的數據進行通過笛卡爾積獲得的所有數據,顯然這個結果是沒有意義的,所以我們要對以上查詢增加條件以產生有價值的數據集合。通過關聯字段來實現
~~~
mysql>select * from class,stu where class.cid=stu.cid;
mysql>select * from class as c ,stu as s where s.cid = c.id;
~~~
## INNER JOIN(內連接,或等值連接)
獲取兩個表中字段匹配關系的記錄。

~~~
mysql>select * from class c inner join stu s on c.id=s.cid;
~~~
## LEFT JOIN(左連接,外連接)
獲取左表所有記錄,即使右表沒有對應匹配的記錄。

~~~
mysql>select * from class c left join stu s on c.id=s.cid;
~~~
## RIGHT JOIN(右連接,外連接)
與 LEFT JOIN 相反,用于獲取右表所有記錄,即使左表沒有對應匹配的記錄。

~~~
mysql>select * from class c right join stu s on c.id=s.cid;
~~~
## 自連接
表和表自身進行檢索操作的方式為自連接
~~~
mysql>select s2.name from stu as s1 inner join stu as s2 on s1.cid=s2.cid where s1.name="李四";
~~~
>[danger]練習:檢索出李四都的所有老師
檢索出和李四同一班的學生
檢索出每個班級的學生數量
檢索出女生最多的班級
- 序言
- 第一章:準備工作
- 寫在學習之前的話
- web應用開發結構
- 開發工具/環境
- 第二章:展現層面(HTML/CSS)
- HTML簡介
- HTML基礎
- HTML編碼
- HTML鏈接
- HTML圖像
- HTML列表
- HTML表單
- HTML表格(分水嶺)
- HTML 實體
- HTML框架
- CSS層疊樣式表
- CSS選擇器
- CSS文本/字體
- CSS繼承和疊加
- CSS框模型
- CSS浮動(分水嶺)
- CSS定位
- CSS背景
- CSS圖標字體
- CSS補充
- 開發技巧
- 第三章:展現層面(Javascript)
- JS簡介
- JS實現
- JS輸出交互
- JS變量
- JS數據類型
- JS運算符
- JS流程控制(分水嶺)
- JS函數
- JS數組
- JS對象(分水嶺)
- JS數組對象
- JS字符串對象
- JS數學對象
- JS日期對象
- JS BOM對象(分水嶺)
- JS DOM對象
- JS事件對象
- JS元素對象
- JS DOM節點
- 第四章:展現層面(Jquery)
- JQ簡介
- JQ使用
- JQ選擇器
- JQ篩選
- JQ屬性
- JQ-CSS
- JQ事件
- JQ文檔處理
- JQ效果
- JQ-ajax
- 第五章:邏輯/業務層面(PHP)
- PHP簡介
- PHP變量
- PHP數據類型
- PHP常量
- PHP運算符
- PHP流程控制
- PHP函數(分水嶺)
- PHP日期
- PHP數學
- PHP數組
- PHP字符串
- PHP正則表達式(分水嶺)
- PHP目錄操作
- PHP文件
- PHP上傳/下載
- PHP面向對象(分水嶺)
- PHP圖像處理
- PHP會話控制
- Ajax異步處理
- PHPMysql擴展
- PHPMysqli擴展
- PHPPdo擴展
- PHP接口
- PHP命名空間
- 第六章:邏輯/業務層面(框架設計)
- 第七章:存儲層面(mysql)
- Mysql基礎
- Mysql Sql簡介
- Mysql數據庫
- Mysql數據類型
- Mysql數據表
- Mysql操作記錄
- Mysql查詢
- Mysql修改表結構
- Mysql日期與時間
- Mysql分組統計
- Mysql多表查詢
- Mysql安全
- Mysql存儲引擎
- Mysql事務
- Mysql視圖
- Mysql觸發器
- Mysql存儲過程
- Mysql存儲函數
- Mysql優化
- 第八章:服務器(Linux)
- Linux介紹與安裝
- Shell
- 目錄與文件操作
- VIM編輯器使用
- 帳號管理
- SUDO
- 權限控制
- 壓縮與打包
- 軟件安裝
- 計劃任務
- 進程管理
- 寶塔Linux面板