Oracle數據庫之多表查詢、層次查詢(五)

目錄

前言

Oracle 的連接條件的類型

多表查詢

1. 使用JOIN關鍵字

2. 使用WHERE子句進行多表查詢

3. 子查詢

4. EXISTS關鍵字

5. 集合運算

6. 注意事項:

層次查詢

前言

Oracle 的連接條件的類型

  • 等值連接
  • 不等值連接
  • 外連接
  • 自連接

多表查詢

在Oracle數據庫中,多表查詢通常涉及到從兩個或更多的表中檢索數據,并通過某種關聯條件將這些表連接起來。以下是一些關于Oracle多表查詢的基本方法和示例:

1. 使用JOIN關鍵字

  • INNER JOIN(內連接):返回兩個表中滿足連接條件的記錄。

    SELECT *   
    FROM table1   
    INNER JOIN table2 ON table1.id = table2.id;
  • LEFT JOIN(左連接):從左表返回所有的記錄,以及右表中連接字段相等的記錄。如果右表中沒有匹配,則結果中右表的部分包含空值。

    SELECT *   
    FROM table1   
    LEFT JOIN table2 ON table1.id = table2.id;
  • RIGHT JOIN(右連接):與左連接相反,從右表返回所有的記錄。
    SELECT *   
    FROM table1   
    RIGHT JOIN table2 ON table1.id = table2.id;
  • FULL OUTER JOIN(全外連接):當左表或右表中有匹配時返回行。

2. 使用WHERE子句進行多表查詢

雖然JOIN關鍵字更直觀且更常用于多表查詢,但你也可以使用WHERE子句來連接表。但請注意,使用WHERE子句進行多表查詢可能會導致笛卡爾積問題(即返回兩個表中所有可能的組合),因此應謹慎使用。

SELECT *   
FROM table1, table2   
WHERE table1.id = table2.id;

3. 子查詢

子查詢是嵌套在另一個查詢中的查詢。你可以在主查詢的WHERE子句、FROM子句或SELECT子句中使用子查詢。

SELECT *   
FROM table1   
WHERE id IN (SELECT id FROM table2 WHERE some_condition);

4. EXISTS關鍵字

EXISTS用于檢查子查詢是否返回任何結果。如果子查詢返回至少一行,則EXISTS返回TRUE,否則返回FALSE。

SELECT *   
FROM table1 t1   
WHERE EXISTS (SELECT 1 FROM table2 t2 WHERE t1.id = t2.id);

5. 集合運算

  • UNION:返回兩個或多個SELECT語句的結果集的并集,但不包括重復行。
  • UNION ALL:返回兩個或多個SELECT語句的結果集的并集,包括重復行。
  • INTERSECT:返回兩個或多個SELECT語句的結果集的交集。
  • MINUS:返回第一個SELECT語句的結果集,但排除第二個SELECT語句的結果集中出現的任何行。

6. 注意事項:

  • 在進行多表查詢時,確保你理解了表之間的關系以及你想從查詢中獲得什么。
  • 使用適當的連接類型(如INNER JOIN、LEFT JOIN等)來確保你獲得所需的結果。
  • 當使用子查詢時,注意子查詢的性能,并考慮是否可以使用JOIN或其他技術來優化查詢。
  • 在使用集合運算時,確保參與運算的SELECT語句具有相同的列數和數據類型,并且這些列的順序也必須相同。

層次查詢

Oracle中的層次查詢(Hierarchical Queries)用于遍歷具有樹形結構的數據集合,以獲取樹的層次關系報表。這種查詢特別適用于處理具有父子關系的數據,如組織結構、文件系統目錄等。

層次查詢主要通過START WITHCONNECT BY子句來實現。START WITH子句用于指定遍歷的起始點(根節點),而CONNECT BY子句則用于定義父子關系以及遍歷的方向。

以下是層次查詢的基本語法:

