Linux云計算訓練營筆記day10(MySQL數據庫)

Linux云計算訓練營筆記day10(MySQL數據庫)

目錄

  • Linux云計算訓練營筆記day10(MySQL數據庫)
    • ifnull
    • 別名
    • 聚合函數
    • group by
      • HAVING
    • 子查詢
    • 關聯查詢

ifnull

在DQL語句中可以使用函數或表達式
函數
IFNULL(arg1,arg2)
如果arg1為NULL,函數返回arg2的值
如果arg1不為NULL,函數返回arg1的值
作用:將一個NULL值替換成一個非NULL值

NULL和任何數據運算,結果都是NULL

  -- 查看老師的工資和年薪分別是多少
SELECT name,salary,salary*12
from teacher;
-- 查看每個老師的工資,獎金,工資+獎金分別是多少?
SELECT name,salary,IFNULL(comm,0),salary+IFNULL(comm,0)
from teacher;
-- 查看每個老師的獎金,以及年獎金
SELECT name,IFNULL(comm,0),IFNULL(comm,0)*12
from teacher;

別名

別名
字段 as 別名
字段 as “別名”

-- 查看哪些老師的年薪高于60000,并按照工資從高到低排序
SELECT name,salary*12,salary
from teacher
WHERE salary*12>60000
ORDER BY salary DESC;
SELECT name as 姓名,salary as 工資,salary*12 as 年薪
from teacher;-- 1)當別名中有空格,必須加引號, 2)當別名中有關鍵字,必須加引號
SELECT name as "姓 名",salary as "from"
from teacher;
-- 1.查詢所有10歲學生的生日,按生日對應的年紀從大到小排序
SELECT name,birth,age
from student
WHERE age=10
ORDER BY birth ASC;-- 2.查詢8歲同學中名字含有 苗 的學生信息
SELECT name,age
from student
WHERE age=8 and name LIKE "%苗%";-- 3.查詢負責課程編號1和2號且工資高于6000的老師信息
SELECT name,subject_id,salary
from teacher
WHERE subject_id in (1,2) and salary>6000;-- 4.查詢10歲以上的語文課代表和數學課代表
SELECT name,age,job
from student
WHERE age>10 and job in ("語文課代表","數學課代表");-- 5.查詢不教 課程編號1的 老師信息,按照工資降序排序
SELECT name,subject_id,salary
from teacher
WHERE subject_id <> 1
ORDER BY salary DESC;-- 6.查詢沒有獎金的老師信息 (0也屬于沒有獎金)
SELECT name,comm
from teacher
WHERE IFNULL(comm,0)=0;-- 7.查詢所有老師的獎金,并按照獎金降序排序
SELECT name,comm 
FROM teacher
ORDER BY comm DESC;-- 8.查看工資高于8000的老師負責的課程編號都有哪些
SELECT DISTINCT subject_id
from teacher
WHERE salary>8000;-- 9.查看全校年齡最小學生的第6-10名  M: (頁碼-1)*x5  M:5  N:5
SELECT name,birth,age
from student
ORDER BY birth DESC,id
LIMIT 5,5;

聚合函數

聚合函數 將多條記錄按照指定的字段進行統計并得出一個結果

MIN: 統計指定字段的最小值
MAX: 統計指定字段的最大值
AVG: 統計指定字段的平均值
SUM: 統計指定字段的總和
COUNT: 不是對字段的統計,是對記錄的統計

注意事項:
聚合函數忽略NULL值
MIN MAX AVG SUM 是對值的統計,COUNT是對記錄的統計

