數據庫day-07

一、實驗名稱和性質

子查詢

驗證 設計

二、實驗目的

1.掌握子查詢的嵌套查詢;

2.掌握集合操作

3.了解EXISTS嵌套查詢方法;

三、實驗的軟硬件環境要求

硬件環境要求:

???????? PC機(單機)

使用的軟件名稱、版本號以及模塊:

???????? Windows10,SQLServer2019

四、知識準備

  1. 嵌套子查詢

SELECT <目標列表達式列表>

?FROM 表名

?WHERE 列名IN

(SELECT 字句)

2.集合運算—union(并集)、intersect(交集)和except(差集)& with as

3.EXISTS嵌套子查詢

帶有EXISTS謂詞的子查詢不返回任何數據,只產生邏輯真值“true”或邏輯假值“false”。

●若內層查詢結果非空,則返回真值

●若內層查詢結果為空,則返回假值。

由EXISTS引出的子查詢,其目標列表達式通常都用* ,因為帶EXISTS的子查詢只返回真值或假值,給出列名無實際意義

所以,EXISTS子查詢中一般是相關自查詢,即子查詢脫離父查詢后不能單獨執行。

思考:如果EXISTS子查詢中是不相關子查詢,會有什么結果?

五、實驗內容

1.子查詢嵌套;

2.集合運算

3EXISTS嵌套查詢。

六、驗證性實驗

(表和表中的數據,見實驗6,XXX為學號的后兩位)

(1)查詢與’王麗娜’同班的學生學號,姓名

SELECT ?SNO, sname? ?FROM ??STUDENT?? ?WHERE ?CLASS=(SELECT ?CLASS ?FROM ?STUDENT?? ?WHERE ?SNAME='王麗娜')

SELECT ?S1.SNO,s1.Sname? ?FROM ??STUDENT?? AS? S1, STUDENT?? AS? S2

?WHERE ??S1.CLASS=S2.CLASS? AND? S2.SNAME='王麗娜'

SELECT ?S1.SNO,s1.Sname? ?FROM ??STUDENT?? AS? S1 JOIN? STUDENT?? AS? S2

ON? S1.CLASS=S2.CLASS? ?WHERE ???S2.SNAME='王麗娜'

(2)顯示每個學生的非最高分成績(學生自己的選課成績中,不是最高分的選課記錄顯示出來)

SELECT SNO,CNO,DEGREE FROM ??SCOREXXX? ASSC1

?WHERE DEGREE<(SELECT MAX(DEGREE) FROM ??SCOREXXX? ASSC2

?WHERE SC2.SNO=SC1.SNO)

顯示每個學生的最高分成績(學生自己的選課成績中,最高分的選課記錄顯示出來)

SELECT ??SNO, CNO, DEGREE? ?FROM ??SCOREXXX? AS? SC1

?WHERE ??DEGREE =(SELECT ??MAX(DEGREE)? ?FROM ??SCOREXXX? AS? SC2?

?WHERE ??SC2.SNO=SC1.SNO)

顯示各科的最高分的學號,姓名及課程名和成績

(3)查詢’操作系統’課程的選課人數

SELECT COUNT(*) FROM ??SCOREXXX

?WHERE ??CNO? IN--IN 可以換為=

(SELECT ??CNO? ?FROM ??COURSEXXX WHERE ??CNAME='操作系統')

(4) 相關的子查詢:子查詢中要用到父查詢表的信息,子查詢不能獨立執行。

如,查詢選修課程號為“3-105”課程且成績至少高于選修課程號為“3-245”的同學的Cno、Sno和DEGREE。

在子查詢中,因為要查找該同學’3-245’課程的成績,所以,需要父查詢表中該學生的學號信息。

SELECT ?CNO,SNO,DEGREE ?FROM ??SCOREXXXAS? SC1

?WHERE ??CNO='3-105'AND? DEGREE >(

SELECT ?DEGREE ?FROM ??SCOREXXXAS? SC2

?WHERE ??SC2.SNO=SC1.SNO AND SC2.CNO='3-245')

SELECT ?CNO,SNO,DEGREE CJ105,(SELECT ?DEGREE ?FROM ??SCOREXXXAS? SC2

?WHERE ??SC2.SNO=SC1.SNO AND SC2.CNO='3-245') CJ245 FROM ??SCOREXXXAS? SC1 WHERE CNO='3-105'AND? DEGREE >(

SELECT ?DEGREE ?FROM ??SCOREXXXAS? SC2

?WHERE ??SC2.SNO=SC1.SNO AND SC2.CNO='3-245')

(5)EXISTS嵌套子查詢,分析以下語句

