深入理解 SQL 的 JOIN 查詢:從基礎到高級的第一步

在處理數據庫時,我們常常需要從多個表中提取數據。比如想知道一個城市的天氣情況,同時又想知道這個城市的具體位置。這就需要將?weather?表和?cities?表結合起來查詢。這種操作在 SQL 中被稱為?JOIN 查詢

現在看下兩種表的情況

1.weather 表:

2.cities?表:

一.JOIN 查詢的基礎

現在有兩個表:weather?和?cities。weather?表記錄了不同城市的天氣情況,而?cities?表記錄了城市的名稱和位置。

想找出所有城市的天氣記錄以及它們的位置,我們可以使用?JOIN 語句來連接兩個表。語句如下:

select?*?from?weather?join?cities?on?city = name;

也可以使用別名,在兩個表有相同字段名稱時來區別它們。

???????

SELECT?*?FROM?weather?as?w?JOIN?cities?as?c?ON?w.city?=?c.name;

上面語句的意思是:從 weather 表中取出每一行,然后在 cities 表中查找 name 列與 weather 表中的 city 列相匹配的行。如果找到匹配的行,就將這兩行的內容組合在一起返回。

也可以按照要求查詢特點字段。

???????

SELECT w.id,w.city,w.prcp,c.location?FROM weather?as?w JOIN cities?as?c ON w.city = c.name;

注意

? ? 列名沖突:如果兩個表中有同名列,需要使用表名來限定列名,例如 w.city 或 c.name。

? ? 明確指定輸出列:為了避免不必要的列重復,建議明確指定需要輸出的列,而不是使用 SELECT *。

二.外連接(Outer Join)


在上面的例子中,西安?沒有出現在結果中,因為 cities 表中沒有?西安?的記錄。如果希望即使沒有匹配的行也能顯示 weather 表中的記錄,可以使用?外連接。

1.左外連接(LEFT OUTER JOIN)

左外連接會返回左表(weather)的所有行,即使右表(cities)中沒有匹配的行。如果沒有匹配的行,右表的列將顯示為?NULL

???????

select?w.id,w.city,w.prcp , c.id,c.name,c.location?from?weather wleft?outer?join?cities c?-- 這里的 outer可以省略不寫on?w.city?=?c.name;

2.右外連接(RIGHT OUTER JOIN)

右外連接會返回右表(cities)的所有行,即使左表(weather)中沒有匹配的行。

???????

select?w.id,w.city,w.prcp , c.id,c.name,c.location?from?weather wright?join?cities con?w.city = c.name;

3.全外連接(FULL OUTER JOIN)

全外連接會返回左表和右表的所有行,無論是否有匹配的行。如果某一行在另一表中沒有匹配的行,那么對應的列將顯示為?NULL

???????

select?w.id,w.city,w.prcp , c.id,c.name,c.location?from?weather wfull?outer?join?cities c ?-- 這里的 outer可以省略不寫on?w.city?=?c.name;

外連接可以簡單理解為?指向誰,以誰為主。

三.自連接(Self Join)

有時候,我們可能需要將一個表與自己連接起來。例如想找出杭州的溫度范圍在其他天氣記錄之內的天氣記錄數據。

語句如下:

???????

SELECT?distinct? w1.city,?? ? ? w1.temp_low?AS?low,?? ? ? w1.temp_high?AS?high,
? ? ? w2.city,?? ? ? w2.temp_low?AS?low,?? ? ? w2.temp_high?AS?highFROM?weather w1JOIN?weather w2ON?w1.temp_low?<?w2.temp_low?AND?w1.temp_high?>?w2.temp_highwhere?w1.city?=?'杭州';

在這個查詢中,我們將 weather 表重新標記為 w1 和 w2,以便區分連接的左部和右部。

總結下:JOIN 查詢是 SQL 中非常強大的工具,可以幫助我們從多個表中提取和組合數據。

通過使用不同的 JOIN 類型(如內連接、左外連接、右外連接和全外連接),我們可以靈活地處理各種數據組合需求。同時,自連接也為我們提供了處理復雜邏輯的手段。

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

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

相關文章

上傳頭像upload的簡易方法,轉base64調接口的

