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

来源: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 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...