婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Mysql中where與on的區別及何時使用詳析

Mysql中where與on的區別及何時使用詳析

熱門標簽:拉卡拉外呼系統 臨清電話機器人 外東北地圖標注 智能外呼系統復位 高清地圖標注道路 話務外呼系統怎么樣 大眾點評星級酒店地圖標注 云南電商智能外呼系統價格 400電話可以辦理嗎

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

二者的區別及什么時候使用

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

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

內部連接(inner join)

說明:join默認為inner join,當為內部連接時,on和where的作用你可以看做是一樣的

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

一般分不清區別就是在使用非內部連接時,

實例說明

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

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

結果集是兩個表的笛卡爾積

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

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

結果集是兩個表有相同trade_id的數據

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

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

結果集是結果集是兩個表有相同trade_id的數據

從2和3的結果中我們可以看出,在使用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  

結果集是以左面的表為基礎,直接根據trade_id去右邊查詢相等的值然后連接,如果右表沒有符合的數據,則都顯示為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'

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

6、left join(下面以left join為例來連接兩個表) 連接兩個表,將常量表達式放入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''

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

建表和插入數據的腳本:

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');

總結

到此這篇關于Mysql中where與on的區別及何時使用的文章就介紹到這了,更多相關Mysql中where與on區別內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • MySQL查詢條件中放置on和where的區別分析
  • MySQL left join操作中on和where放置條件的區別介紹
  • mysql中left join設置條件在on與where時的用法區別分析

標簽:三明 阿里 揚州 溫州 無錫 山西 定西 福州

巨人網絡通訊聲明:本文標題《Mysql中where與on的區別及何時使用詳析》,本文關鍵詞  Mysql,中,where,與,的,區別,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Mysql中where與on的區別及何時使用詳析》相關的同類信息!
  • 本頁收集關于Mysql中where與on的區別及何時使用詳析的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 廉江市| 南宫市| 鄂州市| 盱眙县| 镇远县| 凤山县| 翁牛特旗| 保德县| 鹤岗市| 凤山县| 连城县| 天峨县| 鹤岗市| 关岭| 克拉玛依市| 古交市| 彰武县| 阿尔山市| 永和县| 东平县| 宝清县| 临清市| 长乐市| 万载县| 开远市| 民乐县| 济阳县| 江城| 诸暨市| 桃江县| 富裕县| 堆龙德庆县| 内黄县| 长岛县| 海晏县| 清涧县| 大港区| 两当县| 永安市| 大荔县| 赤城县|