SQL命令詳解之多表查詢(連接查詢)

目錄

1 簡介

2 內連接查詢

2.1 內連接語法

2.2 內連接練習

3 外連接查詢

3.1 外連接語法

3.2 外連接練習

4 總結


1 簡介

連接的本質就是把各個表中的記錄都取出來依次匹配的組合加入結果集并返回給用戶。我們把 t1 和 t2 兩個表連接起來的過程如下圖所示:


在 MySQL 中多表查詢分為連接查詢和子查詢,而連接查詢又分為內連接查詢和外連接查詢,外連接查詢的方式有左外連接查詢和右外連接查詢。

2 內連接查詢

2.1 內連接語法

內連接查詢分為隱式內連接查詢和顯式內連接查詢,表示查詢 A 集合和 B 集合的交集。


語法:

-- 隱式內連接查詢
SELECT?字段列表?FROM?表1,表2…?WHERE?條件;
-- 顯示內連接查詢
SELECT?字段列表?FROM?表1?[INNER]?JOIN?表2?ON?條件;

2.2 內連接練習

練習一:查詢每名同學的姓名、成績

student 表:
+------+--------+------------+-------+
| s_id | s_name | s_birth ? ?| s_sex |
+------+--------+------------+-------+
| 01 ? | 趙雷 ? | 1990-01-01 | 男 ? ?|
| 02 ? | 錢電 ? | 1990-12-21 | 男 ? ?|
| 03 ? | 孫風 ? | 1990-05-20 | 男 ? ?|
| 04 ? | 李云 ? | 1990-08-06 | 男 ? ?|
| 05 ? | 周梅 ? | 1991-12-01 | 女 ? ?|
| 06 ? | 吳蘭 ? | 1992-03-01 | 女 ? ?|
| 07 ? | 鄭竹 ? | 1989-07-01 | 女 ? ?|
| 08 ? | 王菊 ? | 1990-01-20 | 女 ? ?|
+------+--------+------------+-------+score 表:
+------+------+---------+
| s_id | c_id | s_score |
+------+------+---------+
| 01 ? | 01 ? | ? ? ?80 |
| 01 ? | 02 ? | ? ? ?90 |
| 01 ? | 03 ? | ? ? ?99 |
| 02 ? | 01 ? | ? ? ?70 |
| 02 ? | 02 ? | ? ? ?60 |
| 02 ? | 03 ? | ? ? ?80 |
| 03 ? | 01 ? | ? ? ?80 |
| 03 ? | 02 ? | ? ? ?80 |
| 03 ? | 03 ? | ? ? ?80 |
| 04 ? | 01 ? | ? ? ?50 |
| 04 ? | 02 ? | ? ? ?30 |
| 04 ? | 03 ? | ? ? ?20 |
| 05 ? | 01 ? | ? ? ?76 |
| 05 ? | 02 ? | ? ? ?87 |
| 06 ? | 01 ? | ? ? ?31 |
| 06 ? | 03 ? | ? ? ?34 |
| 07 ? | 02 ? | ? ? ?89 |
| 07 ? | 03 ? | ? ? ?98 |
+------+------+---------+Course 表:
+------+--------+------+
| c_id | c_name | t_id |
+------+--------+------+
| 01 ? | 語文 ? | 02 ? |
| 02 ? | 數學 ? | 01 ? |
| 03 ? | 英語 ? | 03 ? |
+------+--------+------+

編寫一個 SQL 查詢 學生姓名、課程名、成績

mysql>?SELECT-> ? ? t2.s_name,-> ? ? t3.c_name,-> ? ? t1.s_score->?FROM-> ? ? score t1-> ? ??JOIN?student t2?ON?t1.s_id = t2.s_id-> ? ??JOIN?Course t3?ON?t1.c_id = t3.c_id;+--------+--------+---------+
| s_name | c_name | s_score |
+--------+--------+---------+
| 趙雷 ? | 語文 ? | ? ? ?80 |
| 趙雷 ? | 數學 ? | ? ? ?90 |
| 趙雷 ? | 英語 ? | ? ? ?99 |
| 錢電 ? | 語文 ? | ? ? ?70 |
| 錢電 ? | 數學 ? | ? ? ?60 |
| 錢電 ? | 英語 ? | ? ? ?80 |
| 孫風 ? | 語文 ? | ? ? ?80 |
| 孫風 ? | 數學 ? | ? ? ?80 |
| 孫風 ? | 英語 ? | ? ? ?80 |
| 李云 ? | 語文 ? | ? ? ?50 |
| 李云 ? | 數學 ? | ? ? ?30 |
| 李云 ? | 英語 ? | ? ? ?20 |
| 周梅 ? | 語文 ? | ? ? ?76 |
| 周梅 ? | 數學 ? | ? ? ?87 |
| 吳蘭 ? | 語文 ? | ? ? ?31 |
| 吳蘭 ? | 英語 ? | ? ? ?34 |
| 鄭竹 ? | 數學 ? | ? ? ?89 |
| 鄭竹 ? | 英語 ? | ? ? ?98 |
+--------+--------+---------+

