第七單元 條件查詢,分組查詢

来源:https://www.cnblogs.com/xuyubing/archive/2023/11/24/17855038.html
-Advertisement-
Play Games

1. 條件查詢 條件查詢是通過where子句進行檢索的查詢方式。 select 欄位名1, 欄位名2, …, 欄位名n from 數據表名 where 查詢條件 1. 如何使用排序(升序,降序)? asc:表示升序(預設排序方式) desc:降序 排序語法:select ... from 表名 [條 ...


1. 條件查詢

條件查詢是通過where子句進行檢索的查詢方式。

select 欄位名1, 欄位名2, …, 欄位名n 
from 數據表名
where 查詢條件

 

1. 如何使用排序(升序,降序)?

asc:表示升序(預設排序方式) desc:降序

排序語法:select ... from 表名 [條件] order by 要排序的欄位 asc/desc

-- 將成績從高到低進行排序
select * from StudentScore order by (theoryScore+skillScore) 
​
​
-- 查詢學生表,按姓名升序顯示
select * from StudentInfo order by stuName asc -- asc 可以省略

 

 

2. 多欄位如何排序?

語法: select ... from 表名 [條件] order by 第一要排序的欄位 asc/desc , 第二要排序的欄位 asc/desc

 -- 查詢成績表,先按學生編號從低到高排序,再按成績從高到低顯示
 select * from StudentScore order by stuId asc,(theoryScore+skillScore) desc


 -- 查詢學生信息,先按班級進行升序,再按生日進行降序
 select * from StudentInfo order by ClassId asc ,stuBirthday desc

 

 

3. 如何使用關係表達式查詢(大於,小於,等於)?

 -- 查詢 班級編號 在 1,3,5,7 里的學生信息
 select * from StudentInfo where ClassId in(1,3,5,7)


-- 查詢班級編號 不是偶數的學生信息
select * from StudentInfo where ClassId%2!=0

-- 查詢技能成績大於90分的成績信息
select * from StudentScore where skillScore>90

 

 

4. 如何使用between...and 的語法?

between ... and :在...之間,應用範圍:數字類型

-- 查詢技能成績在60-80之間的成績信息
-- 寫法1
select * from StudentScore where  skillScore between 60 and 80
-- 寫法2
select * from StudentScore where  skillScore>=60 and skillScore<=80

 

 

5. 如何統計個數,平均分,最大數,最小數,求和?

函數欄位類型描述
Min(欄位) 數字類型 最小值
Max(欄位) 數字類型 最大值
Sum(欄位) 數字類型 總和
count(欄位) 無限制 個數
count(distinct 欄位) 無限制 去重後,求個數
avg(欄位) 數字類型 平均數
-- 統計學生的個數
 select count(stuId) from StudentInfo

 -- 統計女生的個數
 select count(stuId) as 女生個數 from StudentInfo where stuSex=''



 -- 查詢學生平均分
 select avg(skillScore+theoryScore) from StudentScore

 -- 查詢課程名稱為'C# 入門編程'的平均分
  select avg(skillScore+theoryScore) from StudentScore where CourseName='C# 入門編程'

 -- 查詢班級編號最大的班級
 -- 寫法1
 select max(classId) from StudentInfo
 -- 寫法2
select top 1 (skillScore+theoryScore) from StudentScore order by (skillScore+theoryScore) desc
 
 -- 計算最低分
 -- 寫法1
select min(skillScore+theoryScore) from StudentScore
-- 寫法2
select top 1 (skillScore+theoryScore) from StudentScore order by (skillScore+theoryScore) asc



 -- 計算技能總分
 select sum(skillScore) from StudentScore

-- 計算學生編號為180325011 的技能總分
select sum(skillScore) from StudentScore where stuId='180325011'


-- 查詢有多少個人參加了考試
select count(distinct stuId) from StudentScore
 

 

2. 聚合函數

6. 能否將所有聚合函數寫在一起?

select 
count(distinct stuId) 學生數量,
Min(skillScore) 最小值,
Max(skillScore) 最大值,
Sum(skillScore) 總和
from StudentScore

 

3. exists 查詢

功能:用於嵌套查詢 exists後的查詢語句有結果則為真,無結果則為假,如果為真,則執行外層查詢,否則外層查詢不執行 語法格式:

select 欄位名1, 欄位名2, …, 欄位名n 
from 數據表名
where exists
(select 欄位名 from 數據表名 where …)
-- 如果存在大於20歲,則查詢結果,
select * from StudentInfo where exists
(
    select * from StudentInfo where year(getdate())-year(stuBirthday)>20
)

 
--如果班級裡面有兩個以上的老王,則把老王的信息查詢出來
select * from StudentInfo where exists
(
    select * from
    (
        select count(stuId) as 數量 from StudentInfo where stuName like '王%'
    ) a where a.數量>=1
)
 

 

4. 分組查詢

8.如何使用分組查詢?他們的關鍵字分別是什麼?

-語法:select 要分組的欄位,聚合函數 from 表名 group by 要分組的欄位

-group by:分組

小技巧: 每什麼就以哪個欄位進行分組

--9.計算每門課程的平均分
select CourseName, avg(skillScore) as 平均分 from StudentScore group by CourseName


--10.統計每個學生的平均分
select stuId,avg(skillScore+theoryScore) from StudentScore group by stuId

-- 統計每個班級有多少個學生
select ClassId,Count(stuId) as 個數 from StudentInfo group by ClassId

 
-- 統計每門課程有多少位同學在學習
select CourseName,count(stuId) from StudentScore group by CourseName


-- 統計每個學生學習了多少門課程
select stuId,count(CourseName) from StudentScore group by stuId


--11.查看每一門課程的平均分,總分,最高分,最低分
select CourseName,avg(skillScore),sum(skillScore),max(skillScore),min(skillScore)
from StudentScore group by CourseName

-- 11.1 查詢每門課程,每個學生的最低分
select CourseName,stuId,min(skillScore) from StudentScore group by CourseName,stuId

--12.統計每門課程的最低分,並且查詢出70分以上的
-- having:在分組的基礎之上進行數據過濾
select CourseName,min(skillScore) from StudentScore group by CourseName
having min(skillScore)>70


--13.統計每門課程,但不包含課程C# 入門編程的最低分,並且查詢出70分以上的

--  13.1統計每門課程最低分
select CourseName,min(skillScore) from StudentScore group by CourseName
--  13.2 在統計之前加上where 課程!=C# 入門編程
select CourseName,min(skillScore) from StudentScore where CourseName!='C# 入門編程' 
group by CourseName 
--  13.3 在統計之後加上having 最低分>=70
select CourseName,min(skillScore) from StudentScore where CourseName!='C# 入門編程' 
group by CourseName  having min(skillScore)>70

--14.查詢每門課程學習的人數大於等於2人的課程名稱與學習人數。
select CourseName,count(stuId) from StudentScore group by CourseName
having count(stuId)>=2

-- 15.查詢不只學了一門課程的學生編號與學習的課程數
-- 翻譯成人話:每個學生學習的課程數,並且學習的數量大於1
select stuId,count(CourseName) from StudentScore group by stuId
having count(CourseName)>1

 

5. 作業

線上教育平臺,網站首頁顯示所有課程分類,將分類後的信息顯示出來供用戶選擇,創建資料庫Education_DB,創建表(根據說明創建符合規範的表),如圖所示

課程表:

列名數據類型說明
CourseId int 課程編號,自增1,主鍵
CourseName char(20) 課程名稱,非空

 

用戶選課表

列名數據類型說明
Customer_Id int 用戶編號、自增1,主鍵
Customer_Name Varchar(20) 用戶名稱、非空
Customer_Sex Varchar(2) 用戶性別、只能是男或女
Customer_Age int 用戶年齡、年齡>=0
Customer_Phone Varchar(20) 用戶手機號碼、唯一
Customer_Address Varchar(20) 用戶籍貫、非空、預設北京
CourseId int 課程編號、外鍵

 

1、添加數據,如圖所示,用戶選課表至少添加五條數據

 

一、案例題目

  1. 創建兩張表並添加約束。(15分)

  2. 每張表添加5條數據(5分)

  3. 查詢用戶選課信息表的前3條數據(5分)

  4. 查詢用戶選課信息表中年齡大於20的用戶信息(5分)

  5. 查詢用戶選課信息表中性別為女的信息(5分)

  6. 查詢用戶選課信息表中用戶名稱、用戶性別和用戶年齡併為查詢的欄位起中文別名(5分)

  7. 查詢用戶選課信息表的信息並按照年齡升序排列(5分)

  8. 查詢用戶選課信息表中所有用戶的年齡總和(5分)

  9. 查詢用戶選課信息表中所有用戶的最小年齡(5分)

  10. 查詢用戶選課信息表中所有用戶的最大年齡(5分)

  11. 查詢用戶選課信息表中所有用戶的平均年齡(5分)

  12. 查詢用戶選課信息表中一共有多少條數據(5分)

  13. 查詢姓李的用戶信息(5分)

  14. 查詢姓張的兩個字的用戶信息(5分)

  15. 查詢每個課程有多少人選擇(5分)

  16. 查詢大於平均年齡的用戶信息(5分)

  17. 查詢大於平均年齡的前2條信息(5分)

  18. 查詢學習C#課程的人數(5分) 

 

配套視頻鏈接:【階段二】 - SQLServer 基礎(超級詳細,口碑爆盆)_嗶哩嗶哩_bilibili

海闊平魚躍,天高任我行,給我一片藍天,讓我自由翱翔。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 介紹了Spring的高級註解,包括@Configuration註解替代XML配置文件、@Bean註解創建和註入Bean、@ComponentScan註解進行註解掃描,配置Bean的底層實現原理等 ...
  • java三種類型的加減,LocalDate、Calendar、Date @目錄1.LocalDate類型加減:2.Calendar加減:3.Date類型加減 1.LocalDate類型加減: 以下是LocalDate類進行日期加減: import java.time.LocalDate; impor ...
  • Date類: 1.1、將字元串型時間日期轉化為date類型 String timeString = "2023-11-17 09:27:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //創建"簡單時間 ...
  • SCM(Service Control Manager)服務管理器是 Windows 操作系統中的一個關鍵組件,負責管理系統服務的啟動、停止和配置。服務是一種在後臺運行的應用程式,可以在系統啟動時自動啟動,也可以由用戶或其他應用程式手動啟動。本篇文章中,我們將通過使用 Windows 的服務管理器(... ...
  • 這一篇內容可能相對較少,但是迭代器在Java中是有用處的。因此,我想介紹一下Python中迭代器的使用方法。除了寫法簡單之外,Python的迭代器還有一個最大的不同之處,就是無法直接判斷是否還有下一個元素。我們只能通過捕獲異常或使用for迴圈來退出迭代,這點讓我感到十分驚訝。 ...
  • 稀疏矩陣是一種特殊的矩陣,其非零元素數目遠遠少於零元素數目,並且非零元素分佈沒有規律。這種矩陣在實際應用中經常出現,例如在物理學、圖形學和網路通信等領域。 稀疏矩陣其實也可以和一般的矩陣一樣處理,之所以要把它區分開來進行特殊處理,是因為:一方面稀疏矩陣的存儲空間開銷通常比稠密矩陣要小得多,可以節省存 ...
  • 說明: Redis是一個開源的,由C語言編寫的高性能NoSQL資料庫,因其高性能、可擴展、相容性強,被各大小互聯網公司或個人作為記憶體型存儲組件使用。 但是其中有小部分公司或個人開發者,為了方便調試或忽略了安全風險,沒有設置密碼並直接對外開放了6379埠,那麼這就是一個危險的行為。 漏洞成因: 未對 ...
  • 四、Linux幫助使用 1、Tab鍵的作用 當所輸入的關鍵字具有唯一性時,一次Tab則自動補齊 所輸入的關鍵字不具有唯一性,則系統會列出所有該關鍵字開頭的內容 補齊命令 補齊參數 2、歷史記錄 history:查看所有歷史記錄 history N :列出最近N條歷史記錄 !N:調用第N條歷史記錄 ! ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...