資料庫學習(四)連線查詢
基本概念:
就是將兩個或兩個以上的表,“連線起來”,當做一個資料來源,並從中去取得所需要的資料;
到底怎麼連線?
將每一個表的每一行資料兩兩之間相互對接起來,每次對接的結果都是連線結果的“一行”資料;
示例:
先看原始資料:
然後,將他們進行“連線”:
他們其實這樣這樣的方式連線起來的結果資料:
這種沒有條件的連線,也可以寫成這樣:
select * from 表1, 表2;
select * from 表1 join 表2;
select * from 表1 cross join 表2;
其實他們都叫做“交叉連線”;其實i就是沒有條件的連線——全部連線起來了;
連線基本形式:
在程式碼級別,連線的基本形式為:
表1 【連線形式】 join 表2 【on 連線條件】;
如果是3個表,則進一步擴充套件為:
表1 【連線形式】 join 表2 【on 連線條件】 【連線形式】 join 表3 【on 連線條件】
更多表,依次類推;
連線的分類
主要分為以下幾種:
交叉連線 cross join:
其實就是剛才講連線的基本概念的時候的連線形式(結果)——它沒有條件,只是按連線的基本概念,將所有資料行都連線起來的結果。它又叫做“笛卡爾積”;
對於表1(n1個欄位,n2行),表2,(m1個欄位,m2行),他們交叉連線的結果是:
有n1+m1個列;
有n2*m2個行;
形式有:
select * from 表1, 表2;
select * from 表1 join 表2;
select * from 表1 cross join 表2;
內連線 inner join:
形式:
select * from 表1 【inner】 join 表2 on 連線條件;
先來研究沒有條件的“內連線”(其實就是交叉連線)的結果:
結果:
其中框框內的“資料行”,是正確的,有意義的資料。而其他行就是錯誤的資料。
這些有意義的資料的一個特點,就是,所標示出的兩個欄位的值相等:
該兩個欄位,分別來源於兩個參與連線的表;
我們的內連線,就是要找出這樣的一些有意義的資料,如下所示:
結果為:
可見,這裡查詢的結果,都是前述查詢(交叉連線)中,有意義的那些資料!
其中 product.protype_id = product_type.protype_id 被稱為“連線條件”,它基本上就是我們之前所學的“外來鍵關係”的一個描述。
注意:
這種的表跟表之間的內連線查詢,雖然可以體現為表跟表之間的“關係”——通常就是外來鍵關係——但並不是有外來鍵關係才能使用這種連線。
另外的一些變通形式:
可見,資料表也可以使用“as 別名”的形式來取別名;
左(外)連線 left (outer) join:
形式:
表1(左表) left 【outer】 join 表2(右表) on 連線條件
含義:
其實就是將兩個表的內連線的結果,再加上左邊表的不符合內連線所設定的條件的那些資料的結果;
舉例:
結果:
可見,左連線的結果,左邊表的資料,一定都會“全部取出”;
右(外)連線 right (outer) join:
形式:
表1(左表) right 【outer】 join 表2(右表) on 連線條件
含義:
其實就是將兩個表的內連線的結果,再加上右邊表的不符合內連線所設定的條件的那些資料的結果;
舉例:
結果:
全(外)連線 full (outer) join:
形式:
沒有形式,因為mysql不支援全連線的語法;
含義:
其實就是將兩個表的內連線的結果,再加上左邊表的不符合內連線所設定的條件的那些資料的結果,以及再加上右邊表的不符合內連線所設定的條件的那些資料的結果;
連線查詢舉例:
例1:對商品表:
查出每個品種各有多少個商品:
結果為:
例2:對學生院系表:
(先要匯入相關資料,如下所示:)
語法如下:
結果為:
相關文章
- go 連線資料庫 - GORM學習 - sql查詢Go資料庫ORMSQL
- 深圳軟體測試學習:【資料庫】-【oracle】-連線查詢資料庫Oracle
- PHP連線、查詢MySQL資料庫PHPMySql資料庫
- MySQL學習-連線查詢MySql
- 【從零開始學習Oracle資料庫】(3)函式與子查詢和連線查詢Oracle資料庫函式
- 【從零開始學習 MySql 資料庫】(3) 函式與子查詢和連線查詢MySql資料庫函式
- 資料庫學習(五)子查詢資料庫
- 資料庫學習(三)基本查詢資料庫
- 【資料庫】查詢優化之子連線優化資料庫優化
- 通用資料庫/源連線管理分析查詢DBeaverEE資料庫
- CDA資料分析師 - SQL資料庫基礎 查詢&連線SQL資料庫
- php基礎之連線mysql資料庫和查詢資料PHPMySql資料庫
- 資料庫學習(六)聯合查詢union資料庫
- Mybatis學習01:利用mybatis查詢資料庫MyBatis資料庫
- 資料庫學習筆記之查詢表資料庫筆記
- 《四 資料庫連線池原始碼》手寫資料庫連線池資料庫原始碼
- MYSQL學習筆記23: 多表查詢(自連線內連線+左右外連線)MySql筆記
- SQL Server實戰四:查詢資料庫的資料SQLServer資料庫
- MySql中的資料查詢語言(DQL)三:連線查詢MySql
- laravel 5.8 連線資料庫庫查詢 資料 速度慢,使用mysql 直接查詢響應就快,什麼原因呢?Laravel資料庫MySql
- 【學習】SQL基礎-006-多表連線查詢SQL
- 3.DQL資料查詢語言(內連線,外連線,自連線)
- MySQL資料庫學習筆記02(事務控制,資料查詢)MySql資料庫筆記
- 連線查詢
- mysql資料庫連表查詢的幾種方法MySql資料庫
- 資料庫高階查詢之子查詢資料庫
- Jemter查詢資料庫資料庫
- 求助:資料庫查詢資料庫
- ThinkPHP 資料庫查詢PHP資料庫
- 資料庫排序查詢資料庫排序
- 查詢資料庫大小資料庫
- oracle 連線查詢Oracle
- SQL連線查詢SQL
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- sql 連線查詢例項(left join)三表連線查詢SQL
- 連線資料庫資料庫
- 資料庫基礎查詢--單表查詢資料庫
- T-SQL——關於跨庫連線查詢SQL