-- 查看老師的平均工資是多少  (先統計老師的工資 ; 在添加聚合函數)
SELECT AVG(salary)
from teacher;-- 查看老師的最高工資,最低工資,平均工資和工資總和是多少 (先統計參與的數據 ; 在添加聚合函數)
SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary)
from teacher;-- 查看負責課程編號1的老師平均工資是多少 (先統計1號老師的工資 ; 在添加聚合函數)
SELECT AVG(salary)
from teacher
WHERE subject_id=1;-- 查看一共有多少位老師
SELECT COUNT(name) 
FROM teacher;
SELECT COUNT(id) 
FROM teacher;-- 統計字段共有多少條數據  (用的最多)
SELECT COUNT(*) 
FROM teacher;
SELECT * from teacher;
-- 1.查看所有老師的平均獎金和獎金總和是多少
SELECT AVG(IFNULL(comm,0)), SUM(comm)
from teacher;-- 2.查看負責課程編號2的老師共有多少人
SELECT COUNT(*)
from teacher
WHERE subject_id=2;-- 3.查看班級編號為 1 的學生有多少人
SELECT COUNT(*)
FROM student
WHERE class_id=1;-- 4.查看全校學生 生日 最大的是哪天
SELECT MIN(birth)
from student;-- 5.查看11歲的課代表總共有多少人
SELECT COUNT(*)
from student
WHERE age=11 and job LIKE "%課代表";-- 6.姓 張 的學生有多少人
SELECT COUNT(*)
from student
WHERE name LIKE "張%";-- 7.工資高于5000的老師中最低的工資是多少
SELECT MIN(salary)
from teacher
WHERE salary>5000;-- 8.4層有幾個班
SELECT COUNT(*)
from class
WHERE floor=4;-- 9.老師中 總監 的平均工資是多少 
SELECT AVG(salary)
from teacher
WHERE title="總監";

group by

group by
對結果集按照指定字段相同的記錄進行分組,配合聚合函數做到組內統計
group by一定是配合聚合函數的,如果select子句沒有聚合函數,不會使用group by
在select語句中凡是不在聚合函數中的字段都應出現在group by子句中
group by可以按照多組字段分組,那些字段值相同的記錄被看做一組

把結果集按照聚合函數的統計結果排序

-- 查看每種職位 title 的老師平均工資是多少 (title字段值相同的記錄會被劃分為一組)
SELECT AVG(salary),title
from teacher
GROUP BY title;-- 查看每個班級各有多少人 (class_id字段值相同的學生是一個班)
SELECT COUNT(*),class_id
from student
GROUP BY class_id;-- 查看學生每種 職位各有多少人,以及最大生日和最小生日
SELECT COUNT(*) as 人數, MIN(birth) as 最大生日,MAX(birth) as 最小生日, job as 職位
from student
GROUP BY job;-- 查看同班級 同性別的學生有多少人
SELECT COUNT(*),class_id,gender
FROM student
GROUP BY class_id,gender;-- 查看每個班級 每種職位各有多少人
SELECT COUNT(*) as 人數,class_id,job
from student
GROUP BY class_id,job;-- 查看每個科目老師的平均工資排名
SELECT AVG(salary) as 平均工資,subject_id
from teacher
GROUP BY subject_id
ORDER BY AVG(salary) DESC;

HAVING

HAVING
在group by之后,用于添加條件過濾分組的

聚合函數不能出現在where子句中

HAVING和WHERE
1)過濾時機不同,WHERE先過濾,HAVING后過濾
2)WHERE用于確定結果集的記錄
3)HAVING用于確定保留哪些分組
4)WHERE不可以使用聚合函數作為過濾條件,HAVING可以

