EXISTS和 NOT EXISTS 子查詢 (高級查詢 二)


子查詢:嵌入到另一個查詢語句之中的查詢語句

子查詢注意事項:

1.子查詢可以嵌套在sql語句中任何表達式出現的位置

2.只出現在子查詢中沒有出現在父查詢中的表不能包含在輸出列中

 

-----學生表
DROP TABLE IF EXISTS student;
CREATE TABLE `student`(
`studentNo` INT(4) NOT NULL COMMENT '學號',
`loginPwd` VARCHAR(20) NOT NULL COMMENT '密碼',
`studentName` VARCHAR(50) NOT NULL COMMENT '學生姓名',
`sex` CHAR(2) DEFAULT '男' NOT NULL COMMENT '性別',
`gradeId` INT(4) UNSIGNED COMMENT '年級編號',
`phone` VARCHAR(50) COMMENT '聯系電話',
`address` VARCHAR(255) COMMENT '地址',
`bornDate` DATETIME COMMENT '出生時間',
`email` VARCHAR(50) COMMENT'郵件賬號',
identityCard VARCHAR(18) COMMENT'身份證號碼',
PRIMARY KEY(`studentNo`)
);

-----年級表
DROP TABLE IF EXISTS grade;
CREATE TABLE `grade`(
gradeID INT(4) NOT NULL COMMENT '年級編號',
gradeName VARCHAR(50) NOT NULL COMMENT'年級名稱'
);

-----科目表
DROP TABLE IF EXISTS subject;
CREATE TABLE `subject`(
subjectNo INT(4) NOT NULL COMMENT '課程編號' PRIMARY KEY, #主鍵標識列 自增1
subjectName VARCHAR(50) COMMENT '課程名稱',
classHour INT(4) COMMENT '學時',
gradeID INT(4) COMMENT '年級編號'

);

-----成績表
DROP TABLE IF EXISTS result;
CREATE TABLE `result`(
`studentNo` INT(4) NOT NULL COMMENT '學號',
`subjectNo` INT(4) NOT NULL COMMENT '課程編號',
`examDate` DATETIME NOT NULL COMMENT '考試日期',
`studentResult` INT(4) NOT NULL COMMENT '考試成績'
);

-----插入年級表
INSERT INTO `grade` VALUES ('1', 'S1');
INSERT INTO `grade` VALUES ('2', 'S2');
INSERT INTO `grade` VALUES ('3', 'Y2');

-----插入成績表
INSERT INTO `result` VALUES ('10000', '1', '2016-02-15 00:00:00', '71');
INSERT INTO `result` VALUES ('10000', '1', '2016-02-17 00:00:00', '60');
INSERT INTO `result` VALUES ('10001', '1', '2016-02-17 00:00:00', '46');
INSERT INTO `result` VALUES ('10002', '1', '2016-02-17 00:00:00', '83');
INSERT INTO `result` VALUES ('10003', '1', '2016-02-17 00:00:00', '60');
INSERT INTO `result` VALUES ('10004', '1', '2016-02-17 00:00:00', '60');
INSERT INTO `result` VALUES ('10005', '1', '2016-02-17 00:00:00', '95');
INSERT INTO `result` VALUES ('10006', '1', '2016-02-17 00:00:00', '93');
INSERT INTO `result` VALUES ('10007', '1', '2016-02-17 00:00:00', '23');

----插入學生表

