MySQL快速入門篇---聯合查詢

一、什么是聯合查詢

1.1、概念

聯合查詢是SQL中用于合并多個SELECT語句結果集的操作。條件是被合并的結果集列數相同并且數據類型兼容。也可以說一次查詢涉及兩張或兩張以上的表,就稱為聯合查詢。

1.2、為什么要使用聯合查詢

如果數據被拆分到多個表中,我們需要查看一條數據的完整信息,這時就需要用到聯合查詢。

1.3、語法

SELECT * FORM 表名,表名......;

注意:多個表進行聯合查詢,取笛卡爾積

1.4、示例

創建一個班級表,一個學生表

# 創建班級表
drop table if exists class;
create table class(c_id bigint auto_increment primary key,c_name varchar(10)
);
# 創建學生表
drop table if exists students;
create table students(id bigint auto_increment primary key,name varchar(10),class_id bigint
);
# 插入數據
insert into class(c_id,c_name) values (1,'數學1班'),(2,'物理1班'),(3,'化學1班');
insert into students(id,name,class_id) values (1,'張三',1),(2,'李四',1),(3,'王五',2),(4,'趙六',3);
# 進行聯合查詢
select * from students,class;

其運行結果如下:
在這里插入圖片描述
通過觀察,我們發現兩張表聯合查詢的結果集中,有些是無效數據。那么問題來了,如何過濾掉這些無效數據呢?

通過表與表之間的連接條件過濾掉無效數據

select * from students,class where students.class_id=class.c_id;

其運行結果如下:
在這里插入圖片描述
注意:class_id和c_id的前面要加上各自對應的"表名.",這樣數據庫才能精確地知道到底該使用哪張表里的id列

通過指定列查詢,精減查詢結果

select students.id,students.name,students.class_id,class.c_name from students,class where students.class_id=class.c_id;

其運行結果如下:
在這里插入圖片描述

通過給表起別名來簡化查詢語句

select s.id,s.name,s.class_id,c.c_name from students s,class c where s.class_id=c.c_id;

其運行結果如下:
在這里插入圖片描述

二、內連接

2.1、概念

內連接是根據兩個表中的共同字段,將符合條件的數據進行關聯查詢,具體來說,當兩個表中的連接條件都滿足時,才會返回相關聯的數據。

2.2、語法

//寫法一
select 字段 from 表1 別名,2 別名 where 連接條件 and  其它條件;
//寫法2
select 字段 from 表1 別名 [inner] join 表2 別名 on 連接條件 where 其它條件;

簡記:join兩邊是表名,on的后邊是條件。

2.3、示例

查詢學生id為4的同學的班級和姓名

select c.c_name,s.name from students s join class c on s.class_id=c.c_id where s.id=4;

其運行結果如下:
在這里插入圖片描述

三、外連接

3.1、概念

外連接是關系數據庫中的一種操作。它用于合并兩個或多個表中的數據,和內連接不同的是,外連接會返回至少一個表中的所有行。

3.2、分類

外連接分為左外連接、右外連接和全外連接三種類型,MySQL不支持全外連接。

左外連接

返回左表的所有記錄和右表中匹配的記錄。如果右表中沒有匹配的記錄,則結果集中對應字段會顯示為NULL。

1、語法
select 字段名 from 表名1 left join 表名2 on 連接條件; 

left join 左邊的表為基準表

2、示例

插入在班級表中沒有編號的學生的信息

insert into students values(5,'錢七',4);

使用左外連接

select s.id,s.name,c.c_name from students s left join class c on s.class_id=c.c_id;

其結果運行如下:
在這里插入圖片描述
由上圖,我們可以看出學生表的數據完全顯示,班級表沒有的數據為Null。

右外連接

與左外連接相反,返回右表的所有記錄和左表中匹配的記錄。如果左表中沒有匹配的記錄,則結果集中對應字段會顯示為NULL。

1、語法
select 字段 from 表名1 right join 表名2 on 連接條件;
2、示例

