【東軟實訓】SQL多表鏈接

如果一個查詢同時涉及兩個以上的表,則稱之為鏈接查詢,鏈接查詢是關系數據庫中最主要的查詢,主要包括等值鏈接查詢、非等值鏈接查詢、自身鏈接查詢、外鏈接查詢和復合條件鏈接查詢。?
這篇博文我們來對多表鏈接進行學習。

Outline

  • 鏈接的基本概念
  • Oracle自有的鏈接方法
    • 等值鏈接
    • 非等值鏈接
    • 自身鏈接
  • SQL標準語法連接方法
    • 交叉連接(笛卡爾連接)
    • 自然連接
    • Using與On語句
    • 左外連接、右外連接、全連接

Notes

## 鏈接的基本概念

  • 鏈接是在多個表之間通過一定的鏈接條件,使表之間發生關聯,進而能從多個表之間獲取數據。
  • 語法為
    SELECT    table1.column, table2.column
    FROM    table1, table2
    WHERE    table1.column1 = table2.column2;
  • 在 WHERE子句中書寫鏈接條件。N個表相連時,至少需要N-1個鏈接條件。
  • 如果在多個表中出現相同的列名,則需要使用表名作為來自該表的列名的前綴。

【鏈接的分類】

  一個用戶查詢請求涉及到多個表的時候,鏈接兩個表的條件為=時,就是等值鏈接查詢;其他的運算符鏈接的就是非等值查詢。?注意:鏈接條件中的各鏈接字段類型必須是可比的,但不必是相同的,整型和實型是可比的,但是字符型和整型就不可比。

  內連接,也被稱為自然連接,只有兩個表相匹配的行才能在結果集中出現。返回的結果集選取了兩個表中所有相匹配的數據,舍棄了不匹配的數據。

  外連接不僅包含符合連接條件的行,還包含左表(左連接時)、右表(右連接時)或兩個邊接表(全外連接)中的所有數據行。

?

## Oracle自有的連接方法(select from語句)

【等值連接】

?鏈接兩個表的條件為=時,就是等值鏈接查詢

SQL> SELECT     emp.empno,   emp.ename, emp.deptno, dept.deptno, dept.loc2  FROM       emp, dep
3 WHERE emp.deptno=dept.deptno;

?

注意:我們還可以使用And運算符添加其他查詢條件,如:

注意:我們還可以用列別名提高性能和限制歧義列名

  • 在用到多個表時可以使用表名作前綴來限定列;
  • 通過使用表前綴可以提高性能;
  • 通過使用列的別名可以區分來自不同表但是名字相同的列;

如:

?

【非等值連接】

?

SQL>    SELECT  e.ename, e.sal, s.grade2    FROM    emp e,   salgrade s3    WHERE   e.sal4    BETWEEN     s.losal AND s.hisal;

?

?

【自身連接】

  ?一個表與自己進行連接,這種連接稱為表的自身連接查詢。?
  具體實現的時候,我們可以把自己的表起兩個別名,一個是first, 一個是second.在設計的時候可以把這兩個表想成是完全兩個一樣的表,但是各自的字段我們都可以只有調用訪問。?

SQL> SELECT worker.ename||' leader is '||manager.ename2  FROM    emp worker, emp manager3  WHERE   worker.mgr = manager.empno;

?

?## SQL標準語法連接方法

?【交叉連接】

  • 交叉連接會產生連個表的交叉乘積,和兩個表之間的笛卡爾積是一樣的;
  • 交叉連接使用 CROSS JOIN 子句完成。
  • 笛卡爾積: 第一個表中的所有行和第二個表中的所有行都發生連接。
  • 笛卡爾積在下列情況產生:
    • 連接條件被省略
    • 連接條件是無效的
  • 為了避免笛卡爾積的產生,通常需要在WHERE子句中包含一個有效的連接條件。
<--笛卡爾積寫法-->
SQL> SELECT     emp.empno,   emp.ename, emp.deptno,dept.deptno, dept.locFROM       emp, dept;


<--交叉連接寫法--> SELECT emp.empno,emp.ename,emp.sal,emp.deptno,dept.loc FROM emp CROSS JOIN dept;

?

【自然連接】

  • 自然連接是對兩個表之間相同名字和數據類型的列進行的等值連接;
  • 如果兩個表之間相同名稱的列的數據類型不同,則會產生錯誤;
  • 使用NATURAL JOIN子句來完成。如:
    SELECT  empno,ename,sal,deptno,loc 
    FROM    emp 
    NATURAL JOIN     dept; 

【Using和On語句】

自然連接是使用所有名稱和數據類型相匹配的列作為連接條件,而USING子句可以指定用某個或某幾個相同名字和數據類型的列作為連接條件,如:

SELECT     e.ename,e.ename,e.sal,deptno,d.loc 
FROM       emp e JOIN dept d USING (deptno) 
WHERE      deptno = 20 ;

