java join 源碼_join on 和where 一起使用的細節

left join :左連接,返回左表中所有的記錄以及右表中連接字段相等的記錄。

right join :右連接,返回右表中所有的記錄以及左表中連接字段相等的記錄。

inner join: 內連接,又叫等值連接,只返回兩個表中連接字段相等的行。

full join:外連接,返回兩個表中的行:left join + right join。

cross join:結果是笛卡爾積,就是第一個表的行數乘以第二個表的行數。

關鍵字:?on

數據庫在通過連接兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然后再將這張臨時表返回給用戶。

在使用left?jion時,on和where條件的區別如下:

1、?on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。

2、where條件是在臨時表生成好后,再對臨時表進行過濾的條件。這時已經沒有left?join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。

假設有兩張表:

表1:tab2

id

size

1

10

2

20

3

30

表2:tab2

size

name

10

AAA

20

BBB

20

CCC

兩條SQL:

1、select?*?form?tab1?left?join?tab2?on?(tab1.size?=?tab2.size)?where?tab2.name=’AAA’

2、select?*?form?tab1?left?join?tab2?on?(tab1.size?=?tab2.size?and?tab2.name=’AAA’)

第一條SQL的過程:

1、中間表

on條件:

tab1.size?=?tab2.size

tab1.id

tab1.size

tab2.size

tab2.name

1

10

10

AAA

2

20

20

BBB

2

20

20

CCC

3

30

(null)

(null)

2、再對中間表過濾

where?條件:

tab2.name=’AAA’

tab1.id

tab1.size

tab2.size

tab2.name

1

10

10

AAA

第二條SQL的過程:

1、中間表

on條件:

tab1.size?=?tab2.size?and?tab2.name=’AAA’

(條件不為真也會返回左表中的記錄)

tab1.id

tab1.size

tab2.size

tab2.name

1

10

10

AAA

2

20

(null)

(null)

3

30

(null)

(null)

其實以上結果的關鍵原因就是left?join,right?join,full?join的特殊性,不管on上的條件是否為真都會返回left或right表中的記錄,full則具有left和right的特性的并集。?而inner?jion沒這個特殊性,則條件放在on中和where中,返回的結果集是相同的。

轉載:http://www.cnblogs.com/Jessy/p/3525419.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271813.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271813.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271813.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SSIS 學習之旅 FTP訪問類