插入在學生表中沒有編號的班級信息

insert into class values(5,'地理1班');

使用右外連接

select s.id,s.name,c.c_name from students s right join class c on s.class_id=c.c_id;

其運行結果如下:
在這里插入圖片描述

全外連接

結合了左外連接和右外連接的特點,返回左右表中的所有記錄。如果某?邊表中沒有匹配的記錄,則結果集中對應字段會顯示為NULL。
由于MySQL不支持,這里我就不多贅述。

四、自連接

4.1、概念

自連接是自己與自己取笛卡爾積,可以把行轉化成列,在查詢的時候可以使用where條件對結果進行過濾,或者說實現行與?行之間的比較。在做表連接時為表起不同的別名。

4.2、示例

創建成績表

create table score(id bigint,數學 int,物理 int,化學 int
);
# 插入數據
insert into score values(1,70,80,90),(2,88,66,90),(3,75,82,86);
# 查詢表結果
select * from score;

其結果運行如下:
在這里插入圖片描述

使用自連接

select * from score sco1,score sco2;

其運行結果如下:
在這里插入圖片描述

查詢數學成績大于物理成績的信息

select sco1.id,sco1.`數學`,sco1.`物理` from score sco1,score sco2 where sco1.id=sco2.id and sco1.數學>sco2.物理;

其運行結果如下:
在這里插入圖片描述

五、子查詢

5.1、概念

子查詢是把?個SELECT語句的結果當做別?個SELECT語句的條件,也叫嵌套查詢。

5.2、語法

select * from 表1 where 列1 {= | IN} (select 列1 from 表2 where 列2 {= | IN} [(select ...)] ...
)

5.3、分類

1、單行子查詢

嵌套的查詢中只返回一行數據

語法
select * from 表名 where 列1 =(select 列1 from 表名 where 條件);
示例

查詢數學成績為70的同學的所有信息

select * from score where id =(select id from score where 數學=70); 

其運行結果如下:
在這里插入圖片描述

2、多行子查詢

嵌套的查詢中返回多?數據,使?[NOT]IN關鍵字

語法
select * from 表名 where 列1 [not] in(select 列1 from 表名 where 條件);
示例

查詢化學成績為90的所有同學的信息

select * from score where id in(select id from score where 化學=90);

其運行結果如下:
在這里插入圖片描述

查詢物理成績不為80的所有同學的信息

select * from score where id not in(select id from score where 物理=80);

其運行結果如下:
在這里插入圖片描述

其與單行子查詢的書寫差別是把=改成in

3、多列子查詢

單行子查詢和多行子查詢都只返回一列數據,多列子查詢中可以返回多個列的數據,外層查詢與嵌套的內層查詢的列要匹配

示例

新增重復的分數

insert into score (id,數學,物理,化學) values(4,70,80,90),(5,88,66,90);

查詢重復錄入的分數

select * from score where (數學,物理,化學) in(select 數學,物理,化學 from score group by 數學,物理,化學 having count(0)>1);

其運行結果如下:
在這里插入圖片描述

六、合并查詢

合并多個select操作返回的結果,可以使?集合操作符union,union all

6.1、Union

該操作符用于取得兩個結果集的并集。當使用該操作符時,會自動去掉結果集中的重復行。

示例

查詢id為2和數學成績為70的同學信息

select * from score where id=3 union select * from score where 數學=70;

在這里插入圖片描述

查詢id為1和數學成績為70的同學信息

select * from score where id=1 union select * from score where 數學=70;

在這里插入圖片描述
這里只有兩條數據,是因為union有去重功能

6.2、Union all

該操作符?于取得兩個結果集的并集。當使?該操作符時,不會去掉結果集中的重復?。

示例

查詢id為1和數學成績為70的同學信息

select * from score where id=1 union all select * from score where 數學=70;

在這里插入圖片描述
這里使用union all并沒有去重

七、復制表結構

語法

create table 新表名 like 原表名;

示例

新構建一個班級表

create table new_class like class;

