第八單元 嵌套查詢

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

什麼時候要使用嵌套查詢? 學生信息表: 學生編號姓名班級Id電話性別生日 180325011 任我行 5 13823204456 男 1999-09-09 180325012 張三 4 13823204452 女 1998-08-08 180325013 李四 2 18899251152 男 199 ...


什麼時候要使用嵌套查詢?

學生信息表:

學生編號姓名班級Id電話性別生日
180325011 任我行 5 13823204456 1999-09-09
180325012 張三 4 13823204452 1998-08-08
180325013 李四 2 18899251152 1997-07-07
180325014 王五 1 13597445645 1998-08-08
180325015 帥天行 5 13814204456 1998-06-06
180325016 葉星辰 5 17623204936 1998-05-05
180325017 趙日天 0 13922044932 1999-07-15

班級表:

班級Id班級名稱學院(系)
1 軟體技術1班 電腦系
2 會計1班 經濟管理系
3 會計2班 經濟管理系
4 歐美軟體外包班 電腦系
5 會計3班 經濟管理系

成績表:

Id學生編號課程名稱理論成績技術成績
1 180325011 會計從業 80 90
2 180325011 C# 入門編程 99 100
3 180325012 SQLServer編程 70 75
4 180325013 會計從業 93 80
5 180325014 C# 高級編程 99 99
6 180325015 會計從業 74 40
7 180325015 C# 入門編程 80 90

 

請問:葉星辰屬於哪個班級?

select * from 班級表 where 班級Id=
(
    Select 班級Id from 學生表 where 姓名 = '葉星辰'
)

 

 

2.嵌套查詢的格式是什麼?

select 列名 from 表名 where 欄位名 運算符   -- 外層主查詢,也叫父查詢
(
    select 列名 from 表名 where 條件      -- 內層查詢,也叫子查詢
)

 



子查詢的結果作為主查詢的查詢條件

 

--4.--查詢軟體技術1班的所有學生信息
-- 1.找表:學生表,班級表,外鍵:ClassId
-- 2.根據已經條件查詢外鍵的值
-- 3.根據外鍵的值查詢出題目的要求結果
select * from StudentInfo where ClassId =
(
    select Id from ClassInfo where Name='軟體技術1班'
)
​
    
