MySQL中的join以及on條件的用法解析
MySQL中 join的用法:join具有 連接的作用,即當(dāng)兩個(gè)或者兩個(gè)以上的表有關(guān)系時(shí),需要用join來連接這些相關(guān)的表,來處理或分析數(shù)據(jù):
join的用法:連接
舉例先看看,就懂了:
例如: 有一個(gè)表叫做stu,一個(gè)表叫class,stu join class會(huì)生成一個(gè)新的表,


我們執(zhí)行: stu join class 后,新的表成為:

通過上面的例子總結(jié)一下:
- join后的列名是兩個(gè)表列名加起來的,可能會(huì)產(chǎn)生相同的列名,如id 和 name
- 先用表stu中的一行數(shù)據(jù)和表class中的每一行數(shù)據(jù)不斷的拼接,產(chǎn)生新的行
- 再用表stu的第二行去和表class中的每一行數(shù)據(jù)拼接,以此類推
- 表stu是3行,表class是2行,所以按照上面的規(guī)律會(huì)產(chǎn)成3*2 = 6行的新的表
on的用法:添加約束
一般我們join后的表,并不是我們想要的,這時(shí),可以用 ON 來加一些條件:
例如:stu join class on classid = class.id ,on后面就是我們加的條件,我們想要classid這一列數(shù)據(jù)和id這一列的數(shù)據(jù)相等的數(shù)據(jù),這里注意一下,join后的表列名是有重復(fù)的,所以O(shè)N后面的條件語(yǔ)句中我們要加上原來的表名。例如這里:classid = class.id,由于id有兩列,這里我們是要表class中的id,所是是class.id。
所以: 執(zhí)行:stu join class on classid = class.id 后,表變?yōu)椋?/p>

小提示:當(dāng)只有join時(shí),其后面的on可以用where替換;
在數(shù)據(jù)庫(kù)中驗(yàn)證
mysql -u root -p # 登錄數(shù)據(jù)庫(kù),輸入密碼 CREATE DATABASE new; # 創(chuàng)建數(shù)據(jù)庫(kù)new use new; # 使用這個(gè)數(shù)據(jù)庫(kù) CREATE TABLE stu(id int primary key,name char(10),classid int)default charset = utf8mb4; # 創(chuàng)建表stu INSERT INTO stu (id,name,classid)VALUES(1,'A',1),(2,'B',1),(3,"C",2); # 插入數(shù)據(jù) SELET * FROM stu;

CREATE TABLE class(id int primary key,name char(10),teacher char(10))default charset = utf8mb4; # 創(chuàng)建表class INSERT INTO class (id,name,teacher)VALUES(1,'實(shí)驗(yàn)班',"小紅"),(2,'普通班',"小藍(lán)"); # 插入數(shù)據(jù) SELECT * FROM class;

SELECT * FROM stu join class; # 用join連接兩個(gè)表

SELECT * FROM stu join class ON classid = class.id; # 用on來添加條件

MySQL中連接表時(shí)join和on的區(qū)別
數(shù)據(jù)庫(kù)在通過連接兩張或多張表來返回記錄時(shí),都會(huì)生成一張中間的臨時(shí)表,然后再將這張臨時(shí)表返回給用戶。 在使用left jion時(shí),on和where條件的區(qū)別如下:
1、on條件是在生成臨時(shí)表時(shí)使用的條件,它不管on中的條件是否為真,都會(huì)返回左邊表中的記錄。
2、where條件是在臨時(shí)表生成好后,再對(duì)臨時(shí)表進(jìn)行過濾的條件。這時(shí)已經(jīng)沒有l(wèi)eft join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL存儲(chǔ)過程中實(shí)現(xiàn)執(zhí)行動(dòng)態(tài)SQL語(yǔ)句的方法
這篇文章主要介紹了MySQL存儲(chǔ)過程中實(shí)現(xiàn)執(zhí)行動(dòng)態(tài)SQL語(yǔ)句的方法,實(shí)例分析了MySQL中構(gòu)造及執(zhí)行動(dòng)態(tài)SQL語(yǔ)句的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
MySQL復(fù)制出錯(cuò) Last_SQL_Errno:1146的解決方法
這篇文章主要介紹了MySQL復(fù)制出錯(cuò) Last_SQL_Errno:1146的解決方法,需要的朋友可以參考下2016-07-07
MySQL/Postgrsql 詳細(xì)講解如何用ODBC接口訪問MySQL指南
2008-01-01
mysql數(shù)據(jù)庫(kù)重置表主鍵id的實(shí)現(xiàn)
在我們的開發(fā)過程中,難免在做測(cè)試的時(shí)候會(huì)生成一些雜亂無章的SQL主鍵數(shù)據(jù),本文主要介紹了mysql數(shù)據(jù)庫(kù)重置表主鍵id的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
從云數(shù)據(jù)遷移服務(wù)看MySQL大表抽取模式的原理解析
這篇文章主要介紹了從云數(shù)據(jù)遷移服務(wù)看MySQL大表抽取模式的原理解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
Mysql用戶權(quán)限分配實(shí)戰(zhàn)項(xiàng)目詳解
用戶是數(shù)據(jù)庫(kù)的使用者和管理者,MySQL通過用戶的設(shè)置來控制數(shù)據(jù)庫(kù)操作人員的訪問與操作范圍,這篇文章主要給大家介紹了關(guān)于Mysql用戶權(quán)限分配實(shí)戰(zhàn)項(xiàng)目的相關(guān)資料,需要的朋友可以參考下2023-12-12