查看原表結構
在這里插入圖片描述
查看新表結構
在這里插入圖片描述

八、復制表信息

語法

insert into 新表名 select * from 原表名;

示例

insert into new_class select * from class;

在這里插入圖片描述
通過查詢我們可以發現,新表的數據與原表相同。

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

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

相關文章

Spring Boot AI 之 Chat Client API 使用大全

ChatClient提供了一套流暢的API用于與AI模型交互,同時支持同步和流式兩種編程模型。 流暢API包含構建Prompt組成元素的方法,這些Prompt將作為輸入傳遞給AI模型。從API角度來看,Prompt由一系列消息組成,其中包含指導AI模型輸出和行為的指令文本。 AI模型主要處理兩類消息: …

基于點標注的弱監督目標檢測方法研究

摘要 在計算機視覺領域,目標檢測需要大量精準標注數據,但人工標注成本高昂。弱監督目標檢測通過低成本標注訓練模型,成為近年研究熱點。本文提出一種基于點標注的弱監督目標檢測算法,僅需在圖像中物體中心點標注,即可高…

外網如何連接內網中的mysql數據庫服務器?簡單網絡工具方案

當內網服務器部署好mysql數據庫后,在局域網外需要用程序進行mysql 遠程訪問,而mysql因為安全的因素,默認的時候用戶設置的是不能遠程連接,只能本地連接,這個時候就需要自己去修改其中的設置。下面就介紹一下相關mysql的…

無人機避障——深藍學院浙大柵格地圖以及ESDF地圖內容

Occupancy Grid Map & Euclidean Signed Distance Field: 【注意】:目的是為了將有噪聲的傳感器收集起來,用于實時的建圖。 Occupancy Grid Map: 概率柵格: 【注意】:由于傳感器帶有噪聲,在實際中基于…

Rocky Linux 8.9 升級至 8.10 測試可通過以下步驟完成

一、執行升級? sudo dnf -y update --disablerepoappstream 二、重啟系統? reboot ?三、驗證升級結果? ?檢查系統版本? 執行命令確認版本已更新 cat /etc/redhat-release 輸出應包含 Rocky Linux release 8.10

固定翼無人機拋投技術分析!

一、技術要點 1. 結構設計優化 傳動組件創新:采用齒輪-齒條傳動(替代傳統絲桿結構),簡化機械設計,降低成本并提高可靠性。例如,通過電機驅動齒輪帶動齒條移動,實現柱銷與拋投物插孔的精準分…

Oracle中的[行轉列]與[列轉行]

目錄 一、原始數據 二、行轉列的多種實現方式 1.CASE WHEN 2.DECODE 3.PIVOT(Oracle獨有) 4.使用LEAD開窗函數 三、列轉行的多種實現方式 1.UNPIVOT(Oracle獨有) 2.UNION ALL合并結果集 四、行轉列練習:CASE WHEN/DECODE/PIVOT/lag/LEAD 1.CASE WHEN 2…

【Excel VBA 】窗體控件分類

一、Excel 窗體控件分類 Excel 中的窗體控件分為兩大類型,適用于不同的開發需求: 類型所在選項卡特點表單控件開發工具 → 插入 → 表單控件簡單易用,直接綁定宏,兼容性好,適合基礎自動化操作。ActiveX 控件開發工具…

[ 計算機網絡 ] 深入理解OSI七層模型

🎉歡迎大家觀看AUGENSTERN_dc的文章(o゜▽゜)o☆?? 🎉感謝各位讀者在百忙之中抽出時間來垂閱我的文章,我會盡我所能向的大家分享我的知識和經驗📖 🎉希望我們在一篇篇的文章中能夠共同進步!!&…

線性代數之張量計算,支撐AI算法的數學原理

目錄 一、張量計算的數學本質 1、線性代數:張量的幾何與代數性質 2、微積分:梯度與自動微分 3、優化理論:張量分解與正則化 4、張量計算的核心操作 二、張量計算在AI算法中的作用 1、數據表示與處理 2、神經網絡的參數表示 3、梯度計算與優化 三、張量計算在AI中的…

