Oracle课表查询系统,Oracle SQL基础练习(一)(学生表-课程表-选课表)
一 使用CREATE TABLE語句和INSERT INTO語句創建表和插入數據。
student表
course表
sc表
二 操作數據庫
1.分別查詢學生表和學生修課表中的全部數據。
SELECT * FROM student;
SELECT * FROM course;
2.查詢成績在70到80分之間的學生的學號、課程號和成績。
SELECT sno,cno,grade FROM sc WHERE grade BETWEEN 70 AND 80;
3.查詢100號課程成績最高的分數。
SELECT MAX(grade) FROM sc WHERE cno = 100;
4.查詢學生都選修了哪些課程,要求列出課程號。
SELECT DISTINCT c.cno,cname FROM course c,sc WHERE c.cno = sc.cno;
SELECT DISTINCT c.cno,cname FROM course c INNER JOIN sc on c.cno = sc.cno;
5.查詢修了200號課程的所有學生的平均成績、最高成績和最低成績。
SELECT AVG(grade),MAX(grade),MIN(grade) FROM sc WHERE cno = 200;
6.統計每個系的學生人數。
SELECT sdept,count(*) FROM student GROUP BY sdept;
7.統計每門課程的修課人數和考試最高分。
SELECT cno,count(*),MAX(grade) FROM sc GROUP BY cno ORDER BY cno;
8.統計每個學生的選課門數,并按選課門數的遞增順序顯示結果。
SELECT sno,count(*) FROM sc GROUP BY sno ORDER BY count(*) ASC;
9.統計選修課的學生總數和考試的平均成績。
SELECT COUNT(DISTINCT sno) stu_count,AVG(grade) FROM sc;
10.查詢選課門數超過2門的學生的平均成績和選課門數。
SELECT AVG(grade),COUNT(*) FROM sc GROUP BY cno HAVING count(*)>2;
11.列出總成績超過200分的學生,要求列出學號、總成績。
SELECT sno,SUM(grade) FROM sc GROUP BY sno HAVING SUM(grade) > 200;
12.查詢選修了c02號課程的學生的姓名和所在系。
SELECT sname,sdept FROM student WHERE sno IN(SELECT sno FROM sc WHERE cno = 200);
13.查詢成績80分以上的學生的姓名、課程號和成績,并按成績的降序排列結果。
SELECT sname,cno,grade FROM student,(SELECT * FROM sc WHERE grade > 80) scc
WHERE student.sno = scc.sno ORDER BY scc.grade DESC;
SELECT sname,cno,grade FROM student INNER JOIN(SELECT * FROM sc WHERE grade > 80) scc
ON student.sno = scc.sno ORDER BY scc.grade DESC;
14.查詢計算機系男生修了"數據庫基礎"的學生的姓名、性別、成績。
SELECT sname,ssex,grade FROM student,(SELECT sno,grade FROM sc WHERE cno IN(SELECT cno FROM course WHERE cname = '高等數學')) newsc
WHERE student.sno = newsc.sno AND sdept = '計算機系' AND ssex = '男';
SELECT sname,ssex,grade FROM (SELECT sno,sname,ssex FROM student WHERE sdept = '計算機系' AND ssex = '男') newstu,
(SELECT sno,grade FROM sc WHERE cno IN(SELECT cno FROM course WHERE cname = '高等數學')) newsc
WHERE newstu.sno = newsc.sno;
15.查詢哪些課程沒有人選,要求列出課程號和課程名。
SELECT cname,cno FROM course WHERE cno NOT IN(SELECT cno FROM sc GROUP BY cno);
16.查詢有考試成績的所有學生的姓名、修課名稱及考試成績,要求將查詢結果放在一張新的永久表(假設新表名為new-sc)中。
CREATE TABLE new_sc AS
SELECT sname,cname,grade FROM course,student,(SELECT * FROM sc WHERE grade is not NULL) nsc WHERE
course.cno = nsc.cno AND student.sno = nsc.sno;
17.分別查詢信息系和計算機系的學生的姓名、性別、修課名稱、修課成績,并要求將這兩個查詢結果合并成一個結果集,并以系名、姓名、性別、修課名稱、修課成績的順序顯示各列。
SELECT sdept,sname,ssex,cname,grade FROM course,(SELECT * FROM sc,(SELECT * FROM student WHERE sdept = '計算機系') nsc WHERE
sc.sno = nsc.sno) sc_stu WHERE course.cno = sc_stu.cno
UNION
SELECT sdept,sname,ssex,cname,grade FROM course,(SELECT * FROM sc,(SELECT * FROM student WHERE sdept = '情報系') nsc WHERE
sc.sno = nsc.sno) sc_stu WHERE course.cno = sc_stu.cno;
18.用子查詢實現如下查詢:
(1) 查詢選修了100號課程的學生的姓名和所在系。
SELECT sname,sdept FROM student WHERE sno IN(SELECT sno FROM sc WHERE cno = 100);
(2) 查詢數學系成績80分以上的學生的學號、姓名。
SELECT sno,sname FROM student WHERE sno IN(SELECT sno FROM sc WHERE grade >80) AND sdept = '數學系';
(3) 查詢計算機系學生所選的課程名。
SELECT cname FROM course WHERE cno IN(SELECT cno FROM sc WHERE sno IN(SELECT sno FROM student WHERE sdept = '計算機系'));
19.將計算機系成績高于80分的學生的修課情況插入到另一張表中,分兩種情況實現:
(1) 在插入數據過程中建表。
CREATE TABLE sc_info1 AS
SELECT * FROM sc WHERE sno IN(SELECT sno FROM student WHERE sdept = '計算機系') AND grade > 80;
(2) 先建一個新表,然后再插入數據。 創建表SC_Info1 往表SC_info2插入查詢得到的結果
CREATE TABLE sc_info2(
sno NUMBER,
cno NUMBER,
grade NUMBER
);
INSERT INTO sc_info2(
SELECT * FROM sc WHERE sno IN(SELECT sno FROM student WHERE sdept = '計算機系') AND grade > 80
);
--下面這種方法更容易理解一些
INSERT INTO sc_info2(
sno,
cno,
grade
)
SELECT * FROM sc WHERE sno IN(SELECT sno FROM student WHERE sdept = '計算機系') AND grade > 80
;
20.刪除修課成績小于50分的學生的修課記錄。
DELETE FROM sc WHERE grade < 50;
21.將所有選修了'100'課程的學生的成績加10分。
UPDATE sc SET grade = grade+10 WHERE cno = 100;
三 附加題 1.
SELECT s1.storeno,s1.store_name
FROM store s1,
(SELECT storeno,MAX(start_date) AS start_date
FROM store
WHERE start_date <= TO_DATE('2016011','YYYYMMDD')
AND over_date >= TO_DATE('2016011','YYYYMMDD')
GROUP BY storeno) s2
WHERE s1.storeno = s2.storeno
AND s1.start_date = s2.start_date;
總結
以上是生活随笔為你收集整理的Oracle课表查询系统,Oracle SQL基础练习(一)(学生表-课程表-选课表)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL_day2笔记
- 下一篇: 爬虫_西电研究生教务系统_技术文档