1. 程式人生 > >資料庫中,on和where使用時機的分析

資料庫中,on和where使用時機的分析

資料庫查詢中on和where關鍵字使用的時機:

首先說下連表查詢,資料庫在通過連線查詢兩張表或者多張表時,會生成一箇中間表,而我們看到的就是這個中間表。

以左連結(左連結不再贅述,不瞭解的自行百度哈)為例說明,如下sql語句:

Select * from book left join student on book.stuid =student.stuid;

On book.stuid =student.stuid ,中間表如下

而關鍵字on就是在生成這個中間表的時候用的,連線條件。但是請看下面的語句:

Select * from book left join student on (book.stuid =student.stuid) where student.name = ‘豬八戒’;

這條語句先得到之前的中間表,然後在中間表的情況下(這裡可以理解為單表)使用where判斷條件來再次篩選,得到一條資料:

其實,從英文的角度講也好理解,on代表在某一個面上,where代表在某一個點上,因此on的範圍大,也就是多表連線生成中間表時使用,where在一張以確定好的表(無論是存在的表還是經過連線查詢得到的中間表,都是一張已經確定的表)上根據條件進行篩選。

以上是我對where和on使用條件的個人見解,不對的地方,希望看到的給予指正。


相關推薦

資料庫onwhere使用時機分析

資料庫查詢中on和where關鍵字使用的時機:首先說下連表查詢,資料庫在通過連線查詢兩張表或者多張表時,會生成一箇中間表,而我們看到的就是這個中間表。以左連結(左連結不再贅述,不瞭解的自行百度哈)為例說明,如下sql語句:Select * from book left joi

SQLonwhere的區別

知識庫 mysq sdn pad 行數 full join sel targe 知識 這篇博客參考了網上的,具體哪一篇是原稿,不知道,特此聲明。 數據庫在通過連接兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給用戶。 下面以使用le

sql查詢語句onwhere的區別

運算 www span 多表 速度 分享 執行 最終 .com   數據庫在通過連接兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給用戶。 在使用left jion時,on和where條件的區別如下: on條件是在生成臨時表時使用的條件,它不管

oracle 的havingwhereminusunionnot exists的用法

最近在寫sql的時候用到了上面這幾個,就整理下 union all/union 這個函式可以將倆結果集合並在一起 例:當你用到in的時候,而in只能跟1000的欄位,這個時候就可以用 where 後面的條件不允許使用聚合函式,having可以。where 是對全表進行條件篩選,返回一個結

SQL語句Left join OnWhere的用法區別

如果SQL用的是Left Join ,On後面的條件對Left的表沒有作用,只對Right的表有過濾作用,Where語句可以對Left的表有過濾作用 如果SQL用的是Right Join ,On後面的條件對Right的表沒有作用,只對Left的表有過濾作用,Where

iOS多執行緒佇列執行的排列組合結果分析

本文是對以往學習的多執行緒中知識點的一個整理。 多執行緒中的佇列有:序列佇列,併發佇列,全域性佇列,主佇列。 執行的方法有:同步執行和非同步執行。那麼兩兩一組合會有哪些注意事項呢? 如果不是在董鉑然部落格園看到這邊文章請 點選檢視原文 提到多執行緒,也就是四種,pthread,NSthread,GCD

Oracle的left joinonwhere的區別以及與(+)的區別

資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。       在使用left jion時,on和where條件的區別如下: 1、 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。 2、where條件是在臨時表生成好後

Oracle的left joinonwhere的區別

資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。     在使用left jion時,on和where條件的區別如下:     1、on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記

神奇的 SQL 之撲朔迷離 → ON WHERE好多細節!

開心一刻   樓主:心都讓你嚇出來了!   獅王:淡定,打個小噴嚏而已 前情回顧   神奇的 SQL 之 聯表細節 → MySQL JOIN 的執行過程(一)中,我們講到了 3 種聯表演算法:SNL、BNL 和 INL,瞭解了資料的查詢方式是 one by one,聯表方式也是 one by on

