join 用於根據兩個或多個表中的列之間的關係,從這些表中查詢資料。常見的有以下三種。
1.inner join (內連線或等值連線),獲取兩個表中字段匹配關係的記錄。
2.left join(左連線),獲取左表中的所有記錄,即使在右表沒有對應匹配的記錄。
3.right join(右連線),與 left join 相反,用於獲取右表中的所有記錄,即使左表沒有對應匹配的記錄。
新建兩張表,tb_author和tb_book,tb_author用於存放所有作者資訊,結構和資料如下。
tb_book用來存放書的一些資訊,結構和資料如下。
注意上面作者周彥偉在tb_book表中沒有書,以及編碼這本書的作者在tb_author作者資訊表中不存在。
組合兩個表中的記錄,只要在公共字段之中有相符的值就返回,如現在要獲取所有書列表,並且這本書的作者在tb_author中存在。
select tb_author.author_name,tb_book.book_name
from tb_author
inner
join tb_book
on tb_author.author_name=tb_book.book_author
以上sql語句執行結果如下,顯而易見沒有周彥偉,因為他沒有書記錄。
返回左表的全部行和右邊滿足條件的行,如果左表中的行在右表沒有匹配的,則右表中用null代替。
如現在獲取所有作者的所有出版的書,在表中周彥偉沒有出版的書,則理應返回null
select tb_author.author_name,tb_book.book_name
from tb_author
left
join tb_book
on tb_author.author_name=tb_book.book_author;
以上sql執行結果如下。
和left join相反,如現在要獲取所有書,在tb_author中沒有對應作者資訊的行則返回null。在上述表資料中,編碼這本書的作者資訊在tb_author中是沒有對應資訊的,理應返回null。
select tb_author.author_name,tb_book.book_name
from tb_author
right
join tb_book
on tb_author.author_name=tb_book.book_author;
以上sql執行結果如下。
如現在要檢視誰沒出版書,也就是left join配合 where篩選tb_book.book_name為null的人。
select tb_author.author_name,tb_book.book_name
from tb_author
left
join tb_book on
tb_author.author_name=tb_book.book_author
where tb_book.book_name is
null
以上結果執行如下。
同樣反過來檢視哪本書的作者在作者資訊表中不存在。
select tb_author.author_name,tb_book.book_name
from tb_author
right
join tb_book
on tb_author.author_name=tb_book.book_author
where tb_author.author_name is
null
;
以上結果執行如下。
必須掌握 MySQL索引原理
mysql官方對索引定義 是儲存引擎用於快速查詢記錄的一種資料結構。需要額外開闢空間和資料維護工作。索引是物理資料頁儲存,在資料檔案中 innodb,ibd檔案 利用資料頁 page 儲存。索引可以加快檢索速度,但是同時也會降低增刪改操作速度,索引維護需要代價。索引涉及的理論知識 二分查詢法 has...
必須掌握 MySQL查詢優化
開啟慢查詢日誌 檢視 mysql 資料庫是否開啟了慢查詢日誌和慢查詢日誌檔案的儲存位置的命令如下 show variables like slow query log 通過如下命令開啟慢查詢日誌 set global slow query log on set global slow query l...
必須掌握的排序
大神總結的很好。學而時習之,善於總結。非常恨那些把演算法排序之類的搞得異常麻煩的人,盡可能簡單一點,簡單了,容易理解了,才好記,上了戰場,才用得著.人家的不好用,只好自己總結,重寫原理與過程.口訣 冒泡 n 1,n i 1,比的是j與j 1 插入 n 1,i 1,比的是i 1與j 選擇 n,n,開始...