--首先查看“水浒”这本书的编号
select bno from books where bname ='水浒' --到borrow表中看哪些卡号借了号这本书 select cno from borrow where bno=(select bno from books where bname ='水浒');
4.查询过期未还图书,输出借阅者(卡号)、书号及还书日期。 --5.查询书名包括\网络\关键词的图书,输出书号、书名、作者。 select bno,bname,author from books
where bname like '%网络%'
-- 6.查询现有图书中价格最高的图书,输出书名及作者。 select bname,author from books
where price in (select max(price) from books)
-- 7.查询当前借了\计算方法\但没有借\计算方法习题集\的读者,输出其借书卡号,
--并按卡号降序排序输出。 Card(cno,name,class)
Books(bno,bname,author,price,quantity) Borrow(cno,bno,rdate) select cno from borrow
where bno =(select bno from books where bname='c' )
select cno from borrow
where bno in ( select bno from books where bname='水浒' )
order by cno desc
--自身连接查询
select * from borrow; select * from borrow;
--查询既接了号书又借了号书的卡号 select b1.cno
from borrow b1,borrow b2 where b1.cno = b2.cno and b1.bno = ( select bno from books where bname='水浒' ) and b2.bno =(select bno from books where bname='c' )
--b1.cno = b2.cno 表示同一个人
select distinct t.bcno from
(select b2.cno bcno,b1.bno,b1.rdate from borrow b1,borrow b2
where b1.cno = b2.cno and b1.bno <> 7 and b2.bno = 1 and b1.cno not in (
select b1.cno
from borrow b1,borrow b2
where b1.cno = b2.cno and b1.bno = 7 and b2.bno = 1 ))t
--查看计算方法这本书的编号
select bno from books where bname='SQL' --查看计算方法习题集这本书的编号
select bno from books where bname='网络技术'
-- 8.将\班同学所借图书的还期都延长一周。
update borrow set rdate=dateadd(dd,7,rdate);
-- 9.从BOOKS表中删除当前无人借阅的图书记录。 --首先:查看有哪些书已经被借了 select distinct bno from borrow
--再去删除
delete from books where bno not in (select distinct bno from borrow )
10.如果经常按书名查询图书信息,请建立合适的索引。
11.在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是\数据库技术及应用\,就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)。
12.建立一个视图,显示\力\班学生的借书信息(只要求显示姓名和书名)。 -- 13.查询当前同时借有\计算方法\和\组合数学\两本书的读者,输出其借书卡号,
--并按卡号升序排序输出。 select b1.cno
from borrow b1,borrow b2 where b1.cno = b2.cno and b1.bno = ( select bno from books where bname='计算方法' )
and b2.bno =(select bno from books where bname='组合数学
' )
-- 14.假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句。 alter table borrow
add constraint PK_borrow_cno_bno primary key(cno,bno); -- 15.对CARD表做如下修改:
-- a. 将NAME最大列宽增加到个字符(假定原为个字符)。 alter table card
alter column cname varchar(10) not null
-- b. 为该表增加列NAME(系名),可变长,最大个字符。 alter table card
add DeptName varchar(20)
复制代码执行,创建好表,然后往里面插入数据,完成下面个题目: CREATE TABLE STUDENT (
SNO VARCHAR(3) NOT NULL, --学号 SNAME VARCHAR(4) NOT NULL,--姓名 SSEX VARCHAR(2) NOT NULL, --性别 SBIRTHDAY DATETIME,--出生日期 CLASS VARCHAR(5)--班级 ) go
CREATE TABLE COURSE (
CNO VARCHAR(5) NOT NULL, --课程号 CNAME VARCHAR(10) NOT NULL, --课程名 TNO VARCHAR(10) NOT NULL --教师编号 ) go
CREATE TABLE SCORE (
SNO VARCHAR(3) NOT NULL, --学号 CNO VARCHAR(5) NOT NULL, --课程号
DEGREE NUMERIC(10, 1) NOT NULL --成绩 ) go
CREATE TABLE TEACHER (
TNO VARCHAR(3) NOT NULL, --教师编号
TNAME VARCHAR(4) NOT NULL, TSEX VARCHAR(2) NOT NULL, --教师姓名
TBIRTHDAY DATETIME NOT NULL, PROF VARCHAR(6), --出生日期 DEPART VARCHAR(10) NOT NULL --系部名称
)
--测试数据
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (108 ,'曾华' ,'男' ,1977-09-01,95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (105 ,'匡明' ,'男' ,1975-10-02,95031);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (107 ,'王丽' ,'女' ,1976-01-23,95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (101 ,'李军' ,'男' ,1976-02-20,95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (109 ,'王芳' ,'女' ,1975-02-10,95031);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (103 ,'陆君' ,'男' ,1974-06-03,95031); GO
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-105' ,'计算机导论',825)
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-245' ,'操作系统' ,804); INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('6-166' ,'数据电路' ,856); INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('9-888' ,'高等数学' ,100); GO
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-245',86); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-245',75); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-245',68); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-105',92); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-105',88); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-105',76); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'3-105',64); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'3-105',91); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'3-105',78); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'6-166',85); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'6-106',79); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'6-166',81); GO
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (804,'李诚','男','1958-12-02','副教授','计算机系'); INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (856,'张旭','男','1969-03-12','讲师','电子工程系'); INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (825,'王萍','女','1972-05-05','助教','计算机系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (831,'刘冰','女','1977-08-14','助教','电子工程系');
练习题目
1、查询Student表中的所有记录的Sname、Ssex和Class列。 2、查询教师所有的单位即不重复的Depart列。 3、查询Student表的所有记录。
4、查询Score表中成绩在到之间的所有记录。 5、查询Score表中成绩为,或的记录。
6、查询Student表中\班或性别为\女\的同学记录。 7、以Class降序查询Student表的所有记录。
8、以Cno升序、Degree降序查询Score表的所有记录。 9、查询\班的学生人数。
10、查询Score表中的最高分的学生学号和课程号。 11、查询'3-105'号课程的平均分。
12、查询Score表中至少有名学生选修的并以开头的课程的平均分数。 13、查询最低分大于,最高分小于的Sno列。 14、查询所有学生的Sname、Cno和Degree列。 15、查询所有学生的Sno、Cname和Degree列。 16、查询所有学生的Sname、Cname和Degree列。 17、查询\班所选课程的平均分。 18、假设使用如下命令建立了一个grade表:
create table grade(low float,upp float,rank char(1)); insert into grade values(90,100,'A'); insert into grade values(80,89,'B'); insert into grade values(70,79,'C'); insert into grade values(60,69,'D'); insert into grade values(0,59,'E'); commit;
现查询所有同学的Sno、Cno和rank列。
19、查询选修\课程的成绩高于\号同学成绩的所有同学的记录。 20、查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。 21、查询成绩高于学号为\、课程号为\的成绩的所有记录。
22、查询和学号为的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 23、查询\张旭\教师任课的学生成绩。
24、查询选修某课程的同学人数多于人的教师姓名。 25、查询班和班全体学生的记录。
26、查询存在有分以上成绩的课程Cno.
27、查询出\计算机系\教师所教课程的成绩表。
28、查询\计算机系\与\电子工程系\不同职称的教师的Tname和Prof。
29、查询选修编号为\课程且成绩至少高于选修编号为\的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
30、查询选修编号为\且成绩高于选修编号为\课程的同学的Cno、Sno和Degree.
31、查询所有教师和同学的name、sex和birthday.
32、查询所有\女\教师和\女\同学的name、sex和birthday. 33、查询成绩比该课程平均成绩低的同学的成绩表。
34、查询所有任课教师的Tname和Depart.
35 查询所有未讲课的教师的Tname和Depart. 36、查询至少有名男生的班号。
37、查询Student表中不姓\王\的同学记录。 38、查询Student表中每个学生的姓名和年龄。
39、查询Student表中最大和最小的Sbirthday日期值。
40、以班号和年龄从大到小的顺序查询Student表中的全部记录。 41、查询\男\教师及其所上的课程。
42、查询最高分同学的Sno、Cno和Degree列。 43、查询和\李军\同性别的所有同学的Sname. 44、查询和\李军\同性别并同班的同学Sname.
45、查询所有选修\计算机导论\课程的\男\同学的成绩表 学生选课练习 已知关系模式:
S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名
C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩
首先根据上面的关系模式,创建好数据库表,往数据库表中插入一些测试记录。 然后实现下面的操作,要求实现如下个处理:
1.找出没有选修过“李明”老师讲授课程的所有学生姓名;
2.列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩; 3.列出既学过“1”号课程,又学过“2”号课程的所有学生姓名; 4.列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号;
5.列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩;