GaussDB join 連接的用法

1 join 連接的作用

join 連接用于把來自兩個或多個表的行結合起來,基于這些表之間的共同字段。
最常見的 join 類型:inner join(簡單的 join)。 inner join 從多個表中返回滿足 join條件的所有行。

2 示例數據

讓我們看看選自 "orders" 表的數據:

csdn=> select * from orders;order_id | cust_id | empoyee_id |     order_date      | ship_id
----------+---------+------------+---------------------+---------1 |       3 |          9 | 2018-09-21 09:20:23 |       32 |       4 |          9 | 2018-06-28 11:10:23 |       53 |       6 |          3 | 2018-09-21 13:02:19 |       34 |       3 |          7 | 2018-09-28 14:11:16 |       45 |       1 |          4 | 2018-09-30 15:02:12 |       4
(5 rows)csdn=>
然后,看看選自 "customers" 表的數據:
?
csdn=> select * from customers;id |  name  |     addr      | city |  zip   | province
----+--------+---------------+------+--------+----------1 | 魯智深 | 北京路27號    | 平涼 | 200000 | 甘肅省2 | 李四   | 南京路12號    | 杭州 | 310000 | 浙江市3 | 王五   | 花城大道17號  | 廣州 | 510000 | 廣州省4 | 馬六   | 江夏路19號    | 武漢 | 430000 | 湖北省5 | 趙七   | 西二旗12號    | 北京 | 100000 | 北京市6 | 宋一   | 花城大道21號  | 廣州 | 510000 | 廣東省7 | 劉二   | 長安街 121 號 | 北京 | 100000 | 北京市8 | 宋江   | 梁山路1號     | 濟南 | 250000 | 山東省| 武松   |               | 邢臺 |        | 河北省10 | 韓信   | 梁山路1號     | 渝東 | 250001 | 四川省11 | 呂不韋 | 梁山路1號     | 渝中 | 250001 | 四川省
(11 rows)csdn=>

請注意,"orders" 表中的 "cust_id" 列指向 "customers" 表中的"id"。上面這兩個表是通過 "客戶ID" 列聯系起來的。

select o.order_id as "訂單ID",c.name as "姓名", o.order_date as "訂單日期"
from orders o
inner join customers c
on o.cust_id=c.id;

結果:

3 不同的join


在我們繼續講解實例之前,我們先列出您可以使用的不同的 sql join 類型:

  • inner join:如果表中有至少一個匹配,則返回行
  • left join:即使右表中沒有匹配,也從左表返回所有的行
  • right join:即使左表中沒有匹配,也從右表返回所有的行
  • full join:只要其中一個表中存在匹配,則返回行

?

4 inner join


內部鏈接 inner join 關鍵字選擇兩個表中具有匹配值的記錄。


inner join 語法


select column_name(s) from table1
inner join table2 on
table1.column_name = table2.column_name;


注釋:inner join 與 join 是相同的,上面的示例就是 inner join

?

5 left join


sql 左鏈接 left join 關鍵字返回左表(表 1)中的所有行,即使在右表(表 2)
中沒有匹配。如果在左表中沒有匹配,結果是 null。


left join 語法


select column_name(s)
from table1
left join table2
on table1.column_name=table2.column_name;


或:


select column_name(s)
from table1
left outer join table2
on table1.column_name=table2.column_name;


注釋:在GaussDB數據庫中,left join 稱為 left outer join。

?

?

left join 示例


我們想看看客戶 customers 表中的所有用戶是否都有下單,可以使用如下查詢語言:

select c.name as "姓名",o.order_id as "訂單id", o.order_date as "訂單日期"
from customers c
left join orders o
on o.cust_id=c.id;


結果:

我們發現李四,劉二,趙七,宋江,呂不韋,韓信,武松沒有對應的訂單 ID 和訂單日期,是因為他們沒有在訂單 ,表 orders 中不存在,沒有匹配上他們的信息。但是由于是左連接,就把主表 customers 的信息全部顯示出來了,就是對應上圖的 table1。

?

6 right join


sql右鏈接 right join 關鍵字返回右表(table2)的所有行,即使在左表(table1)上沒有匹配。如果左表沒有匹配,則結果為 null。

right join 語法


select column_name(s) from table1
right join table2 on
table1.column_name = table2.column_name;


注釋:在GaussDB數據庫中,right join 稱為 right outer join。

?

右連接與左連接的主表剛好相反,會將 table2 中的數據完全顯示,如果 table1 中
沒有匹配上的就不顯示。
?
select c.name as "姓名",c.province as "省",o.order_id as "訂單id", o.order_date as "訂單日期"
from customers c
right join orders o
on o.cust_id=c.id;

結果:

?

7 full outer join


當左(表 1)或右(表 2)表記錄匹配時,full outer join 關鍵字將返回所有記錄。
注意: full outer join 可能會返回非常大的結果集!

FULL OUTER JOIN 語法


select column_name(s) from table1
full outer join table2 on
table1.column_name = table2.column_name;

?

全連接就是將 table1 和 table2 的內容完全顯示,不管有沒有匹配上。
?
?
 select c.name as "姓名",c.province as "省",o.order_id as "訂單id",o.order_date as "訂單日期"
from customers c
full join orders o
on o.cust_id=c.id;

結果:

?

8?批注

join在 SQL 中占有重要的地位,通過 join 我們可以將有匹配關系的兩張表或更 多表進行關聯,來獲取我們想要的數據。關聯的方式也比較靈活,常用的就是 INNER JOIN,請務必掌握它。

?

?

?

?

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

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

相關文章

GitHub開源輕量級語音模型 Vui:重塑邊緣智能語音交互的未來

前言 今天將深入解析一款顛覆性開源語音模型——Vui(來自 Fluxions-AI 項目)。它正以“輕量化”為矛,刺破傳統語音模型高耗能的壁壘,讓智能語音無處不在。 GitHub:https://github.com/fluxions-ai/vuihuggingface&am…

用aws下載NOAA的MB文件

安裝aws下載某航次MB文件 安裝aws curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install下載對應航次數據 aws s3 cp s3://noaa-wcsd-pds/data/raw/Atlantis/AT26-09 /home/xxx/…

Kubernetes (k8s)、Rancher 和 Podman 的異同點分析

1. Kubernetes (k8s) 類型:容器編排系統。功能: 自動化部署、擴展和管理容器化應用。支持跨多臺主機的容器編排。提供服務發現、負載均衡、滾動更新等功能。 架構:基于 Master-Node 架構,Master 負責調度和管理,Node 運…

71 模塊編程之新增一個字符設備

前言這個 主要是 最開始的時候了解驅動的時候, 看到的一系列的 case, 這里 來大致剖析一下 相關的道理這些模塊 是怎么和內核交互的, 內核的這些業務是怎么實現的 這里主要是一個模塊來注冊了一個字符設備 然后這個字符設備 可讀可寫, 基于的是分配的一段空間 測試用例測試模塊…

小眾創新方向!多傳感器融合與視覺慣性導航,定位精度和效率大幅提升!

多傳感器融合與視覺慣性導航技術(VINS)取得了顯著進展。近期,研究人員通過優化視覺與慣性傳感器數據的融合算法、引入深度學習技術以及改進系統架構,顯著提升了VINS在復雜環境下的定位精度和魯棒性。基于深度學習的特征提取方法能…

超簡單linux上部署Apache

1.Apache是什么?Apache 是世界上最流行的 ??開源Web服務器軟件??,由 Apache 軟件基金會維護。??主要功能??:接收客戶端(如瀏覽器)的HTTP請求,返回網頁、圖片等靜態/動態資源。??特點??&#xf…

前端 SSE 實戰應用:用最簡單的方式實現實時推送

前端 SSE 實戰應用:用最簡單的方式實現實時推送 📌 點贊收藏關注不迷路! 在前端項目中,我們常聽到“實時通信”這個需求 —— 聊天、進度、狀態變化、系統消息。 但提到實時,大家首先想到的是 WebSocket,對…

第16章 基于AB實驗的增長實踐——驗證想法:AB實驗實踐

