數據庫的進階操作

目錄

1、數據庫的約束

2、查詢操作的進階

2.1 查詢插入

2.2 聚合查詢

2.3 運算查詢

2.3 分組查詢

2.4 聯合查詢

2.5 內外連接

2.6 子查詢

2.7 合并查詢


1、數據庫的約束

? 數據庫的約束是指:數據庫會自動的對數據的合法性進行校驗和檢查的一系列操作的機制,目的就是為了保證數據庫避免被插入或修改了一些非法的數據。

MySQL中提供了以下約束:

數據庫的約束
not null指某列不能存儲null值
unique保證某列的每行必須有唯一的值
default規定沒有給列賦值的默認值
primary keynot null和unique的結合,確保某列或多列的結合有唯一標識
foreign key保證一個表中的數據匹配另一個表中值的參照完整性
check保證列中的值符合指定的條件

例如:


primary key 一行記錄的身份標識

一張表中只能有一個primary key,一個表中的記錄,只能有一個作為身份標識的數據。

使用自增主鍵,數據庫會自動分配一個主鍵,會從1開始,依次遞增的分配主鍵的值。如果指定插入,默認值會從最大的值開始繼續分配。

create table student (id int primary key auto_increment,name varchar(20));


foreign key 外鍵 描述兩個表之間的關聯關系

現在有兩個表,其中class表對student表進行了約束

創建約束的過程:

create table 表名( 列,列 foreign key(要約束的列)references 來自的表(來自的列));

注意事項:
1、約束別人的表稱為“父表”,被約束的表稱為“子表”。

2、使用外鍵約束的時候,要求父表中被關聯的這一列,要是主鍵或者被unique修飾。

2、查詢操作的進階

2.1 查詢插入

查詢可以搭配插入使用,把查詢得到的結果,作為插入的數據。

insert into 表1 select * from 表2;

注意:查詢出來的結果集,列的數量和類型要和插入的表相匹配。


2.2 聚合查詢

表達式查詢:針對列和列之間進行運算的

聚合查詢:相當于針對行和行之間運算的

1、查詢當前行數

select count(要查詢的列)from 表名;

注意:

1、要是查詢整個表的行數,null會被算進去,如果是查詢具體的一列的行數,null不會被算進去。

2、在查詢單獨列的行數時,還可以對此列的行進行去重操作,在要查詢的列前加上distinct


2.3 運算查詢

可以對這一列的若干行進行算術計算,只能對數字類型進行使用,null不會參與運算。

主要運算方式:

SUM()求和
AVG()求平均值
MAX()求最大值
MIN()求最小值

例如:


2.3 分組查詢

可以使用group by進行分組,再針對分組進行聚合查詢

分組規則:針對指定的列進行分組,把這一列中值相同的行,分成一個組。

分組語句:select 列名 from 表名 group by 要分組的列名;

若分組后一個組中有多個數據,會隨機輸出一個數據作為代表。

分組加聚合語句:select 列名,聚合運算 from 表名 group by 要分組的列名;

例如:


在使用group by進行分組的時候,還可以使用where來搭配條件。

1、分組前條件:where在group前

select 列名,聚合運算 from 表名 where條件 group by 要分組的列名;

2、分組后條件:使用having來描述條件,having在group by后

select 列名,聚合運算 from 表名 group by 要分組的列名 having 條件;

3、使用where和having還可以同時滿足前后都有條件的情況


2.4 聯合查詢

聯合查詢又稱為多表查詢,當我們要查詢的結果是多個表配合使用才能得到,就可以使用聚合查詢,使用SQL語句將多個表進行笛卡爾積,把有效的結果進行篩選出來。

笛卡爾積本質是通過排列組合的方式,得到一個更大的表,這個表的列數是多個表的列數相加,行數是多個表的行數相乘。

例如:有兩個表,一個是學生表,一個是成績表,要計算某個學生的成績的時候,就可以通過笛卡爾積,把這兩個表組合起來,篩選出要得到的結果。

1、先進行笛卡爾積

2、加上連接條件,篩選有效數據。

3、進一步篩選,得到某個同學的成績,以zhangsan為例。

4、針對要查詢的列進行精簡


如果是三個表配合才能得到結果,就需要對這三個表進行笛卡爾積,然后需要兩個連接條件,來連接這三個表。