- 查詢每個科目老師的平均工資,但是只看平均工資高于6000的那些
SELECT AVG(salary),subject_id
from teacher
GROUP BY subject_id
HAVING AVG(salary) >6000;-- 查詢每個科目老師的平均工資,前提是該科目老師最高工資要超過9000
SELECT AVG(salary),MAX(salary),subject_id
from teacher
GROUP BY subject_id
HAVING MAX(salary)>9000;
-- 1.查看科目老師的工資總和是多少,前提是該科老師的平均獎金要高于4000
SELECT SUM(salary),subject_id
from teacher
GROUP BY subject_id
HAVING AVG(comm)>4000;-- 2.查看各科目 男老師 的平均工資是多少,前提是該科目老師最低工資高于4000
SELECT AVG(salary),subject_id
from teacher
WHERE gender="男"
GROUP BY subject_id
HAVING MIN(salary)>4000;-- 3.查看班級編號小于6的每個班 各有多少人
SELECT COUNT(*), class_id
from student
WHERE class_id<6
GROUP BY class_id;-- 4.查看3層一共多少個班
SELECT COUNT(*)
from class
WHERE floor=3;-- 5.查看工資低于8000的老師的平均工資是多少
SELECT AVG(salary)
from teacher
WHERE salary<8000;-- 6.查看班級人數超過60人的班級中年級最大的同學生日是多少
SELECT MIN(birth), class_id
from student
GROUP BY class_id
HAVING COUNT(*)>60;-- 7.查看教課程編號1 的老師平均年齡是多少
SELECT AVG(age)
from teacher
WHERE subject_id=1;-- 8.查看同一科目平均年齡超過35歲的 老師中最小年齡是多少
SELECT MIN(age),subject_id
from teacher
GROUP BY subject_id
HAVING AVG(age)>35;-- 9.查看同職稱人數超過 4人的老師 的平均工資是多少
SELECT AVG(salary),title
from teacher
GROUP BY title
HAVING COUNT(*)>4;

子查詢

子查詢
嵌套在其他SQL語句中的一條DQL語句
在DQL中使用
在select子句中使用,將該查詢結果當做一個字段列在外層查詢的結果集中

在DML中使用
在增刪改中,基于該查詢結果集對表中數據進行操作

子查詢的分類
1)單行單列子查詢

2)單行多列子查詢
可以同時查詢出多個值
如果進行等值判斷 in,not in
如果進行關系運算
>ANY(列表) 大于列表中最小的值
<ANY(列表) 小于列表中最大的值
>ALL(列表) 大于列表中所有值 >最大的
<ALL(列表) 小于列表中所有值 <最小的
3)多列子查詢

-- 查看比范傳奇工資高的老師都有誰
-- 1)范傳奇的工資是多少  - 3000
SELECT salary from teacher WHERE name="范傳奇";
-- 2)查看誰的工資高于3000
SELECT name,salary from teacher where salary>3000;
SELECT name,salary
from teacher
WHERE salary>(SELECT salary from teacher WHERE name="范傳奇");-- 查看哪些老師的工資是高于平均工資的
-- 平均工資是多少  - 6355.050SELECT AVG(salary) from teacher;
-- 查看高于平均工資的
SELECT name,salary from teacher WHERE salary>6355.050;
SELECT name,salary 
from teacher 
WHERE salary>(SELECT AVG(salary) from teacher);-- 查看和 李費水 在同一個班級的學生都有誰
-- 李費水的班級編號
SELECT class_id from student WHERE name="李費水";
SELECT name,class_id
from student
WHERE class_id=(SELECT class_id from student WHERE name="李費水");-- 查看 3年級2班 在同一層的班級都有哪些,列出班級編號,名字,樓層
SELECT floor from class WHERE name="3年級2班";
SELECT id,name,floor 
from class
WHERE floor=(SELECT floor from class WHERE name="3年級2班");-- 查看3年級2班的學生都有誰
SELECT id from class WHERE name="3年級2班";
SELECT name,class_id
from student
WHERE class_id=(SELECT id from class WHERE name="3年級2班");-- 查看教語文的老師都有誰
select id from subject WHERE name="語文";
SELECT name,subject_id
from teacher
WHERE subject_id=(select id from subject WHERE name="語文");-- 查看工資最高的老師的工資和獎金是多少
select MAX(salary) from teacher;
SELECT name,salary,comm
from teacher
WHERE salary=(select MAX(salary) from teacher);-- 查看和 祝雷 李費水 在同一個班的學生都有誰
SELECT class_id from student WHERE name in ("祝雷","李費水");
SELECT name,class_id
from student
WHERE class_id in (SELECT class_id from student WHERE name in ("祝雷","李費水"));-- 查看不與 范傳奇 和 王克晶 教同一課的老師都有誰
SELECT name,subject_id
from teacher
WHERE subject_id not in (SELECT subject_id from teacher WHERE name in ("范傳奇","王克晶"));-- 查看比教 科目2 和 科目4 老師工資都高的老師都有誰
SELECT salary from teacher WHERE subject_id in (2,4);
SELECT name,salary
from teacher
WHERE salary>ALL(SELECT salary from teacher WHERE subject_id in (2,4));-- 給與 范傳奇 負責同一科目的所有老師工資漲1000
UPDATE teacher set salary=salary+1000
WHERE subject_id=(SELECT subject_id from teacher WHERE name="范傳奇");-- 將王克晶 的工資改成與 范傳奇一樣
UPDATE teacher
SET salary=(SELECT salary from teacher WHERE name="范傳奇")
WHERE name="王克晶";