這章把腳本任務訪問FTP的方法 全部給大家。 控件的使用大家如果有不懂得可以看下我之前的文章。第一章:SSIS 學習之旅 第一個SSIS 示例(一)(上) 第二章:SSIS 學習之旅 第一個SSIS 示例(二&#…

Spring Cloud Feign 使用Apache的HTTP Client替換Feign原生httpclient

http 連接池能提升性能 http 的背景原理 a. 兩臺服務器建立 http 連接的過程是很復雜的一個過程,涉及到多個數據包的交換,并且也很耗時間。 b. Http 連接需要的 3 次握手 4 次分手開銷很大,這一開銷對于大量的比較小的 http 消息來說更大。…

Java容器坐標起點_Java的屏幕坐標是以像素為單位,容器的左下角被確定為坐標的起點...

【單選題】【單選題】【單選題】class A{ int x1; void func1(int x1){ this.x1 x1; } } 關于上述程序,說法錯誤的是( )【單選題】瀏覽器的作用是( )。【判斷題】構建大學生心理危機預警及干預工作機制,更好地幫助有嚴重心理問題的學生度過心理難關,及早預防、及時疏導、有效干…

自媒體工具:文本內容轉音頻文件實用小工具

目錄 ?編輯 1、軟件介紹 2、軟件技術框架 3、使用說明 4、核心代碼文件 5、注意事項 1、軟件介紹 文本內容轉轉音頻文件小工具,采用C#編程語言,基于Framework4.5開發,主要采用百度語音識別SDK,實現了在線文本內容轉音頻文件的功能…

IDEA 創建 SpringCloud項目-多項目方式

SpringCloud 雖然可以用多模塊化的方式來創建,但是,SpirngCloud本身就是為分布式而準備的,如果使用多模塊的話,那就是一個項目,偏離了分布式的概念。所以工程上還是常用多項目的方式,這樣才可以分開布署各個…

php位運算重要嗎,PHP位運算的用途

下面為大家帶來一篇PHP位運算的用途。現在就分享給大家,也給大家做個參考。一起過來看看吧在實際應用中可以做用戶權限的應用我這里說到的權限管理辦法是一個普遍采用的方法,主要是使用到”位運行符”操作,& 位與運算符、| 位或運行符。參…

盤點6款實用的文件對比工具,你都用過嗎?

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

aggregations 詳解1(概述)

aggregation分類 aggregations —— 聚合,提供了一種基于查詢條件來對數據進行分桶、計算的方法。有點類似于 SQL 中的 group by 再加一些函數方法的操作。 聚合可以嵌套,由此可以組成復雜的操作(Bucketing聚合可以包含sub-aggregation&#…

IDEA開發中,類的頭位置生成作者時間信息

點擊 File > Settings > File and Code Templates > Class按照圖中步驟添加如下信息 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#end #parse("File Header.java") /** * Author WangZeyu * Date ${…

提現接口網站 php,API提現接口

>獲取提現積分的類型,在后臺可以設置某種積分可被提現,此處獲取的數據為可提現積分的類型~~~[api]get:/index.php/accounts/Apipoint/member_withdrawal_listint:type 0#是否智能限制提現積分類型,0:不智能,1&#…

數據庫:PostgreSQL 和 MySQL對比

比較版本:PostgreSQL 11 VS MySQL5.7(innodb引擎) Oracle官方社區版版權情況:PostgreSQL 11(免費開源)、MySQL5.7 Oracle官方社區版(免費開源) 1. CPU限制 PGSQL沒有CPU核心數限制&a…

C#獲取當前系統磁盤符、系統目錄、桌面等

1.獲取方式如下 Environment.SpecialFolder中定義了許多常用的目錄 //獲取當前系統磁盤符方法1,返回:C: string path Environment.GetEnvironmentVariable("systemdrive"); //獲取當前系統磁盤符方法2,返回:C: string path Envir…

MAC電腦常用效率工具推薦

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

Java String類型轉換成Date日期類型

//格式化數據 SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format sdf.format(new Date()); System.out.println(format);//String格式的數據轉化成Date格式 String timeStr "2019-07-09 03:34:56 "; Date parse sdf.pa…

docker php 安裝swoole,swoole(1)使用docker安裝swoole環境

1.下載鏡像pull php 鏡像docker pull php:7.3-alpine3.8創建容器docker run -it --name test php:7.3-alpine3.8 sh2.進入容器安裝swoole# 安裝依賴的第三方包echo http://mirrors.ustc.edu.cn/alpine/v3.7/main > /etc/apk/repositories && \echo http://mirrors.u…

插件書寫示例

正常模態框代碼 <!DOCTYPE html> <html lang"en"> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…

MAC電腦8款常用設計工具推薦

目錄 1、Sketch 3 2、Affinity Designer 3、Framer 4、PaintCode 5、Hype 3 Professional 6、Pixave 2 7、Iconjar 8、Sip for Mac and iPhone 1、Sketch 3 Sketch是完全滿足我上面4條選擇條件的一款UI設計工具&#xff0c;前文第50頁已經提到過相關內容。 2、Affinity Designe…

matlab the installer cannot read,MATLAB安裝 The installer cannot read the mwinstall.dll… | 學步園...

前提&#xff1a;安裝前的文件 的 目錄 不需含有 中文安裝MATLAB7時彈出以下警告對話框&#xff0c;顯示“ The installer cannot read the mwinstall.dll file, This is probably due to a CD reader which can only read files with an eight.three naming convention. Pleas…

專家觀點:即使在云中 硬件同樣至關重要

英特爾最近發布了新一代企業級CPU。第四代E5和E7CPU確實有些與眾不同之處&#xff1a;更多的緩存、更多的內核、更快更多的RAM。但是大家沒有發現這款產品還有一個特別的地方。 也許一切都與云有關&#xff0c;我們已經告別以前的硬件。你可能認為IT命令結構級別越高&#xff0…

matlab怎么安裝compiler,關于MATLAB中compiler配置問題

按照大家的方法進行了系統配置&#xff0c;下載安裝了SDK7.1&#xff0c;可運行mex setup之后還是一直彈出No supported SDK or compiler was found on this computer.Welcome to mex -setup. This utility will help you set upa default compiler. For a list of supported…