Mysql資料庫表連線
轉自:http://blog.sina.com.cn/s/blog_634c33eb01010tuw.html
連線查詢方式有:
內連線、外連線(左連線、右連線、全連線)、交叉連線
具體如下:
一、內連線
內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的列值。內連線分三種:
1、等值連線:在連線條件中使用等於號(=)運算子比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列。
2、不等連線:在連線條件使用除等於運算子以外的其它比較運算子比較被連線的列的列值。這些運算子包括>、>=、<=、<、!>、!<、!=和<>。
3、自然連線:在連線條件中使用等於(=)運算子比較被連線列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連線表中的重複列。
二、外連線
返回到查詢結果集合中的不僅包含符合連線條件的行,而且還包括左表(左外連線時)、右表(右外連線時)或兩個邊接表(全外連線)中的所有資料行。
三、交叉連線
交叉連線不帶WHERE 子句,它返回被連線的兩個表所有資料行的笛卡爾積,返回到結果集合中的資料行數等於第一個表中符合查詢條件的資料行數乘以第二個表中符合查詢條件的資料行數。例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連線檢索到的記錄數將等於6*8=48行。
第二部分、例項說明
例項
Book表:
資料庫表與表連線的方式(內連線、外連線[左連線、右連線、全連線]、交叉連線)
Student表:
資料庫表與表連線的方式(內連線、外連線[左連線、右連線、全連線]、交叉連線)
一、內連線
select *
from [Book] as b,[Student] as s
where b.StudentId=s.StudentId
等價於如下(也可以不要關鍵字inner,此為系統預設),但這種方法不能再用left join等外連線了
select *
from [Book] as b inner join [Student] as s
ON b.StudentId=s.StudentId
這種方法還可以加and條件,並且後面可能接著用left join等外連線
資料庫表與表連線的方式(內連線、外連線[左連線、右連線、全連線]、交叉連線)
執行過程
相當於內連線的向右連線。以from [Book] inner join [Student]等式右邊為基準,即以Student表(等式右表,s表)的s.StudentId為基準,遍歷Book表(等式左表,Book表)中與之匹配的b.StudentId,然後拼接返回。結果含有重複的列,b.StudentId和s.StudentId。
說明這與where b.StudentId=s.StudentId或者s.StudentId=b.StudentId位置沒有關係。它僅僅代表滿足條件而已,不判定誰為基準。以下外連線,交叉連線相同操作。
二、外連線
1、左外連線
程式碼
select *
from [Book] as b left join [Student] as s
ON b.StudentId=s.StudentId
結果
資料庫表與表連線的方式(內連線、外連線[左連線、右連線、全連線]、交叉連線)
執行過程
即以from [Book] left join [Student]的Book表為基準,即以Book表(b表)的b.StudentId為基準。遍歷Student表(s表)中與之匹配的b.StudentId。若b.StudentId含有s.StudentId匹配項,則進行拼接,然後遍歷Student表的下一條s.StudentId,當查詢完畢則進入下一條b.StudentId。若b.StudentId沒有相應s.StudentId匹配項時,則顯示左表的項,拼接右表的項顯示為NULL。
2、右外連線
程式碼
select *
from [Book] as b right join [Student] as s
ON b.StudentId=s.StudentId
結果
資料庫表與表連線的方式(內連線、外連線[左連線、右連線、全連線]、交叉連線)
執行過程
即以from [Book] right join [Student]的Student表為基準,即以Student表(s表)的s.StudentId為基準。遍歷Book表(b表)中與之匹配的s.StudentId。若s.StudentId含有b.StudentId匹配項,則進行拼接,然後遍歷Book表的下一條b.StudentId,當查詢完畢則進入下一條s.StudentId。若s.StudentId沒有相應b.StudentId匹配項時,則顯示右表的項,拼接左表的項顯示為NULL。
3、全外連線
程式碼
select *
from [Book] as b full outer join [Student] as s
ON b.StudentId=s.StudentId
結果
資料庫表與表連線的方式(內連線、外連線[左連線、右連線、全連線]、交叉連線)
執行過程
即以from [Book] full outer join [Student]中先以Book表進行左外連線,然後以Student表進行右外連線。
三、交叉連線
程式碼
select *
from [Book] as b CROSS Join [Student] as a
Order by b.BookId
結果
資料庫表與表連線的方式(內連線、外連線[左連線、右連線、全連線]、交叉連線)
執行過程
即是按照Order排序的Id,把要Join的右表無條件拼接過來。這樣依次執行,這樣這種記錄便為兩個表的記錄的笛卡爾積。
左連線和右連線的區別:
左連線以左表為基準進行查詢,左表資料會全部顯示出來,右表如果和左表匹配的資料則顯示相應欄位的資料,如果不匹配,則顯示為NULL;右連線剛好相反。
全連線就是先以左表進行左外連線,然後以右表進行右外連線。
說明:所謂的基準,就是以某張表的限制條件查詢條件為準!
相關文章
- 連線mysql資料庫MySql資料庫
- 連線資料庫-mysql資料庫MySql
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- django | 連線mysql資料庫DjangoMySql資料庫
- 如何連線MySQL資料庫MySql資料庫
- pycharm連線MySQL資料庫PyCharmMySql資料庫
- PHP連線MySql資料庫PHPMySql資料庫
- mysql資料庫連線(MySQLdb)MySql資料庫
- Weka 連線MySQL資料庫MySql資料庫
- java連線mysql資料庫JavaMySql資料庫
- Ruby連線MySQL資料庫MySql資料庫
- (轉)PHP連線資料庫之PHP連線MYSQL資料庫程式碼PHP資料庫MySql
- Django 2連線MySQL資料庫DjangoMySql資料庫
- mysql資料庫怎麼連線MySql資料庫
- 遠端連線mysql資料庫MySql資料庫
- 【JavaWeb】JDBC連線MySQL資料庫JavaWebJDBCMySql資料庫
- 用thinkphp連線mysql資料庫PHPMySql資料庫
- Python連線MySQL資料庫PythonMySql資料庫
- 使用cmd連線mysql資料庫MySql資料庫
- python資料插入連線MySQL資料庫PythonMySql資料庫
- Django使用pymysql連線MySQL資料庫DjangoMySql資料庫
- MySql資料庫連線池專題MySql資料庫
- 使用PETAPOCO連線MYSQL資料庫MySql資料庫
- 精PHP與MYSQL資料庫連線PHPMySql資料庫
- mysql資料庫連線池配置教程MySql資料庫
- PHP連線、查詢MySQL資料庫PHPMySql資料庫
- Pycharm 怎麼連線 MySQL 資料庫PyCharmMySql資料庫
- Spring JPA資料庫連線MySQLSpring資料庫MySql
- 使用ABP EntityFramework連線MySQL資料庫FrameworkMySql資料庫
- R語言連線資料庫(MySQL)R語言資料庫MySql
- MFC 使用VS 連線 MySQL資料庫MySql資料庫
- WAMP無法連線mysql資料庫MySql資料庫
- MySQL 簡潔連線資料庫方式MySql資料庫
- MyGeneration連線MySQL資料庫解決MySql資料庫
- php連線mysql資料庫基礎PHPMySql資料庫
- Java連線Mysql資料庫攻略二JavaMySql資料庫
- 連線別人的MySql資料庫MySql資料庫
- 【MySQL】自定義資料庫連線池和開源資料庫連線池的使用MySql資料庫