人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

Mysql中where與on的區(qū)別及何時使用詳析

發(fā)布日期:2022-02-08 18:22 | 文章來源:源碼中國

之前在寫連表查詢的時候,老是分不清楚where和on的區(qū)別,導(dǎo)致有時寫的SQL會出現(xiàn)一點(diǎn)小的問題,這里專門寫篇文章做下記錄,如果你也分不清,那么請參考

二者的區(qū)別及什么時候使用

說明:區(qū)分on和where首先我們將連接分為內(nèi)部連接和非內(nèi)部連接,內(nèi)部連接時on和where的作用是一樣的,通常我們分不清它們的區(qū)別說的是非內(nèi)部連接

一般on用來連接兩個表,只的是連接的條件,在內(nèi)部連接時,可以省略on,此時它表示的是兩個表的笛卡爾積;使用on連接后,mysql會生成一張臨時表,而where就是在臨時表的基礎(chǔ)上,根據(jù)where子句來篩選出符合條件的記錄,因此where是用來篩選的

內(nèi)部連接(inner join)

說明:join默認(rèn)為inner join,當(dāng)為內(nèi)部連接時,on和where的作用你可以看做是一樣的

非內(nèi)部連接(left join、right join、full join等)

一般分不清區(qū)別就是在使用非內(nèi)部連接時,

實例說明

下面我們建兩張表(每個表中插入4條數(shù)據(jù),兩個表通過trade_id來關(guān)聯(lián)),來說明它們的區(qū)別,此文章的最下面附有SQL腳本,然后我們通過連表查詢來說明on和where的區(qū)別

1、inner join 連接兩個表(無on和where)

select * from hopegaming_main.test_1234 join hopegaming_main.test_1235

等價于

select * from hopegaming_main.test_1234,hopegaming_main.test_1235

結(jié)果集是兩個表的笛卡爾積

2、inner join 連接兩個表(有on)

select * from hopegaming_main.test_1234 t1 join hopegaming_main.test_1235 t2 on t1.trade_id = t2.trade_id 

結(jié)果集是兩個表有相同trade_id的數(shù)據(jù)

3、inner join 連接兩個表(有where)

select * from hopegaming_main.test_1234 t1 join hopegaming_main.test_1235 t2 where t1.trade_id = t2.trade_id 

結(jié)果集是結(jié)果集是兩個表有相同trade_id的數(shù)據(jù)

從2和3的結(jié)果中我們可以看出,在使用inner join連接時,on和where的作用相等

4、left join(下面以left join為例來連接兩個表) 連接兩個表

select * from hopegaming_main.test_1234 t1 left join hopegaming_main.test_1235 t2 on t1.trade_id = t2.trade_id  

結(jié)果集是以左面的表為基礎(chǔ),直接根據(jù)trade_id去右邊查詢相等的值然后連接,如果右表沒有符合的數(shù)據(jù),則都顯示為null

5、left join(下面以left join為例來連接兩個表) 連接兩個表,連接條件中有常量等式

select * from hopegaming_main.test_1234 t1 left join hopegaming_main.test_1235 t2 on t1.trade_id = t2.trade_id  and t2.nick_name = 'wangwu'

結(jié)果集是以左面的表為基礎(chǔ),如果on連接條件最后沒有找到匹配的記錄,則都顯示null

6、left join(下面以left join為例來連接兩個表) 連接兩個表,將常量表達(dá)式放入where子句中

select * from hopegaming_main.test_1234 t1 left join hopegaming_main.test_1235 t2 on t1.trade_id = t2.trade_id    where t2.nick_name = 'wangwu''

結(jié)果只會顯示符合where子句的數(shù)據(jù),只要沒有符合的都不會顯示,因為它是篩選連接后的臨時表中的數(shù)據(jù),而on
只是連接,如果右邊沒有符合的數(shù)據(jù),就顯示null,而左邊的數(shù)據(jù)都會顯示,不會被過濾,這就是where和on最大的區(qū)別

建表和插入數(shù)據(jù)的腳本:

CREATE TABLE `hopegaming_main`.`test_1234` (
  `id` varchar(30) NOT NULL COMMENT '身份證號',
  `name` varchar(100) DEFAULT NULL COMMENT '姓名',
  `trade_id` varchar(100) DEFAULT NULL COMMENT '交易id',
  `gender` tinyint(4) DEFAULT NULL COMMENT '性別',
  `birthday` timestamp(6) NOT NULL COMMENT '出生日期',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_trade_id` (`trade_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
INSERT INTO hopegaming_main.test_1234
(id, name, trade_id, gender, birthday)
VALUES('1', 'zhangsan', '123', 0, CURRENT_TIMESTAMP(6)),
('2', 'zhaosi', '124', 0, CURRENT_TIMESTAMP(6)),
('3', 'wangwu', '125', 0, CURRENT_TIMESTAMP(6)),
('4', 'maqi', '126', 0, CURRENT_TIMESTAMP(6));

CREATE TABLE `hopegaming_main`.`test_1235` (
  `id` varchar(30) NOT NULL COMMENT '身份證號',
  `nick_name` varchar(100) DEFAULT NULL COMMENT '別名',
  `trade_id` varchar(100) DEFAULT NULL COMMENT '交易id',
  `address` varchar(100) DEFAULT NULL COMMENT '地址',
  `email` varchar(6) NOT NULL COMMENT '出生日期',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_trade_id` (`trade_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
INSERT INTO hopegaming_main.test_1235
(id, nick_name, trade_id, address, email)
VALUES('1', 'zhangsan', '123', 'beijing', '0000'),
('2', 'wangwu', '123', 'tianjin', '1111'),
('3', 'maqi', '124', 'shanghai', '2222'),
('4', 'yangliu', '127', 'shanxi', '3333');

總結(jié)

到此這篇關(guān)于Mysql中where與on的區(qū)別及何時使用的文章就介紹到這了,更多相關(guān)Mysql中where與on區(qū)別內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

美國服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部