關聯查詢

關聯查詢
聯合多張表查詢數據,結果來自于多張表
關系的分類
1)一對一關系: 一個表的記錄對應另一個表的記錄
用戶表 用戶詳情表
create table user(
id int primary key auto_increment,
name varchar(10)
);
create table user_detail(
user_id int primary key auto_increment,
address varchar(10),
foreign key(user_id) references user(id);
)
2) 一對多關系
主表的一條記錄 對應另外一張表的多條數據
部門表 員工表
create table dept(
id int primary key auto_increment,
name varchar(10)
);
create table emp(
id int primary key auto_increment,
name varchar(10),
deptId int,
foreign key(deptId) references dept(id);
)
3)多對多關系
兩個表的記錄可以相互對應多條數據
學生表 課程表 (通過中間表實現)
create table student(
id int primary key auto_increment,
name varchar(10)
);
create table courses(
id int primary key auto_increment,
name varchar(10)
);
create table student_courses(
student_id int,
couses_id int,
primary key(student_id,couses_id),
foreign key(student_id) references student(id),
foreign key(couses_id) references courses(id);
);

連接條件 用于關聯兩張表中數據對應關系
在關聯查詢中通常兩張表要指定連接條件,否則會產生笛卡爾積.
笛卡爾積的查詢結果是兩張表的 乘積

-- 查看每個老師的名字和其所教科目的名字
SELECT teacher.name,teacher.salary,teacher.age,subject.name
from teacher,subject
WHERE teacher.subject_id=subject.id;SELECT t.name,t.salary,t.age,s.name
from teacher t,subject s
WHERE t.subject_id=s.id;SELECT * from teacher;
SELECT * from subject;
show tables;
desc teacher;
desc subject;
SELECT t.name,t.salary,t.age,s.name
from teacher t,subject s;--  查看班級的名稱和對應的班主任老師是誰
SELECT c.name,c.teacher_id,t.name,t.id
from class c,teacher t
WHERE c.teacher_id=t.id;-- 查看每個學生的名字 年齡 以及其所在的班級名稱和所在樓層
SELECT s.name,s.age,c.name,c.floor
from student s,class c
WHERE s.class_id=c.id;-- 查看每個學生來自哪座城市的名字,列出學生的名字,性別,年齡和所在城市的名字
select s.name,s.gender,s.age,l.name
from student s, location l
WHERE s.location_id=l.id;-- 王克晶 是哪個班的班主任?列出 班級名稱  樓層 老師名稱 工資
SELECT c.name,c.floor,t.name,t.salary
from class c,teacher t
WHERE t.id=c.teacher_id and t.name="王克晶";-- 查看三年級的班主任都是誰,要列出 班級名稱,所在樓層,班主任名字 工資
SELECT c.name,c.floor,t.name,t.salary
from class c,teacher t
WHERE c.teacher_id=t.id and c.name LIKE "3年級%";

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

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

相關文章

上位機知識篇---流式Web服務器模式的實現

文章目錄 前言 前言 本文簡單介紹了流式Web服務器模式的實現。

Dify與n8n全面對比指南:AI應用開發與工作流自動化平臺選擇【2025最新】

Dify與n8n全面對比指南&#xff1a;AI應用開發與工作流自動化平臺選擇【2025最新】 隨著AI技術與自動化工具的迅速發展&#xff0c;開發者和企業面臨著多種平臺選擇。Dify和n8n作為兩個備受關注的自動化平臺&#xff0c;分別專注于不同領域&#xff1a;Dify主要面向AI應用開發&…