--5.--查詢任我行同學的所有成績
-- 5.1  StudentInfo,StudentScore,找外鍵  stuId
-- 5.2  先寫已知條件 ,將外鍵查詢出來
-- 5.3  根據外鍵的值查詢題目要求的成績信息
select * from StudentScore where stuId in
(
    select stuId  from StudentInfo where stuName='任我行'
)
​
​
--6.--查詢“張三”同學所在班級信息
-- 1  StudentInfo,ClassInfo,找外鍵  classId
-- 2  先寫已知條件 ,將外鍵查詢出來
-- 3  根據外鍵的值查詢題目要求的班級信息
select * from ClassInfo where Id in
(
    select  classId from StudentInfo where stuName='張三' 
)
​
--7.-- 查詢學號為“180325011”的同學所在班級所有男生的信息
-- 1  StudentInfo,StudentInfo,關聯欄位  classId
-- 2  先寫已知條件 ,將關聯欄位查詢出來
-- 3  根據關聯欄位的值查詢題目要求的男生的信息
select * from StudentInfo where ClassId=
(
    select ClassId from StudentInfo where stuId='180325011'
) and stuSex=''
​
​
​
--8.-- 查詢班級名為“軟體技術1班”一共有多少個女生信息
-- 1  ClassInfo,StudentInfo,關聯欄位  classId
-- 2  先寫已知條件 ,將關聯欄位查詢出來
-- 3  根據關聯欄位的值查詢題目要求的女生信息
select * from StudentInfo where stuSex='' and ClassId=
(
    select Id from ClassInfo where Name='軟體技術1班'
)
​
​
--9.-- 查詢電話號為“18899251152”同學所在的班級信息
-- 1  ClassInfo,StudentInfo,關聯欄位  classId
-- 2  先寫已知條件 ,將關聯欄位查詢出來
-- 3  根據關聯欄位的值查詢題目要求的女生信息
select * from ClassInfo where Id=
(
    select classId from StudentInfo where stuPhone='18899251152'
)
​
​
--10.-- 查詢所有成績高於平均分的學生信息
-- 1,StudentScore, StudentInfo, 關聯欄位:StuId
-- 已知條件是:平均分
select * from StudentInfo where stuId in
(
    -- 查詢出高於平均分的Stuid
    select stuId from StudentScore where skillScore>
    (
        select avg(skillScore)  from StudentScore
    )   
)
​
​
​
--11.查詢所有年齡小於平均年齡的學生信息
-- 計算小於平均年齡的學生信息
select * from StudentInfo where (year(getdate())-year(stuBirthday))<
(
    -- 計算平均年齡
    select avg(year(getdate())-year(stuBirthday)) from StudentInfo
)
​
​
--12.查詢不是軟體技術1班級的學生信息
-- 關聯欄位:ClassId
select * from StudentInfo where ClassId not in -- 用in一定不會錯,如果子查詢的結果只有一條記錄時才可以寫=
(
    select Id from ClassInfo where Name='軟體技術1班'
)
​
select * from StudentInfo where ClassId !=
(
    select Id from ClassInfo where Name='軟體技術1班'
)
​
​
--13.查詢所有班級人數高於平均人數的班級信息
-- 每個班有多少人
select * from ClassInfo where Id in
(
    select  ClassId from StudentInfo group by ClassId having count(stuId)>
    (
        -- 求平均人數
        select avg(人數)from
        (
            select  count(stuId) as 人數 from StudentInfo group by ClassId
        ) aa
    )
)
​
​
--14.查詢成績最高的學生信息
select * from StudentInfo where stuId in
(
    select stuId from StudentScore where skillScore =
    (
        select MAX(skillScore)  from StudentScore
    )   
)
​
​
​
​
--16.查詢班級名是“會計1班”所有學生(使用in 關鍵字查詢)
select * from StudentInfo where ClassId in
(
    select Id from ClassInfo where Name='會計1班'
)
​
​
--17.查詢年齡是16、18、21歲的學生信息
select * from StudentInfo where (year(getdate())-year(stuBirthday)) in (16,18,21)
​
​
--18.查詢所有17-20歲且成績高於平均分的女生信息
select * from StudentInfo where (year(getdate())-year(stuBirthday)) between 17 and 20
and stuSex='' and stuId in
(
select stuId from StudentScore where skillScore>
(
select avg(skillScore) from StudentScore
)
)
​
​
--19.查詢不包括'張三'、'王明'、'肖義'的所有學生信息(not in 關鍵字查詢)
select * from StudentInfo where stuName not in('張三','王明','肖義')
​
​
--20.查詢不是“電腦系”學院的所有學生(not in 關鍵字查詢)
select * from StudentInfo where ClassId not in
(
select Id from ClassInfo where College='電腦系'
)
​
​
--查詢成績比學生編號為'180325011','180325012'其中一位高的同學
-- any,some:某一個,其中一個  
select * from StudentInfo where stuId in
(
select stuId from StudentScore where skillScore> 
    some
(
select skillScore from StudentScore where stuId in('180325011','180325012')
)
)
​
​
--查詢成績比學生編號為'180325011','180325012'都高的同學(all)
-- all:所有
select * from StudentInfo where stuId in
(
select stuId from StudentScore where skillScore> 
all
(
select skillScore from StudentScore where stuId in('180325011','180325012')
)
)
​
​
--Row_Number() Over(Order by 欄位):按某個欄位進行編號排名
-- 以stuId進行升序排名
select Row_Number() Over(Order by stuId)  ,* from StudentInfo
​
​
​
-- 按總成績降序排序並給每一位同學進行編號
select Row_Number() Over(Order by skillScore desc) as 排名, * from StudentScore 
​
​
-- 按總成績降序排序後查詢4-8名的學生信息
select * from(
select Row_Number() Over(Order by (skillScore+theoryScore) desc) as 排名, * from StudentScore 
) aa where aa.排名 between 4 and 8-- sqlserver 2012以後,offset rows  fetch next rows only
-- offset:在。。。位置 
select * from StudentScore order by (skillScore+theoryScore) desc offset 3 rows fetch next 5 rows only
​
​
-- 獲取按Id排序後的第3-5位同學信息
select * from(
select Row_Number() Over(Order by StuId) as 排名, * from StudentScore 
) aa where aa.排名 between 3 and 5
​
​
-- 
select * from StudentScore order by Id offset 2 rows fetch next 3 rows only

 

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

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

