第八單元 嵌套查詢

来源: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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...