最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

內部連接(inner join)

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

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

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

實例說明

下面我們建兩張表(每個表中插入4條數(shù)據,兩個表通過trade_id來關聯(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

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

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的數(shù)據

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的數(shù)據

從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去右邊查詢相等的值然后連接,如果右表沒有符合的數(shù)據,則都顯示為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子句的數(shù)據,只要沒有符合的都不會顯示,因為它是篩選連接后的臨時表中的數(shù)據,而on
只是連接,如果右邊沒有符合的數(shù)據,就顯示null,而左邊的數(shù)據都會顯示,不會被過濾,這就是where和on最大的區(qū)別

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

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的區(qū)別及何時使用的文章就介紹到這了,更多相關Mysql中where與on區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mysql數(shù)據庫如何轉移到oracle

    mysql數(shù)據庫如何轉移到oracle

    這篇文章主要介紹了mysql數(shù)據庫如何轉移到oracle,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • MySql刪除表中一行的實操方法

    MySql刪除表中一行的實操方法

    在本篇文章中小編給大家整理了關于MySql刪除表中一行的實操方法以及實例分析,需要的朋友們參考下。
    2019-05-05
  • 解決MySQL無法遠程連接的方法

    解決MySQL無法遠程連接的方法

    這篇文章主要介紹了解決MySQL無法遠程連接的方法,文中給出的解決方案主要針對IP限制時出現(xiàn)的該種情況,需要的朋友可以參考下
    2015-04-04
  • 通過SqlCmd執(zhí)行超大SQL文件的方法

    通過SqlCmd執(zhí)行超大SQL文件的方法

    這篇文章主要介紹了sql?server?與?mysql?中常用的SQL語句區(qū)別,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • MySQL實現(xiàn)replace函數(shù)的幾種實用場景

    MySQL實現(xiàn)replace函數(shù)的幾種實用場景

    這篇文章主要介紹了MySQL實現(xiàn)replace函數(shù)的幾種實用場景,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • MySQL8.0之CTE(公用表表達式)的使用

    MySQL8.0之CTE(公用表表達式)的使用

    本文主要介紹了MySQL8.0之CTE(公用表表達式)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • SQL重復記錄查詢 查詢多個字段、多表查詢、刪除重復記錄的方法

    SQL重復記錄查詢 查詢多個字段、多表查詢、刪除重復記錄的方法

    下面小編就為大家?guī)硪黄猄QL重復記錄查詢 查詢多個字段、多表查詢、刪除重復記錄的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 詳解MySQL的主從復制、讀寫分離、備份恢復

    詳解MySQL的主從復制、讀寫分離、備份恢復

    本篇文章主要對MySQL的主從復制、讀寫分離、備份恢復進行詳細全面的講解,具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • 如何把Mysql卸載干凈(親測有效)

    如何把Mysql卸載干凈(親測有效)

    這篇文章主要介紹了如何把Mysql卸載干凈(親測有效),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • MySQL數(shù)據庫約束詳解

    MySQL數(shù)據庫約束詳解

    mysql常見約束有:1、非空約束“not?null”;2、唯一性約束“unique”;3、主鍵約束“primary?key”;4、外鍵約束“foreign?key”;5、默認值約束“Default”等等。
    2022-10-10

最新評論

定襄县| 平顶山市| 长阳| 三原县| 牙克石市| 望江县| 山东省| 堆龙德庆县| 当阳市| 高邑县| 抚松县| 左云县| 井研县| 丰顺县| 新民市| 连山| 陕西省| 通城县| 桂东县| 肥东县| 灵石县| 广州市| 文安县| 湘阴县| 拜泉县| 哈密市| 兴化市| 安阳县| 房产| 华容县| 泾阳县| 房产| 广元市| 岚皋县| 金华市| 云阳县| 措勤县| 英超| 乐东| 涟水县| 定南县|