SELECT [LEVEL], column, expr...  
FROM table  
[WHERE condition]  
START WITH condition  
CONNECT BY [PRIOR] column1 = column2 | column1 = [PRIOR] column2;
  • LEVEL是一個偽列,表示當前行在樹中的層次。例如,根節點的層次為1,其子節點的層次為2,依此類推。
  • table是包含樹形數據的表名。
  • WHERE子句用于限制查詢返回的行,但不影響層次關系。被截斷的節點的下層子節點不受影響。
  • START WITH子句用于指定遍歷的起始點。對于真實的層次關系,這個子句是必須的。
  • CONNECT BY子句用于定義父子關系以及遍歷的方向。PRIOR是一個運算符,用于指定關系的方向。例如,PRIOR column1 = column2表示從父節點到子節點的遍歷,而column1 = PRIOR column2則表示從子節點到父節點的遍歷。

以下是一個具體的示例,假設有一張名為employees的表,其中包含員工的編號(employee_id)、姓名(last_name)和上級的編號(manager_id):

SELECT last_name, employee_id, manager_id, LEVEL  
FROM employees  
START WITH manager_id IS NULL -- 從根節點(沒有上級)開始遍歷  
CONNECT BY PRIOR employee_id = manager_id; -- 定義父子關系:當前員工的上級是前一行員工的編號

這個查詢將返回所有員工的姓名、編號、上級編號以及他們在組織中的層次。

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

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

相關文章

商場學習之微服務

前言 寒假前在新電腦上配置了java環境,maven倉庫,node,js,navicat,MySQL,linux,vmware等環境,創建了6個mysql數據庫,77張表。 如此多的表,字段,去手寫基礎…

Web入門——三欄布局頁面

前置知識 內外邊距 內邊距(padding): padding是元素邊框與其內容之間的空間。也就是說,如果你給一個元素設置了內邊距,這個空間會作為元素內容與元素邊框之間的緩沖區域。設置內邊距會使元素本身變大。例如padding:10px就創建了10像素的空間…

Qt之QMqtt 發送圖片數據

簡述 MQTT(消息隊列遙測傳輸)是ISO標準下基于發布/訂閱范式的消息協議;它工作在TCP/IP協議族上,是為硬件性能低下的遠程設備以及網絡狀況糟糕的情況下而設計的發布/訂閱型消息協議,為此,它需要一個消息中間件; MQTT是一個基于客戶端-服務器的消息發布/訂閱傳輸協議;MQT…

Ubuntu設置中午輸入法

本篇博客將指導您如何在Ubuntu系統中設置中文輸入法,讓您能夠輕松地進行中文輸入。 準備工作 在開始之前,請確保您的系統已經更新到最新版本。這可以通過以下命令來完成: sudo apt update && sudo apt upgrade這將幫助確保所有的軟…

Docker in Docker(DinD)原理與實戰

🐇明明跟你說過:個人主頁 🏅個人專欄:《Docker幻想曲:從零開始,征服容器宇宙》 🏅 🔖行路有良友,便是天堂🔖 目錄 一、引言 1、Docker簡介 2、Docker …

使用 AI Assistant for Observability 和組織的運行手冊增強 SRE 故障排除

作者:Almudena Sanz Oliv, Katrin Freihofner, Tom Grabowski 通過本指南,你的 SRE 團隊可以實現增強的警報修復和事件管理。 可觀測性 AI 助手可幫助用戶使用自然語言界面探索和分析可觀測性數據,利用自動函數調用來請求、分析和可視化數據…

Harmony 添加library依賴庫步驟