2.5 內外連接

內連接:當我們將多個表進行聯合查詢的時候,通過條件進行連接篩選,只有匹配成功的數據才能作為結果輸出。

內連接語句:select * from student inner join score on student.id=score.id;


外連接:外連接分為左外連接和右外連接,左外連接以左側表為基準,左側表中的數據沒有找到匹配的數據時,以NULL作為代替,右外連接以右側表為基準,右側表中的數據沒有找到匹配的數據時,以NULL作為代替。

左外連接:

左外連接語句:select * from student left join score on student.id=score.id;


右外連接:

右外連接語句:select * from student right?join score on student.id=score.id;


2.6 子查詢

子查詢:把多個簡單的SQL語句拼成一個復雜的SQL語句

單行子查詢:查詢出的一行記錄的結果,作為另一個查詢語句的條件進行再次查詢。

語句:select 列名 from 表名 where 列名=(select的查詢結果);

多行子查詢:查詢出的多行記錄的結果,作為一個范圍類型,讓另一個查詢語句進行判斷。

語句:select 列名 from 表名 where 列名 in(select查詢的范圍結果);

in 表示在這個范圍內


2.7 合并查詢

使用union關鍵字可以將多個SQL查詢的結果合并到一起

注意:

1、查詢出結果的列名以查詢第一個表的列名為準

2、兩條語句合并查詢時,會進行去重操作,若不進行去重,使用union all關鍵字。


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

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

相關文章

.Net HttpClient 使用請求數據

HttpClient 使用請求數據 0、初始化及全局設置 //初始化:必須先執行一次 #!import ./ini.ipynb1、使用url 傳參 參數放在Url里,形如:http://www.baidu.com?namezhangsan&age18, GET、Head請求用的比較多。優點是簡單、方便&#xff0…

Qt還有希望嗎

🚀2025 年 Qt 框架價值大揭秘!會持續閃耀嗎? 寶子們,今天來聊聊 Qt 框架在 2025 年的價值走向,這可是跨平臺應用開發的寶藏工具呀! 🌟核心優勢穩穩拿捏Qt 的跨平臺能力絕了! Windows…

Redis設計與實現——數據結構與對象

簡單動態字符串(SDS) SDS 的結構定義 len:記錄當前字符串的實際長度(不包含 \0),獲取長度的時間復雜度為 O(1)。free:記錄未使用的空間大小,用于優化內存分配。buf[]:實…

NeurIPS 2025 截稿攻略

會議資訊 NeurIPS,全稱神經信息處理系統大會,是一個關于機器學習和計算神經科學的國際會議。NeurIPS是CCF(計算機學會)推薦的A類會議!是機器學習領域內最具難度、水平最高且影響力最強的會議之一。它與ICML&#xff0…

Java中堆棧