?

  • 使用USING子句創建連接時,應注意以下幾點:
    • 如果如果有若干個列名稱相同但數據類型不同,自然連接子句可以用USING子句來替換,以指定產生等值連接的列
    • 有多于一個列都匹配的情況,使用USING子句只能指定其中的一列
    • USING子句中的用到的列不能使用表名和別名作為前綴
    • NATURAL JOIN子句和USING子句是相互排斥的,不能同時使用
  • On語句:
    • 自然連接條件基本上是具有相同列名的表之間的等值連接;
    • 如果要指定任意連接條件,或指定要連接的列,則可以使用ON子句;
    • 用ON將連接條件和其它檢索條件分隔開,其它檢索條件寫在WHERE子句
    • ON子句可以提高代碼的可讀性
SELECT     e.empno, e.ename, d.loc,m.ename 
FROM           emp e 
JOIN           dept d 
ON             e.deptno = d.deptno 
JOIN           emp m 
ON             e.mgr = m.empno; 

?

【左外連接、右外連接、全連接】

  • 外連不但返回符合連接和查詢條件的數據行,還返回不符合條件的一些行。外連接分三類:左外連接(LEFT OUTER JOIN)、右外連接(RIGHT OUTER JOIN)和全外連接(FULL OUTER JOIN)。
  • 三者的共同點是都返回符合連接條件和查詢條件(即:內連接)的數據行。不同點如下:
    • 左外連接(?)還返回左表中不符合連接條件單符合查詢條件的數據行。
    • 右外連接(?)還返回右表中不符合連接條件單符合查詢條件的數據行。
    • 全外連接()還返回左表中不符合連接條件單符合查詢條件的數據行,并且還返回右表中不符合連接條件單符合查詢條件的數據行。全外連接實際是上左外連接和右外連接的數學合集(去掉重復),即“全外=左外 UNION 右外”。
  • 說明:左表就是在“(LEFT OUTER JOIN)”關鍵字左邊的表。在三種類型的外連接中,OUTER 關鍵字是可省略的。
<--左外連接-->
SELECT     e.ename,e.deptno,d.loc 
FROM       emp e 
LEFT OUTER JOIN dept d 
ON         (e.deptno = d.deptno); 

<--右外連接--> SELECT e.ename,e.deptno,d.loc FROM emp e RIGHT OUTER JOIN dept d ON (e.deptno = d.deptno);
<--全連接--> SELECT e.ename,e.deptno,d.loc FROM emp e FULL OUTER JOIN dept d ON (e.deptno = d.deptno);

?

轉載于:https://www.cnblogs.com/hithongming/p/9333801.html

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

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

相關文章

博鰲“‘AI+時代’來了嗎”分論壇,嘉賓們有何重要觀點?...

