第四章高階查詢--上機題和經典案例
--上機題1
--參加oop最近一次考試時間的最高分數和最低分數
select MAX(studentresult), MIN(studentresult) from Result
where ExamDate=
(
select MAX(ExamDate) from Result
where SubjectId=
(
select SubjectId from Subject where SubjectName='oop'
)
)
and SubjectId=
(
select SubjectId from Subject where SubjectName='oop'
)
--上機題2
--使用in關鍵字的子查詢來查詢S1學期開設的課程
select SubjectName from Subject
where GradeId in
(
select GradeId from Grade where GradeName='S1'
)
--上機題3
--查詢某課程最近一次考試缺考的學生名單
select studentno, StudentName from Student
where StudentNo not in
(
select StudentNo from Result
where SubjectId=
(
select SubjectId from Subject where SubjectName='oop'
)
and ExamDate=
(
select MAX(ExamDate) from Result
where SubjectId=
(
select SubjectId from Subject where SubjectName='oop'
)
)
)
and GradeId=
(
select GradeId from Subject where SubjectName='oop'
)
--上機題4
--檢查並更新S1的學生為S2
if exists(
select studentno,StudentName from Student
where StudentNo in
(
select StudentNo from Student where
GradeId=
(
sleelct GradeId from grade where GradeName='S1'
)
)
)
begin
update Student set GradeId=2
where GradeId in
(
select GradeId from Grade where GradeName='S1'
)
end
--上機題5
select studentname,(select GradeName from Grade)as Gradename,subjectname,examdate,studentresult from Student,Subject,Result
where result.StudentNo in
(
select MAX(ExamDate) from Result
group by SubjectId
)
--上機題6
--SQL語句的綜合運用
--賦值科目名稱為oop
declare @subjectName varchar(50)
SET @subjectName='oop'
--科目為oop最近考試時間
declare @date datetime
select @date=MAX(examdate) from Result
inner join Subject on Result.SubjectId=Subject.SubjectId
where [email protected]
--課程oop的編號
declare @subjectNo int
select @subjectNo=SubjectId from Subject where [email protected]
--統計考試缺考情況
SELECT 應到人數=(
SELECT COUNT(*) FROM Student
INNER JOIN Subject ON Subject.GradeId=Student.GradeId
WHERE SubjectName= @subjectName
) ,
實到人數=(
SELECT COUNT(*) FROM Result
WHERE [email protected] AND [email protected]
),
缺考人數=(
SELECT COUNT(*) FROM Student
INNER JOIN Subject ON Subject.GradeId=Student.GradeId
WHERE SubjectName= @subjectName
) -
(
SELECT COUNT(*) FROM Result
WHERE [email protected] AND [email protected]
)
--統計考試通過情況,並將統計結果存放在新表TempResult中--
IF EXISTS(SELECT * FROM sysobjects WHERE name='TempResult')
DROP TABLE TempResult
SELECT Student.StudentName,Student.StudentNo,StudentResult,
IsPass=CASE
WHEN StudentResult>=60 THEN 1
ELSE 0
END
INTO TempResult
FROM Student LEFT JOIN (
SELECT * FROM Result WHERE [email protected] AND [email protected]
) R
ON Student.StudentNo=R.StudentNo
WHERE GradeId=(SELECT GradeId FROM Subject WHERE SubjectName= @subjectName)
SELECT * FROM TempResult
DECLARE @avg numeric(4,1)
SELECT @avg=AVG(StudentResult) FROM TempResult WHERE StudentResult IS NOT NULL
--判斷平均分是否低於60分。如果低於60分,設定平均分為60分
IF (@avg<60)
SET @avg=60
--迴圈加分,最高分不能超過97分
WHILE (1=1)
BEGIN
IF(NOT Exists(SELECT * FROM TempResult WHERE StudentResult<@avg))
BREAK
ELSE
UPDATE TempResult SET StudentResult=StudentResult+1
WHERE StudentResult<@avg AND StudentResult<97
END
--因為提分,所以需要更新IsPass(是否通過)列的資料
UPDATE TempResult
SET IsPass=CASE
WHEN StudentResult>=60 THEN 1
ELSE 0
END
SELECT * FROM newTable
--顯示考試最終通過情況
SELECT 姓名=StudentName,學號=StudentNo,
成績=CASE
WHEN StudentResult IS NULL THEN '缺考'
ELSE CONVERT(varchar(5),StudentResult)
END,
是否通過=CASE
WHEN isPass=1 THEN '是'
ELSE '否'
END
FROM TempResult
--顯示通過率及通過人數
SELECT 總人數=COUNT(*) ,通過人數=SUM(IsPass),
通過率=(CONVERT(varchar(5),AVG(IsPass*100))+'%') FROM TempResult
GO
//經典案例
--參加oop最近一次考試時間的最高分數和最低分數
select MAX(studentresult), MIN(studentresult) from Result
where ExamDate=
(
select MAX(ExamDate) from Result
where SubjectId=
(
select SubjectId from Subject where SubjectName='oop'
)
)
and SubjectId=
(
select SubjectId from Subject where SubjectName='oop'
)
----參加oop最近一次考試時間的學生姓名和學生編號
select studentno, studentname from Student
where StudentNo in
(
select StudentNo from result
where subjectid=
(
select subjectid from Subject where SubjectName='oop'
)
and ExamDate=
(
select MAX(ExamDate) from Result
where subjectid=
(
select subjectid from Subject where SubjectName='oop'
)
)
)
--案例:檢查“oop”課程最近一次考試。--如果有分以上的成績,則每人提分;
--否則,每人提分。最終的成績不得大於分
if exists(
select studentresult from Result
where subjectid=
(
select subjectid from Subject where SubjectName='oop'
)
and ExamDate=
(
select MAX(ExamDate) from Result
where subjectid=
(
select subjectid from Subject where SubjectName='oop'
)
)
and StudentResult>80
)
begin
update Result set StudentResult=100
where subjectid=
(
select subjectid from Subject where SubjectName='oop'
)
and ExamDate=
(
select MAX(ExamDate) from Result
where subjectid=
(
select subjectid from Subject where SubjectName='oop'
)
)
and StudentResult>98
update Result set StudentResult+=2
where subjectid=
(
select subjectid from Subject where SubjectName='oop'
)
and ExamDate=
(
select MAX(ExamDate) from Result
where subjectid=
(
select subjectid from Subject where SubjectName='oop'
)
)
and StudentResult<=98
end
else
begin
update Result set StudentResult+=5
where subjectid=
(
select subjectid from Subject where SubjectName='oop'
)
and ExamDate=
(
select MAX(ExamDate) from Result
where subjectid=
(
select subjectid from Subject where SubjectName='oop'
)
)
end
相關推薦
第四章高階查詢--上機題和經典案例
--上機題1 --參加oop最近一次考試時間的最高分數和最低分數 select MAX(studentresult), MIN(studentresult) from Result where ExamDate= ( select MAX(ExamDate) from Re
SQL高階 第四章 高階查詢
作業:------------------------------------------------------------------------ --關鍵字 " in " 返回多條記錄 select StudentName from student where L
《JavaScript高階程式設計》學習筆記(2)——第四章 變數、作用域和記憶體問題
基本型別和引用型別的值基本型別值指的是簡單的資料段,而引用型別值指那些可能由多個值構成的物件。區域性物件會在函式執行完畢後立即被銷燬。 檢測型別:instanceof操作符result = variable instanceof constructor如果變數是給定引用型別(
第四章——資料查詢基礎
第九章——資料查詢基礎 ********查詢******** select 列名1,列名2....from 表名 where 條件 ********別名******** 1)別名 = 列名 2)列名 as 別名 3)列名 別名 ******
作業系統 第四章 1 程式的裝入和連結
1、建立程序的第一件事:將程式和資料裝入記憶體。 2、程式進記憶體的一般過程: 編譯程式:( 高階語言編譯為機器語言)形成目標模組。 連結程式:將形成的一組目標模組,及它們需要的庫函式連結在一起,形成一個完整的裝入模組。 裝入load:由裝入程式將裝入
網路是怎樣連線的學習筆記-第四章-ADSL接入網的結構和工作方式(上)
4.1 ADSL 接入網的結構和工作方式 4.1.1 網際網路的基本結構和家庭、公司網路是相同的 我們可以將網際網路理解為家庭、公司網路的一個放大版。 網際網路也有一些和家庭、公司網路不同的地方,其中之一就是與轉發裝置間的距離。 二者的不同點 傳輸距離的不同 在家庭、公司網路中,與轉發裝置
網路是怎樣連線的學習筆記-第四章-ADSL接入網的結構和工作方式(下)
4.1.5 ADSL 通過使用多個波來提高速率 訊號不一定要限制在一個頻率,不同頻率的波可以合成,也可以用濾波器從合成的波中分離出某個特定頻率的波。即可以使用多個頻率合成的波來傳輸訊號,這樣能夠表示的位元數就可以成倍提高。 ADSL 通過多個波增加能表示的位元數來提高速率。具體為ADSL 使用間隔為 4.
網絡是怎樣連接的學習筆記-第四章-ADSL接入網的結構和工作方式(下)
並不會 外部 間隔 內部 並發 bubuko 隨著 過大 wid 4.1.5 ADSL 通過使用多個波來提高速率 信號不一定要限制在一個頻率,不同頻率的波可以合成,也可以用濾波器從合成的波中分離出某個特定頻率的波。即可以使用多個頻率合成的波來傳輸信號,這樣能夠表示的比特數就
20181212——第四章 變數、作用域和記憶體問題
基本型別和引用型別 基本型別指的是簡單的資料段,而引用型別指的是那些可能由多個值構成的物件 基本型別是按值訪問,因為可以操作儲存在變數中的值 引用型別的值是儲存在記憶體中物件,與其他語言不同,javascript不允許直接訪問記憶體中的位置,也就是說不能直接操作物件的記憶體空間,在操作物件的
Vulkan Cookbook 第四章 11 對映、更新和取消對映主機可見記憶體
對映、更新和取消對映主機可見記憶體 譯者注:示例程式碼點選此處 對於渲染期間使用的影象和緩衝區,建議繫結位於影象硬體(裝置本地記憶體)上的記憶體。這會產生最好的表現。但我們不能直接訪問這樣的記憶體,需要使用中間(暫存)資源來調節GPU(裝置)和CPU(主機)之間的資料傳輸。 另一方面,暫
Vulkan Cookbook 第四章 9 建立2D影象和檢視
建立2D影象和檢視 譯者注:示例程式碼點選此處 在許多流行的應用程式或遊戲中使用的最常見影象型別是具有RGBA四個組建和每個紋素32位的典型2D紋理。要在Vulkan中建立這樣的資源,我們需要建立一個2D影象和一個適合的影象檢視。 怎麼做... 1.獲取邏輯裝置控制代碼並使用它來初始
Vulkan Cookbook 第四章 6 分配記憶體物件和將其繫結到影象
分配記憶體物件和將其繫結到影象 譯者注:示例程式碼點選此處 與緩衝區類似,影象不是使用繫結的記憶體儲存建立的。我們需要隱式建立一個記憶體物件並將其繫結到影象。也可以使用現有記憶體來實現此目的。 譯者注:影象不是使用繫結的記憶體儲存建立的原文are not created with a b
Vulkan Cookbook 第四章 2 為緩衝區分配和繫結記憶體物件
為緩衝區分配和繫結記憶體物件 譯者注:示例程式碼點選此處 在Vulkan中緩衝區沒有自己的記憶體。為了能夠在我們的應用程式中使用緩衝區並在裡面儲存資料,需要分配一個記憶體物件並將其繫結都一個緩衝區。 怎麼做... 1.獲取建立邏輯裝置的物理裝置控制代碼。將其儲存在名為physical
第三章 高階查詢
1,查詢沒有借閱資訊的讀者編號和讀者姓名 SELECT rid'讀者編號',rname'讀者姓名' FROM reader r WHERE NOT EXISTS(SELECT nif FROM borrow WHERE r.rid=borrow.rid); 2,查詢未還書
第四章:FLASK結構拆分和循環引入問題
瀏覽器 調試 seve 大量 __init__ 目錄 什麽 info com 一,上節回顧: 1) flask 最小應用代碼。 from flask import Flask app = Flask(__name__) @app.route(‘/hello‘) d
UNIX環境高階程式設計——第四章-檔案和目錄
4.2 函式stat、fstat、lstat 1、函式原型: #include <sys/stat.h> int stat(const char *restrict pathname, struct stat *restrict buf);
SQL第九章資料查詢基礎上機題1-4
//查詢學生相關基本資訊 SELECT * FROM Student WHERE GradeId=1 SELECT StudentName,Phone FROM Student WHERE GradeId=2 SELECT StudentName+Phone FRO
第四章 PL/SQL塊 動態查詢語句和異常處理 練習題答案
動態執行SQL語句: 1、用PLSQL給emp新增dname列,然後更新這個列的資料; 異常和動態執行SQL部分: declare sql_stmt1 varchar2(200); –動態SQL語句 sql_stmt2 varchar2(200);
Java(第四章和第五章)
簡潔 重復 清晰 快速 結束 編寫 int() input 出現 第四章 一、 switch結構(開關語句)的語法 switch(表達式[dream1] ){ case 常量1[dream2] : //語句塊1
第四章第五章 環境搭建和24個命令總結
gpl和gun 基本命令 cpGUN 和 GPL GUN‘s not Unix 遞歸寫法,簡寫也是GUN1. GUN 是84年自由軟件資金會牽頭弄的一個類unix操作系統,但是因為它不實用,而且總是跳票,所以並沒有流行起來。2. 但是它裏面的很多軟件是很好的,比如bash,這些都被用在了linux系統