?一、AB實驗全流程框架?實驗分為5個核心環節:實驗假設? → 實驗設計? →實驗運行? → 實驗分析? → 實驗決策??二、各環節核心要點詳解??1. 實驗假設??原則?:目標性、可歸因、可復用(前兩者必選)?(1&…

解決【軟件安裝路徑】失敗的方法

出現問題上圖所示問題為:你的臨時目錄路徑中包含 Unicode 字符,這可能會導致安裝損壞。請參閱故障排除指南以獲取解決方法。出現問題的原因:添加路徑下存在中文,導致系統文件無法識別。解決方法步驟一:創建Temp(臨時文…

FreeRTOS學習筆記——總覽

考慮到RTOS能夠提升單片機開發能力,也是開發復雜任務的必經之路,還是有必要學習的。 FreeRTOS教程多,免費開源,是個不錯的選擇。后續可以考慮繼續學習RT-Thread等。 參考1:FreeRTOS(教程非常詳細)——作者&…

Clip微調系列:《coOp: learning to prompt for vision-language models》

論文鏈接:arxiv.org/pdf/2109.01134v1 推薦視頻(clip_coop的代碼邏輯講解,代碼簡單,有助于理解):CLIP和CoOp工作的簡單Pytorch復現和理解_嗶哩嗶哩_bilibili 其他參考鏈接:CoOp - CLIP 自適應Prompt工程 【一】_coop…

[論文閱讀] 人工智能 + 軟件工程 | 開源軟件中的GenAI自白:開發者如何用、項目如何管、代碼質量受何影響?

開源軟件中的GenAI自白:開發者如何用、項目如何管、代碼質量受何影響? 論文:Self-Admitted GenAI Usage in Open-Source SoftwarearXiv:2507.10422 Self-Admitted GenAI Usage in Open-Source Software Tao Xiao, Youmei Fan, Fabio Calefato…

AI繪畫版權問題全解析:你的作品真的屬于你嗎?

AI繪畫版權問題全解析:你的作品真的屬于你嗎? 關鍵詞:AI繪畫、版權歸屬、生成式AI、訓練數據、獨創性、法律合規、知識產權 摘要:當你用MidJourney生成一張“賽博朋克風格的熊貓”,或用Stable Diffusion畫出“梵高筆觸的星空咖啡館”時,你是否想過:這張圖的版權屬于你、…

深入理解Linux文件I/O:系統調用與標志位應用

目錄 一、引入 二、標志位 1、什么是標志位? 2、標志位傳遞示例 輸出結果分析 關鍵點解釋 三、文件描述符(File Descriptor)(先大概了解) 四、接口介紹:open()函數 1、命令查看 2、頭文件 3、函數原型 4、參數說明 …

海康線掃相機通過采集卡的取圖設置

目錄 1、掃描高度小于65000行 1.1 軟觸發 1、采集卡設置項 2、相機設置項 1.2 硬觸發 1、采集卡設置項 2、相機設置項 2、掃描高度大于65000行 1.1 軟觸發 1、采集卡設置項 2、相機設置 1.2 硬觸發 1、采集卡設置項 2、相機設置 2.1 幀掃描 2.2 行掃描 3、注意…

InfluxDB 3與Apache Parquet:打造高性能時序數據存儲與分析解決方案

在當今數據驅動的時代,各行業產生的數據量呈爆炸式增長,如何高效存儲和管理海量數據成為企業和開發者面臨的重大挑戰。對于時序數據而言,其具有數據量大、寫入頻繁、查詢模式多樣等特點,對存儲系統的性能和效率提出了更高的要求。…

20250718-4-Kubernetes 應用程序生命周期管理-Pod對象:實現機制_筆記

一、Pod對象1. 資源共享實現機制1)共享網絡基本概念實現方式:通過將業務容器網絡加入到負責網絡的容器(infra container)實現網絡共享核心特點:共享網絡協議棧(包括TC…

防爆手機是什么?能用普通手機改裝嗎?

在石油開采平臺的井架之上,在化工車間的反應釜旁,在煤礦深達千米的巷道中,一群特殊的工作人員正使用著看似普通的通訊設備。這些設備外殼上醒目的Ex防爆認證標志,揭示著其與眾不同的身份——防爆手機。這類專為易燃易爆環境設計的…

gem install報錯解析

報錯內容 [rootlocalhost ~]# gem install bundler Fetching: bundler-2.6.9.gem (100%) ERROR: Error installing bundler:bundler requires Ruby version > 3.1.0. The current ruby version is 2.5.0.解決方案(任選其一) 這個錯誤表明你當前的 Ru…

css 如何實現大屏4個占位 中屏2個 小屏幕1個

1、 使用grid.container {display: grid;grid-template-columns: repeat(4, 1fr);gap: 20px;border: 1px solid red;width: 400px;height: 400px;}media (max-width: 768px) {.container {grid-template-columns: 1fr;}}media (min-width: 768px) and (max-width: 992px) {.con…