3 外連接查詢

3.1 外連接語法

外連接查詢分為左外連接查詢和右外連接查詢。

  1. 左外連接查詢:相當于查詢 A 表所有數據和交集部分數據。

  2. 右外連接查詢:相當于查詢 B 表所有數據和交集部分數據。


語法:

-- 左外連接
SELECT?字段列表?FROM?表1?LEFT?[OUTER]?JOIN?表2?ON?條件;
-- 右外連接
SELECT?字段列表?FROM?表1?RIGHT?[OUTER]?JOIN?表2?ON?條件;

3.2 外連接練習

練習一:連續出現的數字

表:Logs
+-------------+---------+
| Column Name | Type ? ?|
+-------------+---------+
| id ? ? ? ? ?| int ? ? |
| num ? ? ? ? | varchar |
+-------------+---------+
在 SQL 中,id 是該表的主鍵。
id 是一個自增列。找出所有至少連續出現三次的數字。
返回的結果表中的數據可以按 任意順序 排列。
結果格式如下面的例子所示:示例 1:
輸入:
Logs 表:
+----+-----+
| id | num |
+----+-----+
| 1 ?| 1 ? |
| 2 ?| 1 ? |
| 3 ?| 1 ? |
| 4 ?| 2 ? |
| 5 ?| 1 ? |
| 6 ?| 2 ? |
| 7 ?| 2 ? |
+----+-----+
輸出:
Result 表:
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1 ? ? ? ? ? ? ? |
+-----------------+
解釋:1 是唯一連續出現至少三次的數字。

找出所有至少連續出現三次的數字:

select?distinct?t1.num?as?ConsecutiveNums
fromLogs?t1?
leftjoinlogs?t2?on?t1.num = t2.num?and?t1.id = t2.id-1
leftjoinlogs?t3?on?t1.num = t3.num?and?t2.id = t3.id-1
where?t3.num?isnotnull;

4 總結

本文介紹了MySQL中的連接查詢,包括內連接和外連接的使用方法。內連接查詢用于獲取兩個表中交集部分的數據,分為隱式內連接和顯式內連接兩種方式。通過內連接,我們可以實現多表聯合查詢,如查詢學生的姓名、課程名稱和成績。外連接查詢分為左外連接和右外連接,左外連接返回左表的所有數據和右表匹配的數據,而右外連接則返回右表的所有數據和左表匹配的數據。通過外連接,我們能夠處理一些不完全匹配的數據,比如查找連續出現至少三次的數字。通過本文的練習,讀者可以掌握多表查詢的基本技巧,并理解連接查詢的實際應用。

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

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

相關文章

001-碼云操作

碼云操作 一、配置公鑰1.官網地址1.進入 git bash2.查看生成的公鑰3.設置到 Gitee4.測試 二、初始化一個項目1.新建倉庫 一、配置公鑰 方便后續提交代碼不用填寫密碼 1.官網地址 官網地址:https://gitee.com/Git碼云教程:https://gitee.com/help/arti…

30.[前端開發-JavaScript基礎]Day07-數組Array-高階函數-日期Date-DOM

JavaScript的DOM操作 (一) 1 什么是DOM? 認識DOM和BOM 深入理解DOM 2 認識DOM Tree DOM Tree的理解 3 DOM的整體結構 DOM的學習順序 DOM的繼承關系圖 document對象 4 節點、元素導航 節點(Node)之間的導航&…

【自學筆記】Spring基礎知識點總覽-持續更新

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 Spring 基礎知識點總覽1. Spring 框架簡介2. IoC(控制反轉)與 DI(依賴注入)2.1 IoC 容器2.2 依賴注入方式示例代碼&a…

WordPress多語言插件GTranslate

GTranslate是一個免費的WordPress多語言插件,它允許您將網站內容翻譯成多種語言。這個插件提供了一個簡單易用的界面,讓您可以在WordPress后臺直接進行翻譯操作。以下是GTranslate插件的一些主要特點: 免費使用:GTranslate插件完…

數列極限入門習題