-Advertisement-
Play Games
更多相關文章
  • 介紹 C#跨平臺UI框架 提供NETStandard2.0和net4的庫,通過Netcore可以跨平臺,支持Windows、Mac、Linux,Net4的可以支持XP。 各個平臺運行效果一致,不依賴系統控制項。 支持窗體,控制項任意透明,支持異形窗體,支持SVG圖標顯示。 支持動畫,數據綁定,Mvvm模 ...
  • ConfigureAwait in .NET8 ConfigureAwait(true) 和 ConfigureAwait(false) 首先,讓我們回顧一下原版 ConfigureAwait 的語義和歷史,它採用了一個名為 continueOnCapturedContext 的布爾參數。 當對任務 ...
  • 一、緩存 緩存指在中間層中存儲數據的行為,該行為可使後續數據檢索更快。 從概念上講,緩存是一種性能優化策略和設計考慮因素。 緩存可以顯著提高應用性能,方法是提高不常更改(或檢索成本高)的數據的就緒性。 二、RFC9111 在最新的緩存控制規範文件RFC9111中,詳細描述了瀏覽器緩存和伺服器緩存控制 ...
  • 前言 自從使用docker以來,就經常聽說MySQL資料庫最好別運行在容器中,性能會損失很多。一些之前沒使用過容器的同事,對資料庫運行在容器中也是忌諱莫深,甚至只要資料庫跑在容器中出現性能問題時,首先就把問題推到容器上。 那麼到底會損失多少,性能損失會很多嗎? 為此我裝了兩個MySQL,版本都是8. ...
  • SQL中的IN運算符 IN運算符允許您在WHERE子句中指定多個值,它是多個OR條件的簡寫。 示例:獲取您自己的SQL Server 返回所有來自'Germany'、'France'或'UK'的客戶: SELECT * FROM Customers WHERE Country IN ('German ...
  • 第2章 Redis 的安裝與配置 2.1Redis 的安裝 2.1.1 克隆並配置主機 Redis在Linux上進行安裝,首先有配置Linux操作系統 2.1.2 安裝前的準備工作 (1) 安裝 gcc 由於 Redis 是由 C/C++語言編寫的,而從官網下載的 Redis 安裝包是需要編譯後才可 ...
  • 請問上圖中顯示的數據是一張表中的嗎? 1. 連接查詢的分類 內連接 外連接(左外連接,右外連接,全連接) 自連接 交差連接(不講) 2. 內連接 註意:Join 與 inner join等效(預設為內連接) 語法格式: select 欄位列表 from 表1 inner join 表2 on 表1. ...
  • Group by 未加索引 使用的是臨時表,加文件排序(數據量小用記憶體排序) 加個索引(一般是聯合索引) 註意:這裡加的索引一般不會僅僅是group by後面的欄位索引(大多數多少條件是一個以該欄位開頭聯合索引,方便使用覆蓋索引或者索引下推)。如果該欄位是一個varchar類型,最好加個int冗餘字 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...