pl/sql練習1
阿新 • • 發佈:2018-12-25
--建立學生表
CREATE TABLE tb_Student(
ID number PRIMARY KEY, --學生編號
NAME VARCHAR2(20) NOT NULL,--學生姓名
Sex VARCHAR2(2) CHECK(Sex IN('男','女')) , --學生性別
Age number, --學生年齡
Address VARCHAR2(50) , --學生地址
Tel VARCHAR2(30), --學生電話
Email VARCHAR2(30)--學生郵箱
) ;
--插入學生表資料
INSERT INTO tb_Student
VALUES
(1,'小強','男',20,'湖南省長沙市伍家嶺江南苑9棟203號','0731-4230123','[email protected]');
INSERT INTO tb_Student
VALUES
(2,'李雲','女',19,'湖南省長沙市東風路東風新村21棟502號','0731-4145268','[email protected]');
INSERT INTO tb_Student
VALUES
(3,'魯智深' ,'男',30,'湖南省株洲市601廠宿舍15棟308號','0732-8342567',NULL);
INSERT INTO tb_Student
VALUES
(4,'張飛','男',28,'湖南省郴洲市人民醫院20棟301號','0735-2245214',NULL);
INSERT INTO tb_Student
VALUES
(5,'翠花','女',21,'湖南省長沙市望月湖12棟403號','0731-8325124','[email protected]');
--建立考試表
CREATE TABLE tb_Exam
(
ID number , --學生編號
NAME VARCHAR2(20) NOT NULL, --課程名稱
Score number CHECK(Score BETWEEN 0 AND 100), --考試分數
exam_date DATE, --考試時間
PRIMARY KEY(ID,NAME), --學生編號和課程名稱做聯合主鍵
CONSTRAINT tb_exam_fk FOREIGN KEY (id) REFERENCES tb_Student(id)
);
--插入資料
INSERT INTO tb_Exam VALUES(1,'C語言',78,to_date('2004-06-10','yyyy-mm-dd'));
INSERT INTO tb_Exam VALUES(2,'C語言',90,to_date('2004-06-10','yyyy-mm-dd'));
INSERT INTO tb_Exam VALUES(3,'C語言',0,NULL);
INSERT INTO tb_Exam VALUES(3,'VB',35,to_date('2004-07-16','yyyy-mm-dd'));
INSERT INTO tb_Exam VALUES(4,'VB',35,to_date('2004-07-16','yyyy-mm-dd'));
INSERT INTO tb_Exam VALUES(5,'VB',85,to_date('2004-07-16','yyyy-mm-dd'));
INSERT INTO tb_Exam VALUES(2,'網頁程式設計',85,to_date('2004-08-20','yyyy-mm-dd'));
INSERT INTO tb_Exam VALUES(3,'網頁程式設計',85,NULL);
--1.查詢小強的詳細資訊
select * from tb_Student where name='小強';
--2.查詢20歲以上的所有男同學的資訊
select * from tb_Student where sex='男' and age>20;
--3.按年齡降序顯示學生的資訊
select * from tb_Student order by age desc;
--4.按學生ID升序顯示學生的ID,姓名,性別,課程,分數
select s.id,s.name,s.sex,e.name classname,e.score
from tb_Student s,tb_Exam e
where s.id=e.id;
--5.按學生分數降序顯示學生的ID,姓名,性別,課程,分數
select s.id,s.name,s.sex,e.name classnamename,e.score
from tb_Student s,tb_Exam e
where s.id=e.id
order by e.score desc;
--7.查詢所有學生的資訊
select * from tb_Student;
--8.顯示成績表的前4條資訊
select * from tb_Exam where rownum<=4;
--10.列出所有考試分數的一個總和
select sum(score) from tb_Exam;
--11.列出魯智深的成績總和
select sum(e.score) from Tb_Student s,tb_Exam e
where s.name='魯智深' and s.id=e.id;
--12.列出C語言考試的平均分
select avg(score) from tb_Exam where name='C語言';
--14.列出李雲參加了幾次考試
select count(1)
from tb_Student s,tb_Exam e
where s.id=e.id and s.name='李雲';
--15.列出學生中最大的年齡
select max(age)
from tb_Student s,tb_Exam e
where s.id=e.id;
--16.列出C語言最高的分數
select max(score)
from tb_Student s,tb_Exam e
where s.id=e.id and e.name='C語言';
--17.列出每種考試的考試名稱和成績總和
select name,sum(score)
from tb_Exam
group by name;
--18.列出每個學生的姓名和考試次數
select s.name,count(*)
from tb_Student s,tb_Exam e
where s.id=e.id
group by s.name;
--19.列出每個學生的姓名和考試次數,小於2次的不顯示
select s.name,count(*)
from tb_Student s,tb_Exam e
where s.id=e.id
group by s.name
having count(*)>=2;
--20.顯示年齡在20到25歲之間的學生資訊
select * from tb_Student where age between 20 and 25;