SELECT? SNO,SNAME? FROM ?STUDENTXXX S

?WHERE? EXISTS (SELECT * FROM ?SCOREXXX ?WHERE? SNO=S.SNO)

SELECT? SNO,SNAME? FROM ?STUDENTXXX S

?WHERE? not EXISTS (SELECT * FROM ?SCOREXXX ?WHERE? SNO=S.SNO)

SELECT? SNO,SNAME? FROM ?STUDENTXXX S

?WHERE? EXISTS (SELECT * FROM ?SCOREXXX ?WHERE? SNO=‘111’)

SELECT SNO,SNAME? FROM ?STUDENTXXX S

?WHERE? EXISTS (SELECT * FROM ?SCOREXXX ?WHERE? SNO=‘108’)

(6)union,分析以下語句

Select ?tName,tSex from teacherXXX

union

select ?sName,sSex from ?STUDENTXXX

select tName from teacherXXX WHERE TNAME LIKE '李%'

union

select sName from ?STUDENTXXX ?WHERE sNAME LIKE '李%'

select tName from teacherXXX WHERE TNAME LIKE '李%'

union ALL

select sName from ?STUDENTXXX ?WHERE sNAME LIKE '李%'

(7)intersect(交集)集合運算,分析以下語句

select * from ?STUDENTXXX ?WHERE sno<‘108'

intersect

select * from ?STUDENTXXX ?WHERE sno>‘103'

(8)except(差集)集合運算,分析以下語句

select * from ?STUDENTXXX ?WHERE sno<‘108'

except

select * from ?STUDENTXXX ?WHERE sno>‘103'

(9)子查詢作為表

Select s.*,av from ?STUDENTXXX sjoin(select sno,avg(degree)av from ?SCOREXXX groupbysno)tons.sno=t.sno

(10)其他

  1. Select row_number()over(orderbysno)asrowNum,* from ?SCOREXXX
  2. Select row_number()over(partitionbysnoorderbysno)asrowNum,* from ?SCOREXXX

  1. select sno,cno,casewhendegree>=90then'A'

WHENDEGREE>=80THEN'B'

WHENDEGREE>=70THEN'C'

WHENDEGREE>=60THEN'D'

ELSE'E'

END

?FROM ?SCOREXXX

  1. select ?sno,sname,case ssex when '男' then 'M'

when '女' then? 'F'

END XB

?from ?STUDENTXXX?

  1. SELECT ?* into? STU_XXX ?FROM ?STUDENTXXX ??WHERE ???SSEX=‘男’
  2. INSERT? STU_XXX? SELECT ?* ?FROM ?STUDENTXXX ?WHERE ?SSEX=‘女’

七、設計性實驗

