Mysql join連接查詢的語(yǔ)法與示例
連接查詢:
是將兩個(gè)查詢(或表)的每一行,以“兩兩橫同對(duì)接”的方式,所得到的所有行的結(jié)果,即一個(gè)表中的某行,跟另一個(gè)表中的某行。進(jìn)行“橫向?qū)印保玫揭粋€(gè)新行。
連接查詢包括以下這些不同形式,連接方式:
交叉連接、內(nèi)連接、外連接(分:左外連接,右外連接)
連接查詢語(yǔ)法:
select * from 表名 [連接方式] join 表名 [on 連接條件] where ...;
測(cè)試數(shù)據(jù):
mysql> select * from test; +----+--------+------+------+ | id | name | sex | age | +----+--------+------+------+ | 1 | name1 | 女 | 15 | | 2 | name1 | 女 | 15 | | 4 | name2 | 男 | 30 | | 5 | name50 | 男 | 12 | +----+--------+------+------+ mysql> select * from user; +----+-------+------+ | id | name | age | +----+-------+------+ | 1 | name1 | 18 | | 2 | name2 | 15 | | 3 | name3 | 20 | | 4 | name4 | 30 | +----+-------+------+
交叉連接 (cross join)
1、交叉連接其實(shí)可以認(rèn)為是連接查詢的“完全版本”, 即所有行都無(wú)條件地都連接起來(lái)。
2、關(guān)鍵字 “cross” 可以省略;
3、交叉連接又稱為“笛卡爾積”,通常應(yīng)用價(jià)值不大
語(yǔ)法形式:
select * from 表名, 表名;
select * from 表名 join 表名;
select * from 表名 cross join 表名;
規(guī)范的交叉連接寫(xiě)法
mysql> select * from test cross join user; +----+--------+------+------+----+-------+------+ | id | name | sex | age | id | name | age | +----+--------+------+------+----+-------+------+ | 1 | name1 | 女 | 15 | 1 | name1 | 18 | | 2 | name1 | 女 | 15 | 1 | name1 | 18 | | 4 | name2 | 男 | 30 | 1 | name1 | 18 | | 5 | name50 | 男 | 12 | 1 | name1 | 18 | | 1 | name1 | 女 | 15 | 2 | name2 | 15 | | 2 | name1 | 女 | 15 | 2 | name2 | 15 | | 4 | name2 | 男 | 30 | 2 | name2 | 15 | | 5 | name50 | 男 | 12 | 2 | name2 | 15 | | 1 | name1 | 女 | 15 | 3 | name3 | 20 | | 2 | name1 | 女 | 15 | 3 | name3 | 20 | | 4 | name2 | 男 | 30 | 3 | name3 | 20 | | 5 | name50 | 男 | 12 | 3 | name3 | 20 | | 1 | name1 | 女 | 15 | 4 | name4 | 30 | | 2 | name1 | 女 | 15 | 4 | name4 | 30 | | 4 | name2 | 男 | 30 | 4 | name4 | 30 | | 5 | name50 | 男 | 12 | 4 | name4 | 30 | +----+--------+------+------+----+-------+------+
直接使用 join 進(jìn)行連接,相當(dāng)于 cross join,默認(rèn)就是 交叉連接
mysql> select * from test join user;
查詢結(jié)果跟上面一致!!!
還可以直接 from 表,表... 也相當(dāng)于是交叉連接
mysql> select * from test, user;
查詢結(jié)果跟上面一致!!!
內(nèi)連接 (inner join)
1、內(nèi)連接其實(shí)是交叉連接的基礎(chǔ)上,再通過(guò) on 條件而篩選出來(lái)的部分?jǐn)?shù)據(jù)。
2、關(guān)鍵字 "inner" 可以省略,但建議寫(xiě)上,真正有意義的是 on 連接條件。
3、內(nèi)連接是應(yīng)用最廣泛的一種連接查詢,其本質(zhì)是根據(jù)條件篩選出“有意義的數(shù)據(jù)”。
語(yǔ)法形式:
select * from 表名 join 表名 on 連接條件;
select * from 表名 inner join 表名 on 連接條件;
查出兩個(gè)表中 name 字段相等的數(shù)據(jù)
mysql> select * from test inner join user on test.name=user.name; +----+-------+------+------+----+-------+------+ | id | name | sex | age | id | name | age | +----+-------+------+------+----+-------+------+ | 1 | name1 | 女 | 15 | 1 | name1 | 18 | | 2 | name1 | 女 | 15 | 1 | name1 | 18 | | 4 | name2 | 男 | 30 | 2 | name2 | 15 | +----+-------+------+------+----+-------+------+
查出兩個(gè)表中 name 字段相等的數(shù)據(jù),通過(guò) as 給表取個(gè)別名進(jìn)行使用
mysql> select * from test as t inner join user as u on t.name=u.name;
查詢結(jié)果跟上面一致!!!
查出兩個(gè)表中 name 字段相等,test 表中 age>15,user 表中 age>10 的數(shù)據(jù)
如果使用表中有重復(fù)的字段,那么就需要通過(guò) [表名.字段名] 來(lái)使用,例如 age :
mysql> select * from test inner join user on test.name=user.name where test.age>15 and user.age>10; +----+-------+------+------+----+-------+------+ | id | name | sex | age | id | name | age | +----+-------+------+------+----+-------+------+ | 4 | name2 | 男 | 30 | 2 | name2 | 15 | +----+-------+------+------+----+-------+------+
查出兩個(gè)表中 name 字段相等,且 sex='男' 的數(shù)據(jù)。
如果使用表中沒(méi)有重復(fù)的字段,那么可以通過(guò) [表名.字段名] 或者直接使用 [字段名] 使用,例如 sex :
mysql> select * from test as t inner join user as u on t.name=u.name where t.sex='男'; mysql> select * from test as t inner join user as u on t.name=u.name where sex='男'; +----+-------+------+------+----+-------+------+ | id | name | sex | age | id | name | age | +----+-------+------+------+----+-------+------+ | 4 | name2 | 男 | 30 | 2 | name2 | 15 | +----+-------+------+------+----+-------+------+
外連接 - 左外連接 (left join)
1、左外連接其實(shí)是保證左邊表的數(shù)據(jù)都能夠取出的一種連接 。
2、左外連接其實(shí)是在內(nèi)連接的基礎(chǔ)上,再加上左邊表中所有不能滿足條件的數(shù)據(jù)
3、關(guān)鍵字 “outer" 可以省略。
語(yǔ)法形式:
select * from 表名 left [outer] join on 連接條件 where ...;
以左邊的表為基準(zhǔn),保證左邊表的數(shù)據(jù)全部顯示,匹配不到的數(shù)據(jù)為 NULL
mysql> select * from test left join user on test.name=user.name; +----+--------+------+------+------+-------+------+ | id | name | sex | age | id | name | age | +----+--------+------+------+------+-------+------+ | 1 | name1 | 女 | 15 | 1 | name1 | 18 | | 2 | name1 | 女 | 15 | 1 | name1 | 18 | | 4 | name2 | 男 | 30 | 2 | name2 | 15 | | 5 | name50 | 男 | 12 | NULL | NULL | NULL | +----+--------+------+------+------+-------+------+
外連接 - 右外連接 (right join)
1、右外連接其實(shí)是保證右邊表的數(shù)據(jù)都能夠取出的一種連接 。
2、右外連接其實(shí)是在內(nèi)連接的基礎(chǔ)上,再加上右邊表中所有不能滿足條件的數(shù)據(jù)
3、關(guān)鍵字 “outer" 可以省略。
語(yǔ)法形式:
select * from 表名 right [outer] join on 連接條件 where ...;
以右邊的表為基準(zhǔn),保證右邊表的數(shù)據(jù)全部顯示,匹配不到的數(shù)據(jù)為 NULL
mysql> select * from test right join user on test.name=user.name; +------+-------+------+------+----+-------+------+ | id | name | sex | age | id | name | age | +------+-------+------+------+----+-------+------+ | 1 | name1 | 女 | 15 | 1 | name1 | 18 | | 2 | name1 | 女 | 15 | 1 | name1 | 18 | | 4 | name2 | 男 | 30 | 2 | name2 | 15 | | NULL | NULL | NULL | NULL | 3 | name3 | 20 | | NULL | NULL | NULL | NULL | 4 | name4 | 30 | +------+-------+------+------+----+-------+------+
總結(jié)
到此這篇關(guān)于Mysql join連接查詢的語(yǔ)法與示例的文章就介紹到這了,更多相關(guān)Mysql join連接查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MYSQL數(shù)據(jù)庫(kù)數(shù)據(jù)拆分之分庫(kù)分表總結(jié)
這篇文章主要介紹了MYSQL數(shù)據(jù)庫(kù)數(shù)據(jù)拆分之分庫(kù)分表總結(jié),需要的朋友可以參考下2016-07-07Linux連接mysql報(bào)錯(cuò):Access denied for user ‘root’@‘localhost’(usi
這篇文章主要給大家介紹了關(guān)于Linux連接mysql數(shù)據(jù)庫(kù)報(bào)錯(cuò):Access denied for user ’root‘@’localhost‘(using password: YES)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01詳解騰訊云CentOS7.0使用yum安裝mysql及使用遇到的問(wèn)題
本篇文章主要介紹了騰訊云CentOS7.0使用yum安裝mysql,詳細(xì)的介紹了使用yum安裝mysql及使用遇到的問(wèn)題,有興趣的可以了解一下。2017-01-01MySQL中關(guān)于臨時(shí)表的一些基本使用方法
這篇文章主要介紹了MySQL中關(guān)于臨時(shí)表的一些基本使用方法,是MySQL入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05淺析mysql.data.dll驅(qū)動(dòng)各版本介紹
本較詳細(xì)的給大家介紹了mysql.data.dll驅(qū)動(dòng)各版本的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07Idea連接MySQL數(shù)據(jù)庫(kù)出現(xiàn)中文亂碼的問(wèn)題
這篇文章主要介紹了Idea連接MySQL數(shù)據(jù)庫(kù)出現(xiàn)中文亂碼的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04詳解MySQL導(dǎo)出指定表中的數(shù)據(jù)的實(shí)例
這篇文章主要介紹了詳解MySQL導(dǎo)出指定表中的數(shù)據(jù)的實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09MySQL中CURRENT_TIMESTAMP時(shí)間戳的使用詳解
這篇文章主要給大家介紹了關(guān)于MySQL中CURRENT_TIMESTAMP時(shí)間戳的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03通過(guò)唯一索引S鎖與X鎖來(lái)了解MySQL死鎖套路
毫不夸張的說(shuō),有一半以上的死鎖問(wèn)題由唯一索引貢獻(xiàn),后面介紹的很多死鎖的問(wèn)題都跟唯一索引有關(guān)。這次我們講一段唯一索引 S 鎖與 X 鎖的案例,下面小編來(lái)和大家一起學(xué)習(xí)一下2019-05-05