day19-線性表(順序表)(鏈表I)

一、補充 安裝軟件命令&#xff1a; sudo apt-get install (軟件名) 安裝格式化對齊&#xff1a;sudo apt-get install clang-format內存泄漏檢測工具&#xff1a; sudo apt-get install valgrind 編譯后&#xff0c;使用命令 valgrind ./a.out 即可看內存是…

AI:人形機器人一定是人的形狀嗎?

本文將從技術角度分析人形機器人是否必須是人的形狀&#xff0c;以及人形與非人形機器人在適用場合、優缺點上的差異。以下是詳細解答&#xff1a; 人形機器人一定是人的形狀嗎&#xff1f; 不&#xff0c;人形機器人&#xff08;Humanoid Robot&#xff09;在技術上通常指外…

布隆過濾器和布谷鳥過濾器

原文鏈接&#xff1a;布隆過濾器和布谷鳥過濾器 布隆過濾器 介紹 布隆過濾器&#xff08;Bloom Filter&#xff09;是 1970 年由布隆提出的。它實際上是一個很長的二進制向量和一系列隨機映射函數&#xff0c;檢查值是“可能在集合中”還是“絕對不在集合中” 空間效率高&a…

無需配置光貓,使用網管交換機配合路由器的IPTV功能實現單線復用

一、背景 弱電箱和電視柜只預留了一根網線&#xff0c;路由器放在電視柜&#xff0c;想實現既可以上網又可以正常觀看iptv&#xff0c;本文提供了一種方法。 二、準備工作 1、帶iptv功能的路由器&#xff1b;2、水星sg105pro網管交換機&#xff1b;3、網線若干&#xff1b; …

深入理解SpringBoot中的SpringCache緩存技術

深入理解SpringBoot中的SpringCache緩存技術 引言 在現代應用開發中&#xff0c;緩存技術是提升系統性能的重要手段之一。SpringBoot提供了SpringCache作為緩存抽象層&#xff0c;簡化了緩存的使用和管理。本文將深入探討SpringCache的核心技術點及其在實際業務中的應用場景。…

2025認證杯數學建模A題思路+代碼+模型:小行星軌跡預測

2025認證杯數學建模A題思路代碼模型&#xff0c;詳細內容見文末名片 近地小行星&#xff08; Near Earth Asteroids, NEAs &#xff09;是軌道相對接近地球的小行 星&#xff0c;它的正式定義為橢圓軌道的近日距不大于 1.3 天文單位&#xff08; AU &#xff09;的小行星。 …

LeetCode Hot100刷題——輪轉數組

56. 輪轉數組 給定一個整數數組 nums&#xff0c;將數組中的元素向右輪轉 k 個位置&#xff0c;其中 k 是非負數。 示例 1: 輸入: nums [1,2,3,4,5,6,7], k 3 輸出: [5,6,7,1,2,3,4] 解釋: 向右輪轉 1 步: [7,1,2,3,4,5,6] 向右輪轉 2 步: [6,7,1,2,3,4,5] 向右輪轉 3 步: …

「Mac暢玩AIGC與多模態41」開發篇36 - 用 ArkTS 構建聚合搜索前端頁面

一、概述 本篇基于上一節 Python 實現的雙通道搜索服務&#xff08;聚合 SearxNG 本地知識庫&#xff09;&#xff0c;構建一個完整的 HarmonyOS ArkTS 前端頁面。用戶可在輸入框中輸入關鍵詞&#xff0c;實時查詢本地服務 http://localhost:5001/search?q...&#xff0c;返…

開源鴻蒙北向源碼開發: 5.0kit化相關sdk編譯

5.0kit化可以在編譯系統sdk時添加,將你的kit文件加入編譯使得最終生成的sdk包含kits文件 修改編譯腳本 修改build倉里面的構建腳本文件,添加kits目錄腳本命令 社區的build腳本已經有kits編譯功能了,只需要把你的kits目錄新增的kit拷貝到社區倉interface倉了,和社區的都一起編…