在Harmony添加library依賴庫步驟如下: 1、在library中定義名字 在library中的oh-package.json5中定義library對外的名字是什么:格式是 “name”:“ohos/名字” {"name": "ohos/library_name" //名字 }2、在項目目錄build-profi…

windows系統安裝Ubuntu子系統

安裝前先在 控制面板 中打開 程序與功能選項 ,點擊 啟用或關閉Windows功能: 勾選 適用于 Linux的Windows子系統 和 虛擬機平臺 、 Hyper-v 。 重啟電腦后再 Microsoft Store Windows應用商店 中下載合適的Ubuntu版本。 運行Ubuntu程序,如出現…

【實戰】算法思路總結

面試過程中,總是被拷打,信心都要沒了。但是也慢慢摸索出一些思路,希望對大家有幫助。 (需要多用一下ACM模式,力扣模式提供好了模板,自己在IDEA里面寫的話,還是會有些陌生) 0、基本…

僵尸進程111

Linux 系統中的進程可能處于如下狀態中的一種: D 不可中斷的休眠 I 空閑 R 運行中 S 休眠 T 被調度信號終止 t 被調試器終止 Z 僵尸狀態 Interruptible Sleep,可中斷睡眠,在 ps 命令中顯示 S。處在這種睡眠狀態的進程是可以通過給它…

OC中Block為什么不能為nil

在 Objective-C 中,向 nil 對象發送消息是完全有效的,這是因為 Objective-C 運行時對 nil 消息發送進行了特別的處理。當你向 nil 對象發送消息時,消息會被靜默地忽略,不執行任何操作,也不會返回任何值(或者…

Unity Editor 找物體助手

找啊找朋友~ 🍱功能介紹🥙使用方法 🍱功能介紹 💡輸入相關字符串,它會幫你找到名稱中帶有該字符串的所有物體,還會找包含該字符串的Text、TextMeshProUGUI。 🥙使用方法 💡導入插…

小學拼音弄一下

import re from xpinyin import Pinyindef remove_middle_characters(text):# 僅保留漢字chinese_chars re.findall(r[\u4e00-\u9fff], text)cleaned_text .join(chinese_chars)# 如果字符數為偶數,則在中間添加空格if len(cleaned_text) % 2 0:middle_index le…

【北京迅為】《iTOP-3588從零搭建ubuntu環境手冊》-第5章 安裝SSH

RK3588是一款低功耗、高性能的處理器,適用于基于arm的PC和Edge計算設備、個人移動互聯網設備等數字多媒體應用,RK3588支持8K視頻編解碼,內置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800萬像素ISP&…

從0開始學python(七)

目錄 前言 1 break、continue和pass函數 1.1 break 1.2 continue 1.3 pass 2、序列的索引及切片操作 2.1字符串的索引和切片 2.1.1 字符串索引 2.1.2 字符串切片 總結 前言 上一篇文章我們介紹了python中的循環結構,包括for和while的使用。本章接著往下講。…

騰訊云服務器之ssh遠程連接登錄及轉發映射端口實現內網穿透(實現服務器訪問本地電腦端口)

目錄 一、創建密鑰綁定實例二、設置私鑰權限三、ssh遠程連接到服務器四、修改root密碼五、端口轉發(實現服務器訪問本地電腦的端口) 一、創建密鑰綁定實例 創建密鑰會自動下載一個私鑰,把這個私鑰復制到c盤 二、設置私鑰權限 1、刪除所有用戶…

免費剪輯的素材資源網站,超高清、可商用、不限速、無版權,迅速有效的解決您的視頻剪輯難題!

在數字媒體時代,高質量的剪輯素材已成為視頻制作的核心資源。下面為您推薦的優質視頻剪輯素材網站,都提供超高清、無限速、無版權、可商用的素材,這些網站將大大提升您的視頻制作效率和質量 01. 蛙學府 實用性:★★★★☆ 豐富性&…

您真的會高效使用 Mac 嗎?

文章目錄 屏幕的保養快捷鍵預覽修改文件名查看文件屬性搜索編輯復制,粘貼,剪切,撤銷刪除 跳轉窗口屏幕截圖聲音Dock強制退出查字典神奇的Option鍵鼠標與觸控板切換桌面與應用程序打開通知中心打開Mission Control 安裝與卸載Mac應用程序壓縮和…

記一些CISP-PTE題目解析

0x01 命令執行 直接payload: 127.0.0.1 & whoami,發現可以成功執行whoami命令 然后ls …/ ,發現有個key.php文件 嘗試用cat命令查看 發現不行被攔截了。(其實題目過濾了常用的查看文件的命令 ) 這里有兩種思路,第…

關于一致性,你該知道的事兒(下)

關于一致性,你該知道的事兒(下) 前言一、并發修改單個對象1.1 原子寫操作1.2 顯示加鎖1.3 原子的TestAndSet1.4 版本號機制 二、 多個相關對象的一致性2.1 最大努力實現2.2 2PC && TCCC2.3.基于可靠消息的一致性方案2.4.Saga事務 三、…