雷鋒網(公眾號&#xff1a;雷鋒網)3月27日消息&#xff0c;正在進行中的博鰲亞洲論壇2019年年會&#xff0c;于2019年3月26日至29日在中國海南博鰲舉辦。今年博鰲論壇的主題為“共同命運 共同行動 共同發展”。今天&#xff0c;在主題為《“AI時代”來了嗎&#xff1f;》分論壇…

一款統計摸魚時長的開源項目

對于我們程序員&#xff0c;在工作中一天8小時&#xff0c;不可能完全在寫代碼了&#xff0c;累了刷刷論壇、群里吹吹牛&#xff0c;這都是非常正常的。雖然一天下來&#xff0c;可能我們都可以按時完成工作&#xff0c;但是我們不知道&#xff0c;時間都花在哪里了&#xff0c…

saltstack 主題說明

轉載于:https://www.cnblogs.com/40kuai/p/9335869.html

基于spring boot 的ssm項目的簡單配置

2019獨角獸企業重金招聘Python工程師標準>>> 我前面的帖子有介紹spring boot的簡單搭建&#xff0c;現在我再講講spring boot的簡單配置 首先&#xff0c;項目結構 啟動類 RestController 注解相當于ResponseBody &#xff0b; Controller合在一起的作用。 Sprin…

nest 架構_如何與其他人分享您的Nest Cam Feed

nest 架構Your Nest Cam can help you keep an eye on your home from anywhere you are, but more eyes you trust to watch your stuff is more comforting. If you want someone else to check in once in a while, you can share your Nest Cam feed with a simple, passwo…

關于公司內部DNS的整改建議

文章背景&#xff1a;由給leader的郵件而來&#xff0c;在文章末尾另加了一些補充&#xff08;見FAQ&#xff09;。原主題&#xff1a;關于公司內網DNS服務器中的u-sooc.com域名調整建議 建議&#xff1a;將公司內部DNS服務器&#xff08;Windows Server 2008 R2&#xff09;所…

.Net 和Assembly下滑其它回升,TIOBE編程語言2022年12排行榜

楔子TIOBE編程語言排行榜一般反應的是語言的生態&#xff0c;個人比較喜歡這個排行。來看下2022年最后一個月12月&#xff0c;最后一天,TIOBE的排行榜單。榜單分析這里只看下前10名的編程語言&#xff0c;里面非常顯眼的是所有的語言都增加了生態環境&#xff0c;包括不被看好的…

Haproxy安裝與配置

Haproxy安裝與配置 有關高負載均衡的軟件&#xff0c;目前使用比較多的是haproxy、nginx和lvs。下面我們就開始學習haprxoy這款軟件。 1、Haproxy概念 1.1、haproxy原理 haproxy提供高可用性、負載均衡以及基于TCP(第四層)和HTTP&#xff08;第七層&#xff09;應用的代理&…

刪除word中所有的表格_如何在Word中刪除表格

刪除word中所有的表格If you’ve inserted a table in Word and you now want to delete it, you may have found it’s not all that straightforward to delete the entire table without deleting other content around the table. We’ll show you a couple of ways around…

Java web application——基礎

概述 一個WAR文件包含了構成一個Web應用程序所需要的文件。WAR文件作為一個單元部署在一個或多個WebLogic Server實例上。 WebLogic Server上的Web存檔始終包含以下文件&#xff1a; 一個servlet或Java Server Page&#xff08;JSP&#xff09;&#xff0c;以及任何幫助程序類。…

Jenkins在windows平臺下,讓Powershell和批處理可以拉起進程并保持

&#x1f4e2;歡迎點贊 &#xff1a;&#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff0c;賜人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原創&#x1f4e2;作者格言&#xff1a;無盡的折騰后&#xff0c;終于又回到…

ASP.NET高并發解決方案

一、頁面靜態化&#xff1b; 二、運用WCF,WEB SERVICE等技術實現分布式業務邏輯處理及數據訪問的能力&#xff1b; 三、頁面緩存&#xff1b; 四、數據緩存&#xff1b; 五、建立圖片文件服務器&#xff1b; 本文轉自 夢在旅途 博客園博客&#xff0c;原文鏈接&#xff1a;http…

MVC身份驗證及權限管理(轉載)

from https://www.cnblogs.com/asks/p/4372783.html MVC自帶的ActionFilter 在Asp.Net WebForm的中要做到身份認證微軟為我們提供了三種方式&#xff0c;其中最常用的就是我們的Form認證&#xff0c;需要配置相應的信息。例如下面的配置信息&#xff1a; <authentication mo…

面試問題總結

面試了兩家公司&#xff0c;第一家沒有筆試直接面試&#xff0c;第二家筆試面試&#xff0c;將記得住的問題記錄下來&#xff0c;答案自己找的&#xff0c;有好的答案歡迎提出。 1、響應式布局 一家公司問了em和rem的區別&#xff0c;另一家公司先問了一下px,em,rem的區別&…

WPF-23 基于Timer任務調度

.NET的FCL中提供了幾個計時器&#xff0c;大多數初學者都不清楚他們有什么不同&#xff0c;那我們這節來剖解一下每個計時器的本質&#xff1a;1.System.Threading.Timer如果在一個線程池上執行一個定時的周期性的后臺線程任務他是最好的選擇&#xff0c;這個類是和線程池相關聯…

在.NET中不安裝Office使用EPPlus生成帶圖表(Chart)的Excel報表

在開發.NET應用中可能會遇到需要生成帶圖表(Chart)的Excel報表的需求&#xff0c;特別是在一些ASP.NET網站中&#xff0c;有時候我們并不能保證Web服務器上一定安裝了Office組件&#xff0c;所以使用微軟的Office來生成Excel并不保證在所有情況下都使用&#xff0c;有時候即使W…

facebook 邀請好友_如何在Facebook上與某人解除好友

facebook 邀請好友It’s very easy for your Facebook News Feed to get cluttered. After a few years adding ukulele playing magicians you meet wandering the street and the bar staff at every bar you go to regularly, it gets overrun with people you’ll never se…

mac下npm/node的安裝和卸載、升級;node、npm升級后最后刪掉node_modules重新安裝

mac還是使用brew install簡單一些&#xff1b;最好使用一種安裝方式&#xff0c;不要多種方式互用&#xff1b; 更新npm到最新版本npm install -g npm更新npm到指定版本 npm -g install npm2.9.1指定安裝目錄npm install --prefix /usr/local -g npm 1、從官網https://nodejs.o…

軟件工程小組第三次正式會議

會議主題&#xff1a;主要確定數據庫具體內容與會時間&#xff1a;3月29日與會地點&#xff1a;圖書館小組研究室雨水612與會成員&#xff1a;尚卓燃、張世豪、王昊鈺、傅宇豪會議記錄&#xff1a; 小組成員一起討論數據庫&#xff0c;確定了數據庫中的實體、屬性、聯系&#…

Edison的2022年終總結

大家好&#xff0c;我是Edison。2022年即將結束&#xff0c;又到了做年終總結的時候&#xff0c;它是我每年的一個習慣&#xff0c;意味著又要開始新的征途&#xff0c;在開始新的征途之前回顧一下很有必要。艱難抉擇&#xff1a;從互聯網到制造業今年最大的變化就是又換了份工…