題單:漢諾塔問題

題目描述 如下圖所示&#xff0c;設有 nn 個大小不等的中空圓盤&#xff0c;按照從小到大的順序疊套在立柱 A 上&#xff0c;另有兩根立柱 B 和 C 。 現在要求把全部圓盤從 A 柱&#xff08;稱為源柱&#xff09;移到 C 柱&#xff08;稱為目標柱&#xff09;&#xff0c;移動…

(面試)TCP、UDP協議

TCP&#xff08;傳輸控制協議&#xff09;和UDP&#xff08;用戶數據報協議&#xff09;是互聯網核心的傳輸層協議&#xff0c;負責應用程序之間的數據傳輸。它們在設計目標、特性和適用場景上有顯著差異&#xff1a; TCP&#xff1a;面向連接&#xff0c;可靠的&#xff0c;速…

uni-app小程序登錄后…

前情 最近新接了一個全新項目&#xff0c;是類似商城的小程序項目&#xff0c;我負責從0開始搭建小程序&#xff0c;我選用的技術棧是uni-app技術棧&#xff0c;其中就有一個用戶登錄功能&#xff0c;小程序部分頁面是需要登錄才可以查看的&#xff0c;對于未登錄的用戶需要引…

通識:計算機網絡基礎知識

目錄 計算機網絡的基本組成 計算機網絡的主要分類 計算機網絡的功能 計算機網絡的關鍵技術 IP地址簡介 IP地址的版本 IP地址的分類 公有與私有IP地址 ?編輯 子網掩碼 計算機網絡基礎 IPv4與IPv6對比分析 IP地址分類簡化版 公有與私有IP地址 計算機網絡是指將地理…

三層固定實體架構:高效實現圖上的檢索增強生成(RAG)

知識圖譜正在成為跨各個領域組織和檢索信息的強大工具。它們越來越多地與機器學習和自然語言處理技術相結合,以增強信息檢索和推理能力。在本文中,我介紹了一種用于構建知識圖譜的三層架構,結合了固定本體實體、文檔片段和提取的命名實體。通過利用嵌入和余弦相似度,這種方…

ArcGIS Pro地塊圖斑順序編號(手繪線順序快速編號)-004

ArcGIS全系列實戰視頻教程——9個單一課程組合系列直播回放_arcgis初學者使用視頻-CSDN博客 4大遙感軟件&#xff01;遙感影像解譯&#xff01;ArcGISENVIErdaseCognition_遙感解譯軟件-CSDN博客 今天介紹一下在ArcGIS Pro地塊圖斑順序編號&#xff08;手繪線順序快速編號&am…

Vue百日學習計劃Day21-23天詳細計劃-Gemini版

總目標: 在 Day 21-23 完成 Vue.js 的介紹學習、環境搭建&#xff0c;并成功運行第一個 Vue 3 項目&#xff0c;理解其基本結構。 Day 21: Vue.js 介紹與概念理解 (~3 小時) 本日目標: 理解 Vue.js 是什么、漸進式框架的概念以及選擇 Vue 的原因。初步了解 Vite 是什么及其作用…

uniapp-商城-60-后臺 新增商品(屬性的選中和頁面顯示,數組join 的使用)

前面添加了屬性&#xff0c;添加屬性的子級項目。也分析了如何回顯&#xff0c;但是在添加新的商品的時&#xff0c;我們也同樣需要進行選擇&#xff0c;還要能正常的顯示在界面上。下面對頁面的顯示進行分析。 1、界面情況回顧 屬性顯示其實是個一嵌套的數據顯示。 2、選中的…

Vue框架

Vue 概況&#xff1a; Vue是一款用于構建用戶界面的漸進式的JavaScript框架。&#xff08;官方;https:://cn.vuejs.org/) 框架:就是一套完整的項目解決方案&#xff0c;用于快速構建項目。 優點:大大提升前端項目的開發效率。 缺點:需要理解記憶框架的使用規則。&#xff…