INSERT INTO `student` VALUES ('10000', '123', '郭靖', '男', '1', '13645667783', '天津市河西區', '1990-09-08 00:00:00', null, null);
INSERT INTO `student` VALUES ('10001', '123', '李文才', '男', '1', '13645667890', '地址不詳', '1994-04-12 00:00:00', null, null);
INSERT INTO `student` VALUES ('10002', '123', '李斯文', '男', '1', '13645556793', '河南洛陽', '1993-07-23 00:00:00', null, null);
INSERT INTO `student` VALUES ('10003', '123', '張萍', '女', '1', '13642345112', '地址不詳', '1995-06-10 00:00:00', null, null);
INSERT INTO `student` VALUES ('10004', '123', '韓秋潔', '女', '1', '13812344566', '北京市海淀區', '1995-07-15 00:00:00', null, null);
INSERT INTO `student` VALUES ('10005', '123', '張秋麗', '女', '1', '13567893246', '北京市東城區', '1994-01-17 00:00:00', null, null);
INSERT INTO `student` VALUES ('10006', '123', '肖梅', '女', '1', '13563456721', '河北省石家庄市', '1991-02-17 00:00:00', null, null);
INSERT INTO `student` VALUES ('10007', '123', '秦洋', '男', '1', '13056434411', '上海市盧灣區', '1992-04-18 00:00:00', null, null);
INSERT INTO `student` VALUES ('10008', '123', '何晴晴', '女', '1', '13053445221', '廣州市天河區', '1997-07-23 00:00:00', null, null);
INSERT INTO `student` VALUES ('20000', '123', '王寶寶', '女', '2', '13318877954', '地址不詳', '1995-09-10 00:00:00', null, null);
INSERT INTO `student` VALUES ('20010', '123', '何小華', '女', '2', '13318877954', '地址不詳', '1995-09-10 00:00:00', null, null);
INSERT INTO `student` VALUES ('30011', '123', '陳志強', '女', '3', '13689965430', '地址不詳', '1994-09-27 00:00:00', null, null);
INSERT INTO `student` VALUES ('30012', '123', '李露露', '女', '3', '13685678854', '地址不詳', '1992-09-27 00:00:00', null, null);

-----插入科目表
INSERT INTO `subject` VALUES ('1', 'Logic Java', '220', '1');
INSERT INTO `subject` VALUES ('2', 'HTML', '160', '1');
INSERT INTO `subject` VALUES ('3', 'Java OOP', '230', '2');

 

-------------------------------檢查Logic Java 課程最近一次考試 。如果成績達到80分
--------------------------------以上者,則顯示分數排在前5,名學員和分數
#1.獲取Logic java 課程編號
SELECT subjectNo FROM `subject` WHERE subjectName="Logic Java";


#2.獲取ogic Java最近一次考試日期
SELECT MAX(examDate) FROM result WHERE subjectNo=(
SELECT subjectNo FROM `subject` WHERE subjectName="Logic Java");

#3.找到考試達到80分的記錄
SELECT subjectNo,studentResult
FROM result
WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName ='Logic Java')
AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(
SELECT subjectNo FROM `subject` WHERE subjectName="Logic Java"))
AND studentResult >80

 

#4.顯示Logic Java最近一次考試前5名的學生信息
SELECT subjectNo,studentResult
FROM result
WHERE EXISTS(
SELECT subjectNo,studentResult
FROM result
WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName ='Logic Java')
AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(
SELECT subjectNo FROM `subject` WHERE subjectName="Logic Java"))
AND studentResult >80
)
AND subjectNo =(SELECT subjectNo FROM `subject` WHERE subjectName="Logic Java")
AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(
SELECT subjectNo FROM `subject` WHERE subjectName="Logic Java"))
ORDER BY studentResult DESC
LIMIT 5;

 

-------------------------------檢查Logic Java 課程最近一次考試 。如果全部成績未通過考試
--------------------------------(60分及格),認為本次考試偏難,計算的該次考試平均分加5分

#1.找到考試達到60分的記錄
SELECT subjectNo,studentResult
FROM result
WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName ='Logic Java')
AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(
SELECT subjectNo FROM `subject` WHERE subjectName="Logic Java"))
AND studentResult >=60

 

#2.計算平均分加5分
SELECT AVG(studentResult)+5 AS 平均分
FROM result
WHERE NOT EXISTS(
SELECT subjectNo,studentResult
FROM result
WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName ='Logic Java')
AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(
SELECT subjectNo FROM `subject` WHERE subjectName="Logic Java"))
AND studentResult >=60
)
AND subjectNo =(SELECT subjectNo FROM `subject` WHERE subjectName="Logic Java")
AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(
SELECT subjectNo FROM `subject` WHERE subjectName="Logic Java"));


-----。。。。。。
UPDATE result SET studentResult=50 WHERE subjectNo=1 AND examDate='2016-02-17'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM