MySQL中的join以及on條件的用法解析
MySQL中 join的用法:join具有 連接的作用,即當兩個或者兩個以上的表有關系時,需要用join來連接這些相關的表,來處理或分析數據:
join的用法:連接
舉例先看看,就懂了:
例如: 有一個表叫做stu,一個表叫class,stu join class會生成一個新的表,
我們執(zhí)行: stu join class 后,新的表成為:
通過上面的例子總結一下:
- join后的列名是兩個表列名加起來的,可能會產生相同的列名,如id 和 name
- 先用表stu中的一行數據和表class中的每一行數據不斷的拼接,產生新的行
- 再用表stu的第二行去和表class中的每一行數據拼接,以此類推
- 表stu是3行,表class是2行,所以按照上面的規(guī)律會產成3*2 = 6行的新的表
on的用法:添加約束
一般我們join后的表,并不是我們想要的,這時,可以用 ON 來加一些條件:
例如:stu join class on classid = class.id ,on后面就是我們加的條件,我們想要classid這一列數據和id這一列的數據相等的數據,這里注意一下,join后的表列名是有重復的,所以ON后面的條件語句中我們要加上原來的表名。例如這里:classid = class.id,由于id有兩列,這里我們是要表class中的id,所是是class.id。
所以: 執(zhí)行:stu join class on classid = class.id 后,表變?yōu)椋?/p>
小提示:當只有join時,其后面的on可以用where替換;
在數據庫中驗證
mysql -u root -p # 登錄數據庫,輸入密碼 CREATE DATABASE new; # 創(chuàng)建數據庫new use new; # 使用這個數據庫 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); # 插入數據 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,'實驗班',"小紅"),(2,'普通班',"小藍"); # 插入數據 SELECT * FROM class;
SELECT * FROM stu join class; # 用join連接兩個表
SELECT * FROM stu join class ON classid = class.id; # 用on來添加條件
MySQL中連接表時join和on的區(qū)別
數據庫在通過連接兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然后再將這張臨時表返回給用戶。 在使用left jion時,on和where條件的區(qū)別如下:
1、on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。
2、where條件是在臨時表生成好后,再對臨時表進行過濾的條件。這時已經沒有l(wèi)eft join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
mysql 啟動1067錯誤及修改字符集重啟之后復原無效問題
這篇文章主要介紹了mysql 啟動1067錯誤及修改字符集重啟之后復原無效問題,需要的朋友可以參考下2017-10-10mysql執(zhí)行語句后只有錯誤代碼,沒有錯誤信息的問題
這篇文章主要介紹了mysql執(zhí)行語句后只有錯誤代碼,沒有錯誤信息的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-09-09