談談hivejoin下onwhere

本文為部落格園作者所寫: 一寸HUI,個人部落格地址:https://www.cnblogs.com/zsql/ 很多人如果先接觸mysql的執行順序(from ->on ->join ->where ->group by ->having ->select -&

在活動目錄轉移占用操作主機角色(占用)

操作主機 ad 轉移 占用 楊書凡 如何占用操作主機操作主機是ActiveDirectory中的特殊對象,具備操作主機角色的域控制器擔任著活動目錄核心功能,如果操作主機不可用,整個活動目錄都會出現異常,甚至崩潰。 操作主機角色的唯一性決定了不是任意一臺域控制器都能管理整個域,當一臺承

NHibernte 4.0.3版本使用Queryover().Where().OrderBy().Skip().Take()方法分頁獲取數據失敗

osi ber modal str 問題 res tor 獲取數據 max 問題代碼如下: var result=repository.QueryOver<modal>() .Where(p=>p.Code==Code)

SQL夯實基礎(二):連接操作使用onwhere篩選的差異

img 範圍 ins name -s insert 如何 篩選條件 utf 一、on篩選和where篩選   在連接查詢語法中,另人迷惑首當其沖的就要屬on篩選和where篩選的區別了,如果在我們編寫查詢的時候, 篩選條件的放置不管是在on後面還是where後面, 查出來

left join onwhere

tab sid image 宋體 body 基礎上 連接 成績 生成 left join on: 向左關聯某個表記錄,意思是以左邊的表記錄為基準,通過關聯條件會從左表返回所有的行,即使在右表中沒有匹配的行。 舉個例子: select * from A left join B

MySQL查詢語句的IN Exists 對比分析

In exists nested loop sql優化 查詢效率 背景介紹 最近在寫SQL語句時,對選擇IN 還是Exists 猶豫不決,於是把兩種方法的SQL都寫出來對比一下執行效率,發現IN的查詢效率比Exists高了很多,於是想當然的認為IN的效率比Exists好,但本著尋根究底的原

lambda表達式的SelectWhere的區別?

col 張新 ext 操作 圖片 屬性 數據 ffffff sele Select()操作符:可以將序列中的每個元素投影到新表中,即取出哪些屬性(字段),其實和sql中的select差不多的意思。Where()操作符:是用於對序列中的元素進行過濾和篩選,類似sql中是whe

MySQL資料庫主鍵外來鍵的操作

在MySQL資料庫中,一般會涉及到主鍵和外來鍵,在上一個表中添加了主鍵之後,通常在下一個表中要新增外來鍵,但是添加了外來鍵之後,在實體類和資料庫中在加上上一個表的主鍵會比較好,這樣兩個表關聯之後,在上一個表查詢完成之後,將查詢是出來的欄位拿著去下一個庫裡查詢,會比較好。 select * fro

python3插入資料庫如果資料存在引號的解決方案

這裡判斷了是否傳進來的是list還是str,然後將在有引號的位置新增上引號 def escape_character(string): script = ‘’ if type(string) == type([]): script_tmp = “,”.join(string) else:

form表單提交確定取消效果的實現

前端開發中的資料提交,目前大多數採用表單提交的方式,但是對於很對初學者來說,只知道在表單格式中,只有一個<input type="submit">,如果有兩個或者要求有多個提交選擇的時候應該怎麼做呢,其實用js就可以簡單實現: 例如下面的效果: 有一個確定和取消的

TiDB如何在分散式資料庫組合OLTPOLAP

TiDB功能 TiDB的核心功能包括彈性水平可伸縮性,具有ACID保證的分散式事務,高可用性以及實時事務資料的實時分析。讓我們來看看這些功能背後的平臺架構。TiDB平臺具有以下元件: TiDB:與Go相容的無狀態SQL層,內置於Go。 TiKV:一個分散式事務鍵值儲存,用Rust構建。(Ti