數列極限入門習題 lim ? n → ∞ ( 1 1 2 1 3 ? 1 n ) 1 n \lim\limits_{n\rightarrow\infty}(1 \frac{1}{2}\frac{1}{3}\cdots\frac{1}{n})^{\frac{1}{n}} n→∞lim?(121?31??n1?)n1? lim ? n → ∞ ( 1 n 1 1 n 2 ? 1 n n ) \lim\limits_{n\rightarrow\…

嵌入式學習前要了解的基礎知識

一、電壓和電流 在嵌入式開發中,電壓和電流是兩個基本的電氣概念,對于理解和設計電子電路至關重要。它們直接影響到嵌入式系統的性能、功耗、可靠性和安全性。 電壓(Voltage) 電壓是電場力推動電荷移動的能力,通常以…

機器學習:強化學習的epsilon貪心算法

強化學習(Reinforcement Learning, RL)是一種機器學習方法,旨在通過與環境交互,使智能體(Agent)學習如何采取最優行動,以最大化某種累積獎勵。它與監督學習和無監督學習不同,強調試錯…

Spring學習筆記03——Spring Boot的文件結構

Spring boot常見的文件結構: src/ ├── main/ │ ├── java/ │ │ └── com.example.demo/ │ │ ├── DemoApplication.java # 主入口 │ │ ├── config/ # 配置類 │ │ ├── controller/ …

談談 HTTPS 的工作原理,SSL / TLS 握手流程是什么?

一、HTTPS 核心機制:非對稱加密 對稱加密 HTTPS HTTP over TLS/SSL,通過 ?混合加密體系? 解決三大問題: ?防竊聽? - 對稱加密傳輸內容(如 AES)?防篡改? - 數字簽名驗證數據完整性?防冒充? - 數字證書驗證服…

共軛梯度法筆記

一、梯度下降法 x k 1 x k ? α ? f ( x k ) x_{k1} x_k - \alpha \nabla f(x_k) xk1?xk??α?f(xk?) 這是普通的梯度下降公式,有兩個量是關鍵,步長 α \alpha α和方向 ? f ( x k ) \nabla f(x_k) ?f(xk?)。這里的方向直接選擇了梯度方向&…

ubuntu 啟動不起來,光標閃爍 解決方法

ubuntu 啟動不起來,光標閃爍 進不了系統,解決方法 按ctrl alt f2,進入終端,登錄。 jounal -b 查看啟動日志。 發現是找不到顯卡驅動程序。 解決方法: 卸載nvidia程序。 sudo systemctl stop gdm # 適用于GNOME…

CSS - 妙用Sass

官方文檔:https://www.sass.hk/docs/ 1.例1: each $theme in $themeList {$themeKey: map-get($theme, key);media screen and (weex-theme: $themeKey) {.btnText {max-width: 150px;include font(map-get($theme, medFont),map-get($theme, subFontS…

chromadb向量數據庫使用 (2)

目錄 代碼代碼解釋**1. 導入 chatGLM 嵌入函數****2. 創建 ChromaDB 客戶端和集合****3. 查詢集合中的數據數量****4. 添加數據到集合****5. 獲取已存儲的文檔****6. 更新文檔****7. 再次獲取數據,驗證更新結果****8. 刪除某個文檔****9. 獲取已刪除的文檔****總結*…

我的世界1.20.1forge模組開發進階物品(7)——具有動畫、3D立體效果的物品

基礎的物品大家都會做了對吧?包括武器的釋放技能,這次來點難度,讓物品的貼圖呈現動畫效果和扔出后顯示3D立體效果,這個3D立體效果需要先學習blockbench,學習如何制作貼圖。 Blockbench Blockbench是一個用于創建和編輯三維模型的免費軟件,特別適用于Minecraft模型的設計…

大模型在敗血癥預測及圍手術期管理中的應用研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與創新點 1.3 研究方法與數據來源 二、敗血癥概述 2.1 定義與流行病學 2.2 病因與發病機制 2.3 臨床表現與診斷標準 2.4 并發癥與危害 三、大模型技術原理及在醫療領域的應用 3.1 大模型技術概述 3.2 大模型在醫療領…

SpringBoot接口自動化測試實戰:從OpenAPI到壓力測試全解析

引言:接口測試的必要性 在微服務架構盛行的今天,SpringBoot項目的接口質量直接影響著系統穩定性。本文將分享如何通過自動化工具鏈實現接口的功能驗證與性能壓測,使用OpenAPI規范打通測試全流程,讓您的接口質量保障體系更加完備。…

微軟具身智能感知交互多面手!Magma:基于基礎模型的多模態AI智能體

作者: Jianwei Yang, Reuben Tan, Qianhui Wu, Ruijie Zheng, Baolin Peng, Yongyuan Liang, Yu Gu, MuCai, SeonghyeonYe, JoelJang, Yuquan Deng, Lars Liden, Jianfeng Gao 單位:微軟研究院,馬里蘭大學,威斯康星大學麥迪遜分校…

Linux中jdk-8u291-linux-x64 中jdk工具包

jdk-8u291-linux-x64 指的是適用于 64 位 Linux 系統的 Java 開發工具包(JDK)8 更新 291 版本。這是 JDK 的一個特定版本,用于開發 Java 應用程序和小程序。 jdk-8u291-linux-x64 網盤下載鏈接:夸克網盤分享

Baklib云內容中臺的核心架構是什么?

云內容中臺分層架構解析 現代企業內容管理系統的核心在于構建動態聚合與智能分發的云端中樞。以Baklib為代表的云內容中臺采用三層架構設計,其基礎層為數據匯聚工具集,通過標準化接口實現多源異構數據的實時采集與清洗,支持從CRM、ERP等業務…

17.3 LangSmith Evaluation 深度解析:構建數據驅動的模型優化體系

LangSmith Evaluation 深度解析:構建數據驅動的模型優化體系 關鍵詞:模型評估體系、自動化測試框架、業務指標對齊、A/B測試集成、生產級質量監控 1. Evaluation 核心功能全景 1.1 評估維度矩陣 維度評估指標示例采集方式質量評估準確率、相關性評分、事實性檢查人工標注+A…