Mysql join連接查詢語法的使用?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
連接查詢:
是將兩個查詢(或表)的每一行,以“兩兩橫同對接”的方式,所得到的所有行的結果,即一個表中的某行,跟另一個表中的某行。進行“橫向對接”,得到一個新行。
連接查詢包括以下這些不同形式,連接方式:
交叉連接、內連接、外連接(分:左外連接,右外連接)
連接查詢語法:
select * from 表名 [連接方式] join 表名 [on 連接條件] where ...;
測試數據:
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、交叉連接其實可以認為是連接查詢的“完全版本”, 即所有行都無條件地都連接起來。
2、關鍵字 “cross” 可以省略;
3、交叉連接又稱為“笛卡爾積”,通常應用價值不大
語法形式:
select * from 表名, 表名;
select * from 表名 join 表名;
select * from 表名 cross join 表名;
規范的交叉連接寫法
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 進行連接,相當于 cross join,默認就是 交叉連接
mysql> select * from test join user;
查詢結果跟上面一致!!!
還可以直接 from 表,表... 也相當于是交叉連接
mysql> select * from test, user;
查詢結果跟上面一致!!!
內連接 (inner join)
1、內連接其實是交叉連接的基礎上,再通過 on 條件而篩選出來的部分數據。
2、關鍵字 "inner" 可以省略,但建議寫上,真正有意義的是 on 連接條件。
3、內連接是應用最廣泛的一種連接查詢,其本質是根據條件篩選出“有意義的數據”。
語法形式:
select * from 表名 join 表名 on 連接條件;
select * from 表名 inner join 表名 on 連接條件;
查出兩個表中 name 字段相等的數據
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 | +----+-------+------+------+----+-------+------+
查出兩個表中 name 字段相等的數據,通過 as 給表取個別名進行使用
mysql> select * from test as t inner join user as u on t.name=u.name;
查詢結果跟上面一致!!!
查出兩個表中 name 字段相等,test 表中 age>15,user 表中 age>10 的數據
如果使用表中有重復的字段,那么就需要通過 [表名.字段名] 來使用,例如 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 | +----+-------+------+------+----+-------+------+
查出兩個表中 name 字段相等,且 sex='男' 的數據。
如果使用表中沒有重復的字段,那么可以通過 [表名.字段名] 或者直接使用 [字段名] 使用,例如 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、左外連接其實是保證左邊表的數據都能夠取出的一種連接 。
2、左外連接其實是在內連接的基礎上,再加上左邊表中所有不能滿足條件的數據
3、關鍵字 “outer" 可以省略。
語法形式:
select * from 表名 left [outer] join on 連接條件 where ...;
以左邊的表為基準,保證左邊表的數據全部顯示,匹配不到的數據為 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、右外連接其實是保證右邊表的數據都能夠取出的一種連接 。
2、右外連接其實是在內連接的基礎上,再加上右邊表中所有不能滿足條件的數據
3、關鍵字 “outer" 可以省略。
語法形式:
select * from 表名 right [outer] join on 連接條件 where ...;
以右邊的表為基準,保證右邊表的數據全部顯示,匹配不到的數據為 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 | +------+-------+------+------+----+-------+------+
看完上述內容,你們掌握Mysql join連接查詢語法的使用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。