文章目錄 Java中堆棧1. 棧(Stack)特點示例 2. 堆(Heap)特點示例 3. 核心區別4. 常見問題5. 內存可視化示例內存布局示意圖: 總結 Java中堆棧 在 Java 中,“堆棧” 通常指的是堆(Heap&#xff0…

【類拷貝文件的運用】

常用示例 當我們面臨將文本文件分成最大大小塊的時,我們可能會嘗試編寫如下代碼: public class TestSplit {private static final long maxFileSizeBytes 10 * 1024 * 1024; // 默認10MBpublic void split(Path inputFile, Path outputDir) throws IOException {…

打破產品思維--被討厭的勇氣--實戰5

課程:B站大學 記錄產品經理實戰項目系統性學習,從產品思維,用戶畫像,用戶體驗,增長數據驅動等不同方向理解產品,從0到1去理解產品從需求到落地的全過程,測試左移方向(靠近需求、設計…

【Autosar SecOC 1.信息安全原理介紹】

這里寫目錄標題 1 背景2 了解黑客攻擊原理3 SecOC實現數據的真實性與完整性校驗3.1 數據身份驗證完成真實性驗證3.2 防止重放攻擊 1 背景 在今天的車載網絡中,大部分數據傳輸是在沒有任何特殊安全措施的情況下進行的。因此,一旦能夠直接訪問車輛的總線&a…

基于SpringBoot的校園周邊美食探索及分享平臺【附源碼+數據庫+文檔下載】

一、項目簡介 本項目是一個基于 SpringBoot Vue 的校園周邊美食探索與分享平臺,專為在校大學生開發,集美食推薦、好友互動、收藏分享于一體。 通過平臺,用戶可以探索學校周邊的美食店鋪、發布美食鑒賞、添加好友進行交流分享。同時&#x…

無償幫寫畢業論文

以下教程教你如何利用相關網站和AI免費幫你寫一個畢業論文。畢竟畢業論文只要過就行,脫產學習這么多年,終于熬出頭了,完成畢設后有空就去多看看親人好友,祝好! 一、找一個論文模板(最好是overleaf) 廢話不多說&#…

15 個 Azure DevOps 場景化面試問題及解答

問題 1. 解釋 Azure DevOps YAML 管道的典型結構。 您可以從管道的整體結構開始,從觸發器開始。您也可以選擇解釋它可能包含的不同類型的階段:構建、測試、掃描、部署等。 Azure DevOps YAML 管道結構示例 觸發器指示管道運行。它可以是持續集成 (CI) 或…

Java 大視界 -- Java 大數據機器學習模型在元宇宙虛擬場景智能交互中的關鍵技術(239)

💖親愛的朋友們,熱烈歡迎來到 青云交的博客!能與諸位在此相逢,我倍感榮幸。在這飛速更迭的時代,我們都渴望一方心靈凈土,而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識,也…

本地不安裝oracle,還想連oracle

1.首先要用navicat,或者toad打開連接數據庫 2.安裝oracle客戶端,有時候OCI.dll需要看數據庫版本,我們Oracle數據庫是12C,可以用這個版本 3. 4.配置環境變量 變量名:NLS_LANG變量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK …

LabVIEW車牌自動識別系統

在智能交通快速發展的時代,車牌自動識別系統成為提升交通管理效率的關鍵技術。本案例詳細介紹了基于 LabVIEW 平臺,搭配大恒品牌相機構建的車牌自動識別系統,該系統在多個場景中發揮著重要作用,為交通管理提供了高效、精準的解決方…

deque底層數據結構以及和queue的異同

文章目錄 底層數據結構原理關鍵組成部分操作效率與其他容器的對比適用場景C STL中的實現細節總結 deque和queue的異同相同點不同點 deque(雙端隊列)是一種具有高效兩端插入和刪除操作的數據結構,常見于C標準庫(STL)和其…

WordPress 網站上的 jpg、png 和 WebP 圖片插件

核心功能 1. 轉換 AVIF 并壓縮 AVIF 將您 WordPress 網站上的 jpg、png 和 WebP 圖片轉換為 AVIF 格式,并根據您設置的壓縮級別壓縮 AVIF 圖片。如果原始圖片已經是 WordPress 6.5 以上支持的 AVIF 格式,則原始 AVIF 圖片將僅被壓縮。 2. 轉換 WebP 并…

Docker Volumes

Docker Volumes 是 Docker 提供的一種機制,用于持久化存儲容器數據。與容器的生命周期不同,Volumes 可以獨立存在,即使容器被刪除,數據仍然保留。以下是關于 Docker Volumes 的詳細說明: 1. 為什么需要 Volumes&#…

西電 | 2025年擬錄取研究生個人檔案錄取通知書郵寄通知

各位考生: 我校2025年碩士研究生錄取工作已結束,根據相關工作管理規定,現將個人檔案轉調及錄取通知書郵寄信息確認等有關事宜通知如下: 一、個人檔案轉調 (郵寄檔案請務必使用EMS) 1.全日制考生 錄取類…

ExcelJS庫的使用

ExcelJS 安裝 npm install exceljs新的功能! Merged fix: styles rendering in case when “numFmt” is present in conditional formatting rules (resolves #1814) #1815. Many thanks to andreykrupskii for this contribution!Merged inlineStr cell type support #15…

時空注意力機制深度解析:理論、技術與應用全景

時空注意力機制作為深度學習領域的關鍵技術,通過捕捉數據在時間和空間維度上的依賴關系,顯著提升了時序數據處理和時空建模能力。本文從理論起源、數學建模、網絡架構、工程實現到行業應用,系統拆解時空注意力機制的核心原理,涵蓋…