1.首頁使用el-image顯示數據&#xff0c;用的是轉base64后端返給的 <el-table-column prop"avatar" align"center" label"頭像"><template #default"scope"><el-image style"height: 40px;width: 40px;" :sr…

[AD] CrownJewel-1 Logon 4799+vss-ShadowCopy+NTDS.dit/SYSTEM+$MFT

QA QA攻擊者可以濫用 vssadmin 實用程式來建立卷影快照&#xff0c;然後提取 NTDS.dit 等敏感檔案來繞過安全機制。確定卷影複製服務進入運作狀態的時間。2024-05-14 03:42:16建立卷影快照時&#xff0c;磁碟區複製服務會使用機器帳戶驗證權限並列舉使用者群組。找到卷影複製過…

rtpmixsound:實現音頻混音攻擊!全參數詳細教程!Kali Linux教程!

簡介 一種將預先錄制的音頻與指定目標音頻流中的音頻&#xff08;即 RTP&#xff09;實時混合的工具。 一款用于將預先錄制的音頻與指定目標音頻流中的音頻&#xff08;即 RTP&#xff09;實時混合的工具。該工具創建于 2006 年 8 月至 9 月之間。該工具名為 rtpmixsound。它…

GitHub 趨勢日報 (2025年05月28日)

&#x1f4ca; 由 TrendForge 系統生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日獲星趨勢圖 今日獲星趨勢圖 2379 agenticSeek 1521 computer-science 841 n8n 577 langflow 351 qlib 282 skt…

threejsPBR材質與紋理貼圖

1. PBR材質簡介 本節課沒有具體的代碼&#xff0c;就是給大家科普一下PBR材質&#xff0c;所謂PBR就是&#xff0c;基于物理的渲染(physically-based rendering)。 Three.js提供了兩個PBR材質相關的APIMeshStandardMaterial和MeshPhysicalMaterial,MeshPhysicalMaterial是Mes…

Android 12系統源碼_多屏幕(四)自由窗口模式

一、小窗模式 1.1 小窗功能的開啟方式 開發者模式下開啟小窗功能 adb 手動開啟 adb shell settings put global enable_freeform_support 1 adb shell settings put global force_resizable_activities 11.2 源碼配置 copy file # add for freedom PRODUCT_COPY_FILES …

C# 將HTML文檔、HTML字符串轉換為圖片

在.NET開發中&#xff0c;將HTML內容轉換為圖片的需求廣泛存在于報告生成、郵件內容存檔、網頁快照等場景。Free Spire.Doc for .NET作為一款免費的專業文檔處理庫&#xff0c;無需Microsoft Word依賴&#xff0c;即可輕松實現這一功能。本文將深入解析HTML文檔和字符串轉圖片兩…

【HTML-15.2】HTML表單按鈕全面指南:從基礎到高級實踐

表單按鈕是網頁交互的核心元素&#xff0c;作為用戶提交數據、觸發操作的主要途徑&#xff0c;其重要性不言而喻。本文將系統性地介紹HTML表單按鈕的各種類型、使用場景、最佳實踐以及高級技巧&#xff0c;幫助開發者構建更高效、更易用的表單交互體驗。 1. 基礎按鈕類型 1.1…

吳恩達MCP課程(4):connect_server_mcp_chatbot

目錄 完整代碼代碼解釋1. 導入和初始化2. 類型定義3. MCP_ChatBot 類初始化4. 查詢處理 (process_query)5. 服務器連接管理6. 核心特性總結 示例 完整代碼 原課程代碼是用Anthropic寫的&#xff0c;下面代碼是用OpenAI改寫的&#xff0c;模型則用阿里巴巴的模型做測試 .env 文…

C++內存學習

引入 在實例化對象時&#xff0c;不管是編譯器還是我們自己&#xff0c;會使用構造函數給成員變量一個合適的初始值。 但是經過構造函數之后&#xff0c;我們還不能將其稱為成員變量的初始化&#xff1a; 構造函數中的語句只能稱為賦初值&#xff0c;而不能稱作初始化 因為初…

MySQL 大戰 PostgreSQL