1.實驗內容(用子查詢完成

  1. 查詢每人的成績(學號、課程號、成績)和所有成績平均分;

SELECT

??? S.Sno,

??? SC.Cno,

??? SC.Degree,

??? (SELECT AVG(Degree) FROM Score023) AS AvgAllScore

FROM

??? Student023 S

JOIN

??? Score023 SC ON S.Sno = SC.Sno;

  1. 查詢每人的成績(學號、課程號、成績)和本課程平均分;

SELECT

??? S.Sno,

??? SC.Cno,

??? SC.Degree,

??? AVG(SC2.Degree) OVER(PARTITION BY SC.Cno) AS AvgCourseScore

FROM

??? Student023 S

JOIN

??? Score023 SC ON S.Sno = SC.Sno

JOIN

??? Score023 SC2 ON SC.Cno = SC2.Cno;

  1. 查詢每人的成績(學號、姓名,課程名、成績)和本班總平均分;

SELECT

??? S.Sno,

??? S.Sname,

??? C.Cname,

??? SC.Degree,

??? (SELECT AVG(SC2.Degree)

???? FROM Score023 SC2

???? JOIN Student023 S2 ON SC2.Sno = S2.Sno

???? WHERE S2.Class = S.Class) AS ClassAvgScore

FROM

??? Student023 S

JOIN

??? Score023 SC ON S.Sno = SC.Sno

JOIN

??? Course023 C ON SC.Cno = C.Cno;

  1. 查詢每人的成績(學號、姓名,課程名、成績)和本班本科平均分;

SELECT

??? S.Sno,

??? S.Sname,

??? C.Cname,

??? SC.Degree,

??? (SELECT AVG(SC2.Degree)

???? FROM Score023 SC2

???? JOIN Student023 S2 ON SC2.Sno = S2.Sno

???? WHERE S2.Class = S.Class AND SC2.Cno = SC.Cno) AS ClassCourseAvg

FROM

??? Student023 S

JOIN

??? Score023 SC ON S.Sno = SC.Sno

JOIN

??? Course023 C ON SC.Cno = C.Cno;

  1. 查詢成績高于學號為“101”的課程號為“3-105”的成績的所有記錄。

SELECT *

FROM Score023

WHERE Degree > (

??? SELECT Degree

??? FROM Score023

??? WHERE Sno = '101' AND Cno = '3-105'

);

  1. 查詢和學號為101的同學同月出生的所有學生的Sno、Sname和Sbirthday列。

SELECT

??? Sno, Sname, Sbirthday

FROM

??? Student023

WHERE

??? MONTH(Sbirthday) = (

??????? SELECT MONTH(Sbirthday)

??????? FROM Student023

??????? WHERE Sno = '101'

??? );

  1. 查詢“張旭“教師任課的學生成績(學號、姓名,課程名、成績)。

SELECT

??? S.Sno,

??? S.Sname,

??? C.Cname,

??? SC.Degree

FROM

??? Student023 S

JOIN

??? Score023 SC ON S.Sno = SC.Sno

JOIN

??? Course023 C ON SC.Cno = C.Cno

JOIN

??? Teacher023 T ON C.Tno = T.Tno

WHERE

??? T.Tname = '張旭';

  1. 查詢每科的最高分信息(學號、姓名,課程名、成績)

SELECT

??? S.Sno,

??? S.Sname,

??? C.Cname,

??? SC.Degree

FROM

??? Student023 S

JOIN

??? Score023 SC ON S.Sno = SC.Sno

JOIN

??? Course023 C ON SC.Cno = C.Cno

WHERE

??? SC.Degree = (

??????? SELECT MAX(Degree)

??????? FROM Score023

??????? WHERE Cno = SC.Cno

??? );

  1. 查詢有成績不及格的同學的學號,姓名。

SELECT DISTINCT

??? S.Sno,

??? S.Sname

FROM

??? Student023 S

JOIN

??? Score023 SC ON S.Sno = SC.Sno

WHERE

??? SC.Degree < 60;

  1. 查詢選修兩門及兩門以上課程的學生學號及姓名,課程名,成績,并保存到’SCBXXX’表中。

SELECT

??? S.Sno,

??? S.Sname,

??? C.Cname,

??? SC.Degree

INTO

??? SCB023

FROM

??? Student023 S

JOIN

??? Score023 SC ON S.Sno = SC.Sno

JOIN

??? Course023 C ON SC.Cno = C.Cno

WHERE

??? S.Sno IN (

??????? SELECT Sno

??????? FROM Score023

??????? GROUP BY Sno

??????? HAVING COUNT(*) >= 2

??? );

  1. 查詢所有學生的操作系統成績及排名(學號,姓名,成績,排名)(不用排序函數

SELECT

??? S.Sno,

??? S.Sname,

??? SC.Degree,

??? (SELECT COUNT(*) + 1

???? FROM Score023 SC2

???? JOIN Student023 S2 ON SC2.Sno = S2.Sno

???? JOIN Course023 C2 ON SC2.Cno = C2.Cno

???? WHERE C2.Cname = '操作系統' AND SC2.Degree > SC.Degree) AS Rank

FROM

??? Student023 S

JOIN

??? Score023 SC ON S.Sno = SC.Sno

JOIN

??? Course023 C ON SC.Cno = C.Cno

WHERE

??? C.Cname = '操作系統';

  1. 查詢(沒)有選修任何課程學生的信息(學號,姓名,等);

SELECT *

FROM Student023

WHERE Sno NOT IN (SELECT DISTINCT Sno FROM Score023);

  1. 查詢所以成績都及格的學生的信息(學號,姓名,課程號,課程名,成績,最低成績)(any ,some,all)

SELECT

??? S.Sno,

??? S.Sname,

??? C.Cno,

??? C.Cname,

??? SC.Degree,

??? (SELECT MIN(Degree) FROM Score023 WHERE Sno = S.Sno) AS MinScore

FROM

??? Student023 S

JOIN

??? Score023 SC ON S.Sno = SC.Sno

JOIN

??? Course023 C ON SC.Cno = C.Cno

WHERE

??? S.Sno NOT IN (

??????? SELECT DISTINCT Sno

??????? FROM Score023

??????? WHERE Degree < 60

??? );

  1. 查詢成績有不及格的學生的信息(學號,姓名,課程號,課程名,成績, 最低成績)(any ,some,all)

SELECT

??? S.Sno,

??? S.Sname,

??? C.Cno,

??? C.Cname,

??? SC.Degree,

??? (SELECT MIN(Degree) FROM Score023 WHERE Sno = S.Sno) AS MinScore

FROM

??? Student023 S

JOIN

??? Score023 SC ON S.Sno = SC.Sno

JOIN

??? Course023 C ON SC.Cno = C.Cno

WHERE

??? S.Sno IN (

??????? SELECT DISTINCT Sno

??????? FROM Score023

??????? WHERE Degree < 60

??? );

收獲:

學會了使用子查詢解決復雜問題

理解了窗口函數(OVER PARTITION BY)的應用場景

實現了數據排名功能(不使用排序函數)

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

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

相關文章

【前端】【業務場景】【面試】在前端開發中,如何實現文件的上傳與下載功能,并且處理可能出現的錯誤情況?

前端文件上傳與下載攻略 本文目標&#xff1a;幫你快速掌握文件上傳 & 下載的核心實現方式&#xff0c;并在常見出錯場景下保持“優雅不崩潰”。 一、文件上傳 1. 基礎結構 <input type"file" id"fileInput" /> <button id"uploadBtn&…

Kafka 消息積壓監控和報警配置的詳細步驟

Kafka 消息積壓監控和報警配置的詳細步驟示例&#xff0c;涵蓋常用工具&#xff08;如 Prometheus Grafana、云服務監控&#xff09;和自定義腳本方法&#xff1a; 一、監控配置 方法1&#xff1a;使用 Prometheus Grafana kafka-exporter 步驟1&#xff1a;部署 kafka-ex…

【C++】內存管理:內存劃分、動態內存管理(new、delete用法)

文章目錄 一、C/C中的內存劃分二、C語言中動態內存管理方式三、C中動態內存管理方式1、new、delete基本用法(1)、內置類型(2)、自定義類型 2、operator new與operator delete函數3、new和delete的實現原理&#xff08;1&#xff09;內置類型&#xff08;2&#xff09;自定義類型…

C# 實戰_RichTextBox選中某一行條目高亮,離開恢復

C# 中控件richtextbox中某一行的條目內容高亮&#xff0c;未選中保持不變。當鼠標點擊某一行的條目高亮&#xff0c;離開該條目就恢復默認顏色。 運行效果&#xff1a; 核心代碼實現功能&#xff1a; //高亮指定行的方法private void HighlightLine(RichTextBox rtb,int lineI…

Vue3 ref與props

ref 屬性 與 props 一、核心概念對比 特性ref (標簽屬性)props作用對象DOM 元素/組件實例組件間數據傳遞數據流向父組件訪問子組件/DOM父組件 → 子組件響應性直接操作對象單向數據流&#xff08;只讀&#xff09;使用場景獲取 DOM/調用子組件方法組件參數傳遞Vue3 變化不再自…

視頻匯聚平臺EasyCVR賦能高清網絡攝像機:打造高性價比視頻監控系統

在現代視頻監控系統中&#xff0c;高清網絡攝像機作為核心設備&#xff0c;其性能和配置直接影響監控效果和整體系統的價值。本文將結合EasyCVR視頻監控的功能&#xff0c;探討如何在滿足使用需求的同時&#xff0c;優化監控系統的設計&#xff0c;降低項目成本&#xff0c;并提…

【C++】 —— 筆試刷題day_21

一、愛麗絲的人偶 題目解析 現在存在n個玩偶&#xff0c;每個玩偶的身高是1、2、3......n&#xff1b; 現在我們要對這些玩偶進行排序&#xff08;如果x人偶&#xff0c;它左右兩邊的玩偶一個比x高、一個比x矮&#xff0c;那這個玩偶就會爆炸&#xff09;。 我們不想要任何一個…

詳解.vscode 下的json .vscode文件夾下各個文件的作用

1.背景 看一些開源項目的時候,總是看到vscode先有不同的json文件,再次做一下總結方便之后查看 settings.json肯定不用多說了 vscode 編輯器分為 全局用戶配置 和 當前工作區配置 那么.vscode文件夾下的settings.json文件夾肯定就是當前工作區配置了 在此文件對單個的項目進行配…

手動實現legend 與 echarts圖交互 通過js事件實現圖標某項的高亮 顯示與隱藏

通過html實現legend的樣式 提供調用echarts的api實現與echarts圖表交互的效果 實現餅圖element實現類似于legend與echartstu表交互效果 效果圖 配置代碼 <template><div style"height: 400px; width: 500px;background-color: #CCC;"><v-chart:opti…

Spring Boot 配置源詳解(完整版)

Spring Boot 配置源詳解&#xff08;完整版&#xff09; 一、配置源加載順序與優先級 配置源類型優先級順序&#xff08;從高到低&#xff09;對應配置類/接口是否可覆蓋典型文件/來源命令行參數&#xff08;--keyvalue&#xff09;1&#xff08;最高&#xff09;SimpleComman…

【無人機】無人機遙控器設置與校準,飛行模式的選擇,無線電控制 (RC) 設置

目錄 1、遙控器校準 1.1、校準步驟 2、飛行模式選擇&#xff0c;遙控器通道映射 2.1、配置步驟 1、遙控器校準 在校準無線電系統之前&#xff0c;必須連接/綁定接收器和發射器。綁定發射器和接收器對的過程是特定于硬件的&#xff08;有關說明&#xff0c;請參閱 RC 手冊&…

Redis 有序集合 ZSet 深度解析教程

Redis-ZSet 引言一、 ZSet 核心概念與特性1.1 什么是 ZSet&#xff1f;1.2 ZSet 與 Set、List 的本質區別 二、 ZSet 典型應用場景2.1 排行榜 (Leaderboards)2.2 帶權重的任務隊列 / 延遲隊列2.3 時間軸 (Timeline)2.4 范圍查找 三、 ZSet 底層實現3.1 ziplist (壓縮列表)3.2 s…

【SpringBoot】HttpServletRequest獲取使用及失效問題(包含@Async異步執行方案)

目錄 1. 在 Controller 方法中作為參數注入 2.使用 RequestContextHolder &#xff08;1&#xff09;失效問題 &#xff08;2&#xff09;解決方案一&#xff1a; &#xff08;3&#xff09;解決方案二&#xff1a; 3、使用AutoWrite自動注入HttpServletRequest 跨線程調…

mfc學習(一)

mfc為微軟創建的一個類qt框架的客戶端程序&#xff0c;只不過因為微軟目前有自己 的親身兒子C#&#xff08;.net&#xff09;,所以到2010沒有進行維護。然后一些的工業企業還在繼續進行維護相關的內容。我目前就接手一個現在這樣的項目&#xff0c;其實本質與qt的思路是差不多的…

HarmonyOS:一多能力介紹:一次開發,多端部署

概述 如果一個應用需要在多個設備上提供同樣的內容&#xff0c;則需要適配不同的屏幕尺寸和硬件&#xff0c;開發成本較高。HarmonyOS 系統面向多終端提供了“一次開發&#xff0c;多端部署”&#xff08;后文中簡稱為“一多”&#xff09;的能力&#xff0c;可以基于一種設計…

秒出PPT推出更強版本,AI PPT工具進入新紀元!

在現代職場中&#xff0c;PPT是我們溝通和展示信息的重要工具。無論是做產品演示&#xff0c;還是準備工作匯報&#xff0c;一份精美的PPT能大大提升演示效果。然而&#xff0c;傳統的PPT制作往往需要消耗大量時間&#xff0c;尤其是在排版、設計和內容調整上。如今&#xff0c…

Godot開發2D冒險游戲——第二節:主角光環整起來!

變量的作用域 全局變量&#xff0c;局部變量&#xff0c;導出變量&#xff08;可以在檢查器當中快速查看&#xff09; 為玩家添加移動動畫 現在游戲的玩家還只是在滑行&#xff0c;我們需要再添加玩家每個方向上的移動效果 刪除原先的Item節點&#xff0c;創建一個動畫精靈…

顛覆傳統NAS體驗:耘想WinNAS讓遠程存儲如同本地般便捷

在當今數據爆炸的時代&#xff0c;網絡附加存儲(NAS)已成為許多企業和個人用戶的必備設備。然而&#xff0c;傳統硬件NAS解決方案存在諸多限制&#xff0c;如高額成本、復雜設置和有限的遠程訪問能力。耘想WinNAS以其創新的軟件解決方案&#xff0c;徹底改變了這一局面&#xf…

新市場環境下新能源汽車電流傳感技術發展前瞻

新能源革命重構產業格局 在全球碳中和戰略驅動下&#xff0c;新能源汽車產業正經歷結構性變革。國際清潔交通委員會&#xff08;ICCT&#xff09;最新報告顯示&#xff0c;2023年全球新能源汽車滲透率突破18%&#xff0c;中國市場以42%的市占率持續領跑。這種產業變革正沿著&q…

STM32之DHT11溫濕度傳感器---附代碼

DHT11簡介 DHT11的供電電壓為 3&#xff0d;5.5V。 傳感器上電后&#xff0c;要等待 1s 以越過不穩定狀態在此期間無需發送任何指令。 電源引腳&#xff08;VDD&#xff0c;GND&#xff09;之間可增加一個100nF 的電容&#xff0c;用以去耦濾波。 DATA 用于微處理器與DHT11之間…