1. 程式人生 > >第四章高階查詢--上機題和經典案例

第四章高階查詢--上機題和經典案例

--上機題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系統