一、底層架構對比 ??維度????MySQL????PostgreSQL????存儲引擎??多引擎支持&#xff08;InnoDB、MyISAM等&#xff09;單一存儲引擎&#xff08;支持擴展如Zheap、Zedstore&#xff09;??事務實現??基于UNDO日志的MVCC基于堆表(Heap)的MVCC??鎖機制??…

基于FPGA的二叉決策樹cart算法verilog實現,訓練環節采用MATLAB仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 5.算法完整程序工程 1.算法運行效果圖預覽 (完整程序運行后無水印) MATLAB訓練結果 上述決策樹判決條件&#xff1a; 分類的決策樹1 if x21<17191.5 then node 2 elseif x21>17191…

【RAG】RAG綜述|一文了解RAG|從零開始(下)

文章目錄 5. RAG的架構5.1 Naive RAG5.2 Advanced RAG5.2.1 檢索前處理和數據索引技術5.2.2 知識分片技術5.2.3 分層索引5.2.4 檢索技術5.2.4.1 優化用戶查詢5.2.4.2 通過假想文檔嵌入修復查詢和文檔不對稱5.2.4.3 Routing5.2.4.5 自查詢檢索5.2.4.6 混合搜索5.2.4.7 圖檢索5.2…

山東大學軟件學院項目實訓-基于大模型的模擬面試系統-面試官和面試記錄的分享功能(2)

本文記錄在發布文章時&#xff0c;可以添加自己創建的面試官和面試記錄到文章中這一功能的實現。 前端 首先是在原本的界面的底部添加了兩個多選框&#xff08;后期需要美化調整&#xff09; 實現的代碼&#xff1a; <el-col style"margin-top: 1rem;"><e…

FPGA純verilog實現MIPI-DSI視頻編碼輸出,提供工程源碼和技術支持

目錄 1、前言工程概述免責聲明 2、相關方案推薦我已有的所有工程源碼總目錄----方便你快速找到自己喜歡的項目我這里已有的 MIPI 編解碼方案 3、設計思路框架工程設計原理框圖FPGA內部彩條RGB數據位寬轉換RGB數據緩存MIPI-DSI協議層編碼MIPI-DPHY物理層串化MIPI-LVDS顯示屏工程…

LXQt修改開始菜單高亮

開始菜單紅色高亮很難看 mkdir -p ~/.local/share/lxqt/palettes/ mkdir -p ~/.local/share/lxqt/themes/ cp /usr/share/lxqt/palettes/Dark ~/.local/share/lxqt/palettes/Darker cp -p /usr/share/lxqt/themes/dark ~/.local/share/lxqt/themes/darker lxqt-panel.qss L…

DeepSeek-R1-0528-Qwen3-8B 本地ollama離線運行使用和llamafactory lora微調

參考: https://huggingface.co/deepseek-ai/DeepSeek-R1-0528-Qwen3-8B 量化版本: https://huggingface.co/unsloth/DeepSeek-R1-0528-Qwen3-8B-GGUF https://docs.unsloth.ai/basics/deepseek-r1-0528-how-to-run-locally 1、ollama運行 升級ollama版本到0.9.0 支持直接…

vue3 + WebSocket + Node 搭建前后端分離項目 開箱即用

[TOC](vue3 WebSocket Node 搭建前后端分離項目) 開箱即用 前言 top1&#xff1a;vue3.5搭建前端H5 top2&#xff1a;Node.js koa搭建后端服務接口 top3&#xff1a;WebSocket 長連接實現用戶在線聊天 top4&#xff1a;接口實現模塊化 Mysql 自定義 top5&#xff1a;文件上…

Vue 前端代碼規范實戰:ESLint v9、Prettier 與 Stylelint 集成指南與最佳實踐

&#x1f680; 作者主頁&#xff1a; 有來技術 &#x1f525; 開源項目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 倉庫主頁&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 歡迎點贊 &#x1f44d; 收藏 ?評論 …

docker docker-ce docker.io

Ubuntu安裝 ??更新軟件包列表?? 首先確保軟件包列表是最新的&#xff1a; sudo apt-get update 使用正確的卸載命令?? 替換 docker-engine 為 docker-ce 或 docker.io&#xff1a; sudo apt-get remove docker docker-ce docker.io containerd runc ??檢查已安裝的 Do…