打造一個支持MySQL查詢的MCP同步插件:Java實現

打造一個支持MySQL查詢的MCP同步插件:Java實現 用Java實現一個MCP本地插件,直接通過JDBC操作本地MySQL,并通過STDIO與上層MCP客戶端(例如Cursor)通信。插件注冊一個名為mysql 的同步工具,接收連接參數及SQL…

【數據架構01】數據技術架構篇

? 9張高質量數據架構圖:大數據平臺功能架構、數據全生命周期管理圖、AI技術融合架構等; 🚀無論你是數據架構師、治理專家,還是數字化轉型負責人,這份資料庫都能為你提供體系化參考,高效解決“架構設計難、…

java三種常見設計模式,工廠、策略、責任鏈

設計模式實戰解析 一、工廠模式(點外賣模式) 1. 核心思想 代替直接new對象像點外賣一樣獲取對象 2. 實際應用 Spring框架:BeanFactoryJDBC:DriverManager.getConnection() 3. 三種變體對比 類型特點示例場景簡單工廠一個工…

jenkins使用Send build artifacts over SSH發布jar包目錄配置

本測試用ruoyi-plus的代碼。 1 [GitLab 自動觸發 Jenkins 構建_jenkins構建觸發器沒有build when a change is pushed to git-CSDN博客](https://blog.csdn.net/wangyiyungw/article/details/81776972) 2 [jenkins使用Send build artifacts over SSH遇到的坑-CSDN博客](https…

vscode打開vue + element項目

好嘞,我幫你詳細整理一個用 VS Code 來可視化開發 Vue Element UI 的完整步驟,讓你能舒服地寫代碼、預覽界面、調試和管理項目。 用 VS Code 可視化開發 Vue Element UI 全流程指南 一、準備工作 安裝 VS Code 官網下載安裝:https://code…

黑馬程序員C++2024新版筆記 第4章 函數和結構體

目錄 1.結構體的基本應用 2.結構體成員的默認值 3.結構體數組 4.結構體指針 ->操作符 5.結構體指針數組 1.引入已存在的結構體數組地址 2.通過new操作符申請指針數組空間 6.函數的概念 7.函數的基礎語法 8.無返回值函數和void類型 9.空參函數 10.函數的嵌套調用…

高級前端工程師必備的 JS 設計模式入門教程,常用設計模式案例分享

目錄 高級前端工程師必備的 JS 設計模式入門教程,常用設計模式案例分享 一、什么是設計模式?為什么前端也要學? 1、設計模式是什么 2、設計模式的產出 二、設計模式在 JS 里的分類 三、常用設計模式實戰講解 1、單例模式(S…

Ubuntu+Docker+內網穿透:保姆級教程實現安卓開發環境遠程部署

文章目錄 前言1. 虛擬化環境檢查2. Android 模擬器部署3. Ubuntu安裝Cpolar4. 配置公網地址5. 遠程訪問小結 6. 固定Cpolar公網地址7. 固定地址訪問 前言 本文將詳細介紹一種創新性的云開發架構:基于Ubuntu系統構建Android仿真容器環境,并集成安全隧道技…

Linux Kernel調試:強大的printk(一)

引言 想了好久,還是覺得這個標題才配得上printk!^_^ 我相信,不管做什么開發,使用最多的調試手段應該就是打印了,從我們學習編程語言第一課開始,寫的第一段代碼,就是打印"Hello, world&qu…

基于NLP技術的客戶投訴與需求文本分類方法研究

目錄 摘要 1. 引言 2. 文本分類基礎 2.1 文本分類的定義與類型 2.2 文本分類的評價指標 3. 傳統文本分類方法 3.1 基于TF-IDF和SVM的方法 3.2 基于主題模型和詞向量的改進方法 4. 深度學習文本分類方法 4.1 TextCNN模型 4.2 BiLSTM模型 4.3 注意力機制與Transformer…