欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年08月03日 16:12:25   作者:跑saber  
MySQL當(dāng)中的限制條件可以使用on或者where,兩者在不同的情況下具有不同而意義,這篇文章主要給大家介紹了關(guān)于Mysql中where與on的區(qū)別及何時(shí)使用的相關(guān)資料,需要的朋友可以參考下

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

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

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

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

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

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

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

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

實(shí)例說明

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

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

select * from hopegaming_main.test_1234 join hopegaming_main.test_1235

等價(jià)于

select * from hopegaming_main.test_1234,hopegaming_main.test_1235

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

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

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

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

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

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

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

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

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

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為例來連接兩個(gè)表) 連接兩個(gè)表,連接條件中有常量等式

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為例來連接兩個(gè)表) 連接兩個(gè)表,將常量表達(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é)果只會(huì)顯示符合where子句的數(shù)據(jù),只要沒有符合的都不會(huì)顯示,因?yàn)樗呛Y選連接后的臨時(shí)表中的數(shù)據(jù),而on
只是連接,如果右邊沒有符合的數(shù)據(jù),就顯示null,而左邊的數(shù)據(jù)都會(huì)顯示,不會(huì)被過濾,這就是where和on最大的區(qū)別

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

CREATE TABLE `hopegaming_main`.`test_1234` (
  `id` varchar(30) NOT NULL COMMENT '身份證號(hào)',
  `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 '身份證號(hào)',
  `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ū)別及何時(shí)使用的文章就介紹到這了,更多相關(guān)Mysql中where與on區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文詳解MySQL?Join使用原理

    一文詳解MySQL?Join使用原理

    JOIN是一種非常常見的操作,用于將兩個(gè)或多個(gè)表中的數(shù)據(jù)合并到一個(gè)結(jié)果集中。MySQL支持多種JOIN類型,本文通過代碼示例詳細(xì)介紹了Join的使用優(yōu)化,有需要的小伙伴可以參考閱讀
    2023-04-04
  • mysql查看回滾日志的方法步驟

    mysql查看回滾日志的方法步驟

    在MySQL數(shù)據(jù)庫中,操作回滾日志是一種記錄數(shù)據(jù)庫中事務(wù)操作的重要機(jī)制,本文主要介紹了mysql查看回滾日志的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • mysql 臨時(shí)表 cann''t reopen解決方案

    mysql 臨時(shí)表 cann''t reopen解決方案

    MySql關(guān)于臨時(shí)表cann't reopen的問題,本文將提供詳細(xì)的解決方案,需要了解的朋友可以參考下
    2012-11-11
  • linux/mac安裝mysql忘記密碼的解決辦法

    linux/mac安裝mysql忘記密碼的解決辦法

    這篇文章主要給大家介紹了關(guān)于linux/mac安裝mysql忘記密碼的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Navicat數(shù)據(jù)存放位置和備份數(shù)據(jù)庫路徑設(shè)置方式

    Navicat數(shù)據(jù)存放位置和備份數(shù)據(jù)庫路徑設(shè)置方式

    這篇文章主要介紹了Navicat數(shù)據(jù)存放位置和備份數(shù)據(jù)庫路徑設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 關(guān)于skip_name_resolve參數(shù)的總結(jié)分享

    關(guān)于skip_name_resolve參數(shù)的總結(jié)分享

    下面小編就為大家?guī)硪黄P(guān)于skip_name_resolve參數(shù)的總結(jié)分享。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家。給大家一個(gè)參考。一起跟隨小編過來看看吧
    2016-03-03
  • CentOS7.5 安裝 Mysql8.0.19的教程圖文詳解

    CentOS7.5 安裝 Mysql8.0.19的教程圖文詳解

    這篇文章主要介紹了CentOS7.5 安裝 Mysql8.0.19的教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • ubuntu系統(tǒng)中Mysql ERROR 1045 (28000): Access denied for user root@ localhost問題的解決方法

    ubuntu系統(tǒng)中Mysql ERROR 1045 (28000): Acces

    這篇文章主要介紹了ubuntu系統(tǒng)安裝mysql登陸提示 解決Mysql ERROR 1045 (28000): Access denied for user root@ localhost問題,需要的朋友可以參考下
    2017-05-05
  • MySQL如何解決幻讀問題

    MySQL如何解決幻讀問題

    在高并發(fā)數(shù)據(jù)庫系統(tǒng)中,需要保證事務(wù)與事務(wù)之間的隔離性,還有事務(wù)本身的一致性。所以需要解決幻讀問題,本文就來介紹一下,感興趣的可以了解一下
    2021-08-08
  • MySQL遞歸查詢的3種實(shí)現(xiàn)方式實(shí)例

    MySQL遞歸查詢的3種實(shí)現(xiàn)方式實(shí)例

    在項(xiàng)目中會(huì)遇到同一個(gè)表中保存著父子關(guān)系的數(shù)據(jù),最常見的就是處理樹形結(jié)構(gòu)資源,下面這篇文章主要給大家介紹了關(guān)于MySQL遞歸查詢的3種實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04

最新評(píng)論