第一范文网 - 专业文章范例文档资料分享平台

强化-SQL语句强化训练(史上最全最经典,呕血推荐) sql语句练习

来源:用户分享 时间:2025/6/15 23:24:08 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

SNAME char (10) NOT NULL , AGE SMALLINT , primary key(S#)

CHECK (AGE>=16 and AGE<=25)) (2)采用外键子句约束 CREAT TABLE SC( S# CHAR(4), C# CHAR(4),

GRADE SMALLINT,

FOREIGN key(S#) REFERENCE S(S#) FOREIGN key(C#) REFERENCE C(C#) (3)采用元组检查 CREAT TABLE SC( S# CHAR(4), C# CHAR(4),

GRADE SMALLINT,

FOREIGN key(S#) REFERENCE S(S#) FOREIGN key(C#) REFERENCE C(C#) CHECK (GRADE>=0 and AGE<=100)) (4)采用外键约束 CREAT TABLE SC( S# CHAR(4), C# CHAR(4),

GRADE SMALLINT,

FOREIGN key(S#) REFERENCE S(S#), FOREIGN key(C#) REFERENCE C(C#) )

注,在ON DELETE短语缺省的时候表示RESTRICT方式。 (5)采用外键约束 CREAT TABLE SC( S# CHAR(4), C# CHAR(4),

GRADE SMALLINT,

FOREIGN key(S#) REFERENCE S(S#) ON UPDATE CASCADE , FOREIGN key(C#) REFERENCE C(C#) )

2009/07

有一个教学数据库,包括三个关系模式: (1)学生S(S#,SNAME,AGE,SEX)

其属性的含义依次为学号、姓名、年龄、性别 (2)学习SC(S#,C#,GRADE)

其属性的含义依次为学号、课程号、成绩

(3)课程C(C#,CNAME,TEACHER)学生关系 其属性的含义依次为课程号、课程名、任课教师 根据以上3个关系模式用SQL语句完成36~39题。 36.检索选修课程包含LIU老师所授课的学生学号。 37.把低于总平均成绩的女同学成绩提高5%。

38.检索选修3门以上(含3门)课程学生的学号和姓名。 39.检索“王兰”同学不学的课程的课程号。

1. 检索选修课程包含LIU老师所授课的学生学号. SELECT S# FROM SC, C

WHERE SC.C#=C.C# AND TEACHER='LIU' ; 补充练习—续二

2. 把低于总平均成绩的女同学成绩提高5%. UPDATE SC

SET GRADE = GRADE * 1.05 WHERE GRADE=3 ) ; 补充练习—续四

4. 检索\王兰\同学不学的课程的课程号. SELECT DISTINCT C# FROM SC

WHERE C# NOT IN (SELECT C# FROM SC, S

WHERE SC.S#=S.S# AND SNAME='王兰');

1.以下各小题题基于教学数据库的三个基本表 学生 S(S#,SNAME,AGE,SEX) 学习 SC(S#,C#,GRADE)

课程 C(C#,CNAME,TEACHER)

1. 试用元组表达式和关系代数表达式表示下列查询语句:检索年龄小于23岁的男学生的学号和姓名。 关系代数表达式:πS#,SNAME(σAGE>'23'∧SEX='男'(S))

元组表达式:{t|(u)(S(u)∧u[3]>'23'∧u[4]='男'∧t[1]=u[1]∧t[2]=u[2])}

2. 试用SQL的查询语句表达下列查询: 检索\王兰\同学不学的课程的课程号。 SELECT C# FROM C

WHERE C# NOT IN (SELECT C# FROM SC WHERE S# IN (SELECT S# FROM S

WHERE SNAME='王兰'))

3. 试用SQL的查询语句表达下列查询: 检索全部学生都选修的课程的课程号与课程名。 SELECT C#,CNAME FROM C

WHERE NOT EXISTS (SELECT * FROM S

WHERE NOT EXISTS (SELECT * FROM SC

WHERE SC.S#=S.S# AND SC.C#=C.C#))

4. 试用SQL更新语句表达以下更新操作:把低于总平均成绩的女同学成绩提高5%。

UPDATE SC

SET GRADE=GRADE*1.05

WHERE GRADE<(SELECT AVG(GRADE) FROM SC) AND S# IN (SELECT S# FROM S WHERE SEX='F') 2.“仓库管理”关系模型有五个关系模式:

零件 PART(P#,PNAME,COLOR,WEIGHT) 项目 PROJECT(J#,JNAME,DATE)

供应商 SUPPLIER(S#,SNAME,SADDR) 供应 P_P(J#,P#,TOTOAL) 采购 P_S(P#,S#,QUANTITY)

(1)试用SQL DDL语句定义上述五个基本表,并说明主键和外键。 CREATE TABLE PART

(P# CHAR(4) NOT NULL,PNAME CHAR(12) NOT NULL, COLOR CHAR(10),WEIGHT REAL, PRIMARY KEY(P#))

CREATE TABLE PROJECT

(J# CHAR(4) NOT NULL,JNAME CHAR(12) NOT NULL, DATE DATE,

PRIMARY KEY(J#))

CREATE TABLE SUPLIER

(S# CHAR(4) NOT NULL,SNAME CHAR(12),SADDR VARCHAR(20), PRIMARY KEY(S#))

CREATE TABLE P_P

(J# CHAR(4),P# CHAR(4),TOTAL INTEGER, PRIMARY KEY(J#,P#),

FOREIGN KEY(J#) REFERENCE PROJECT(J#), FOREIGN KEY(P#) REFERENCE PART(P#))

CREATE TABLE P_S

(P# CHAR(4),S# CHAR(4),QUANTITY INTEGER, PRIMARY KEY(P#,S#),

FOREIGN KEY(P#) REFERENCE PART(P#), FOREIGN KEY(S#) REFERENCE SUPLIER(S#))

Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题:

1、查询“001”课程比“002”课程成绩高的所有学生的学号;

select a.S# from (select s#,score from SC where C#='001') a,(selects#,score from SC where C#='002') b where a.score>b.score and a.s#=b.s#;

2、查询平均成绩大于60分的同学的学号和平均成绩;

select S#,avg(score) from sc

group by S# having avg(score) >60;

3、查询所有同学的学号、姓名、选课数、总成绩; select Student.S#,Student.Sname,count(SC.C#),sum(score) from Student left Outer join SC on Student.S#=SC.S# group by Student.S#,Sname 4、查询姓“李”的老师的个数; select count(distinct(Tname)) from Teacher

where Tname like '李%';

5、查询没学过“叶平”老师课的同学的学号、姓名; select Student.S#,Student.Sname from Student

where S# not in (select distinct( SC.S#) fromSC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# andTeacher.Tname='叶平');

6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;

select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S#and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# andSC_2.C#='002');

7、查询学过“叶平”老师所教的所有课的同学的学号、姓名; select S#,Sname from Student

where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C#andTeacher.T#=Course.T# and Teacher.Tname='叶平' groupby S# having count(SC.C#)=(select count(C#) from Course,Teacher whereTeacher.T#=Course.T# and Tname='叶平')); 8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;

Select S#,Sname from (select Student.S#,Student.Sname,score ,(selectscore from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2

from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2

where S# not in (select Student.S# from Student,SC where S.S#=SC.S# andscore>60); 10、查询没有学全所有课的同学的学号、姓名; select Student.S#,Student.Sname from Student,SC

where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course); 11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;

select S#,Sname from Student,SC where Student.S#=SC.S# andC# in select C# from SC where S#='1001'; 12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名; select distinct SC.S#,Sname from Student,SC

where Student.S#=SC.S# and C# in (select C# from SC whereS#='001'); 13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩; update SC set score=(select avg(SC_2.score) from SC SC_2

where SC_2.C#=SC.C# ) from Course,TeacherwhereCourse.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平'); 14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名; select S# from SC where C# in (select C# from SC whereS#='1002') group by S# having count(*)=(select count(*) from SC whereS#='1002');

强化-SQL语句强化训练(史上最全最经典,呕血推荐) sql语句练习.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c24lc83kv8j2teb88imw4_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top