文档库 最新最全的文档下载
当前位置:文档库 › SQL语句习题11

SQL语句习题11

SQL语句习题11
SQL语句习题11

设某商业集团关于商店销售商品的数据库中有三个基本表:

商店SHOP(S#,SNAME,AREA,MGR_NAME)

其属性是商店编号,商店名称,区域名,经理姓名。

销售SALE(S#,G#, QUANTITY)

其属性是商店编号,商品编号,销售数量。

商品GOODS(G#,GNAME,PRICE)

其属性是商品编号,商品名称,单价。

36.试写出下列查询的关系代数表达式、元组表达式和关系逻辑规则:检索销售“冰箱”的商店的编号和商店名称。

37.试写出上面第36题的SELECT语句表达形式。并写出该查询的图示形式。38.试写出下列操作的SQL语句:

从SALE表中,把“开开商店”中销售单价高于1000元的商品的销售元组全部删除。

39.写一个断言,要求区域名为“EAST”的商店里销售商品的单价不能低于100元。

40.试写出下列操作的SQL语句:

统计区域名为“EAST”的所有商店销售的每一种商品的总数量和总价值。

要求显示(G#,GNAME,SUM_QUANTITY,SUM_VALUE),其属性为商品编号、商品名称、销售数量、销售价值。

37.解:SELECT语句如下:

SELECT A.S#,SNAME

FROM SHOP A,SALE B,GOODS C

WHERE A.S#=B.S# AND B.G#=C.G# AND GNAME='冰箱';

该查询语句的图示形式如下:

SHOP S# SNAME AREA MGR_NAME

P._X P.

SALE S# G# QUANTITY GOODS G# GNAME PRICE _X _Y _Y 冰箱

38.解:DELETE FROM SALE

WHERE S# IN(SELECT S#

FROM SHOP

WHERE SNAME='开开商店')

AND G# IN(SELECT G#

FROM GOODS

WHERE PRICE>1000);

39.解:CREATE ASSERTION ASSE8 CHECK

(100<=ALL(SELECT PRICE

FROM SHOP A,SALE B,GOODS C

WHERE A.S#=B.S# AND B.G#=C.G# AND AREA='EAST'));

或 CREATE ASSERTION ASSE8 CHECK

(NOT EXISTS(SELECT *

FROM SHOP A,SALE B,GOODS C

WHERE A.S#=B.S# AND B.G#=C.G#

AND AREA='EAST' AND PRICE<100));

40.解:SELECT C.G#,GNAME,SUM(QUANTITY)AS SUM_QUANTITY,

PRICE*SUM(QUANTITY)AS SUM_VALUE

FROM SHOP A,SALE B,GOODS C

WHERE A.S#=B.S# AND B.G#=C.G# AND AREA='EAST'

GROUP BY C.G#,GNAME;

(注:SELECT子句中的属性C.G#,GNAME应在分组子句中出现)

36.设数据库中有两个基本表:

职工表 EMP(E#,ENAME,AGE,SALARY,D#),

其属性分别表示职工工号、姓名、年龄、工资和工作部门的编号。

部门表 DEPT(D#,DNAME,MGR#),

其属性分别表示部门编号、部门名称和部门经理的职工工号。

试指出每个表的主键和外键。并写出每个表创建语句中的外键子句。37.在第36题的两个基本表中,写出下列查询的关系代数表达式和SQL语句:

检索每个部门经理的工资,要求显示其部门编号、部门名称、经理工号、经理姓名和经理工资。

36.答:EMP表的主键为E#,外键为D#。

DEPT表的主键为D#,外键为MGR#

在EMP表的创建语句中,可写一个外键子句:

FOREIGN KEY D# REFERENCES DEPT(D#);

在DEPT表的创建语句中,可写一个外键子句:

FOREIGN KEY MGR# REFERENCES EMP(E#);

(DEPT ? EMP)

37.答:关系表达式为:π

DEPT.D#,DNAME,MGR#,ENAME,SALARY

SELECT语句为:

MGR#=E#

SELECT DEPT.D#,DNAME,MGR#,ENAME,SALARY

FROM DEPT,EMP

WHERE MGR#=E#;

31.设某商业集团为仓库存储商品设计了三个基本表:

仓库STORE(S#,SNAME,SADDR),其属性是仓库编号、仓库名称和地址。

存储SG(S#,G#,QUANTITY),其属性是仓库编号、商品编号和数量。

商品GOODS(G#,GNAME,PRICE),其属性是商品编号、商品名称和单价

现检索仓库名称为“莘庄”的仓库里存储的商品的编号和名称。试写出相应的关系代数表达式、元组表达式、关系逻辑规则和SELECT语句。32.在第31题的基本表中,检索存储全部种类商品的仓库的编号及名称。试写出相应的关系代数表达式、元组表达式、关系逻辑规则和SELECT语句。33.在第31题的基本表中,检索每个仓库存储商品的总价值。试写出相应的SELECT语句。要求显示(S#,SUM_V ALUE),其属性为仓库编号及该库存储商品的总价值。

34.在第31题的基本表中,写一个断言,规定每个仓库存储商品的单价为1万元以上的商品种类最多为20种。

31.解:关系代数表达式为:π

G#,GNAME (σ

SNAME= '莘庄'

(STORE?SG?GOODS))

元组表达式为:{ t | (?u) (?v) (?w) (GOODS(u)∧SG(v)∧STORE(w)

∧u[1]=v[2]∧v[1]=w[1]∧w[2]='莘庄'∧t[1]=u[1]∧t[2]=u[2])}

关系逻辑规则如下:

W(x,y)←GOODS(x,y,a)∧SG(b,x,c)∧STORE(b,'莘庄',d)

SELECT语句为:

SELECT A.G#,GNAME

FROM GOODS AS A,SG AS B,STORE AS C

WHERE A.G#=B.G# AND B.S#=C.S# AND SNAME='莘庄';32.解:关系代数表达式为:

π

S#,SNAME (STORE?(π

S#,G#

(SG)÷π

G#

(GOODS)))

元组表达式为:

{ t | (?u) (?v) (?w) (STORE(u) ∧ GOODS(v)∧ SG(w) ∧ w[1]=u[1]

∧ w[2]=v[1] ∧ t[1]=u[1] ∧ t[2]=u[2])} 关系逻辑规则如下:

W(x,y)← STORE(x,y,a)∧┐GOODS(b,c,d)∧┐SG(x,b,e)SELECT语句为:

SELECT S#,SNAME

FROM STORE

WHERE NOT EXISTS

(SELECT *

FROM GOODS

WHERE NOT EXISTS

(SELECT *

FROM SG

WHERE SG.S#=STORE.S#

AND SG.G#=GOODS.G#));

33.解:SELECT语句为:

SELECT S#,SUM(QUANTITY *PRICE)AS SUM_VALUE

FROM SG,GOODS

WHERE SG.G#=GOODS.G#

GROUP BY S#;

34.解:CREATE ASSERTION ASSE6 CHECK

(20>=ALL(SELECT COUNT(SG.G#)

FROM SG,GOODS

WHERE SG.G#=GOODS.G# AND PRICE>10000

GROUP BY S#));

现有关系数据库如下:

部门(部门编号,部门名称,电话)

员工(员工编号,姓名,性别,部门编号,职务)

项目(项目编号,项目名称,预算)

施工(员工编号,项目编号,工时)

用关系代数表达式实现下列1—2小题:

1.检索“王小毛”的员工的部门编号和职务;

2.检索工时超过100小时的项目名称和员工的姓名;

用SQL语言实现下列3—7小题:

3.查询每个员工的姓名,并按职称降序排列;

4.查询总工时在480小时以上(含480小时)的员工编号和总工时;

5.检索职称为“高级工程师”,同时至少参加了一预算在100万以上的项目的员工的姓名和部门名称;

6.定义一个工作量视图,包含的属性有员工编号、姓名、项目名称和工时。7.对项目名称为“高教新区项目”的施工工时增加50小时;

1.π

部门编号,职务 (σ

姓名=‘王小毛’

(员工))

2. π

项目名称,姓名(σ

工时)100

(施工)项目员工))

3.SELECT 姓名 FROM 员工 ORDER BY 职称 DESC

4.SELECT 员工编号,SUM(工时) FROM 施工

GROUP BY 员工编号 HAVING SUM(工时)>=480

5. SELECT 姓名,部门名称

FROM 员工,部门,项目,施工

WHERE 部门.部门编号=员工.部门编号 AND 员工.员工编号=施工.员工编号

AND 施工.项目编号=项目.项目编号 AND 职称=‘高级工程师’ AND 预算>1000000

6. CREATE VIEW 工作量( 员工编号,姓名,项目名称,工时)

AS SELECT员工.员工编号,姓名,项目名称,工时

FROM 员工,项目,施工

WHERE员工.员工编号=施工.员工编号AND 施工.项目编号=项目.项目编号

7.UPDATE 施工SET 工时=工时+50 WHERE 项目编号 IN

(SELECT 项目编号FROM 项目WHERE 项目名称=‘高教新区项目’)

37. 图书出版管理数据库中有两个基本表:

图书(书号,书名,作者编号,出版社,出版日期)

作者(作者编号,作者名,年龄,地址)

试用SQL语句写出下列查询:检索年龄低于作者平均年龄的所有作者的作者名、书名和出版社。

39. 学校有多名学生,财务处每年要收一次学费。为财务处收学费工作设计一个数据库,包括两个关系:

学生(学号,姓名,专业,入学日期)

收费(学年,学号,学费,书费,总金额)

假设规定属性的类型:学费、书费、总金额为数值型数据;学号、姓名、学年、专业为字符型数据;入学日期为日期型数据。列的宽度自定义。试用SQL语句定义上述表的结构。(定义中应包括主键子句和外键子句)

37. SELECT 作者名,书名,出版社FROM 图书,作者WHERE 图书. 作者编号= 作者. 作者编号AND 年龄< = (SELECT A VG (年龄) FROM 作者);

39. CREATE TABLE 学生

(学号CHAR (8),姓名CHAR (8),专业CHAR (13),入学日期DATE,PRIMARY KEY (学号));

CREATE TABLE 收费

(学年CHAR (10),学号CHAR (8),学费NUMERIC (4),书费NUMERIC (5,2),总金额NUMERIC (7,2),PRIMARY KEY (学年,学号),FOREIGN KEY (学号) REFERENCES 学生(学号));

现有关系数据库如下: 学生(学号,姓名,性别,专业,奖学金) 课程(课程号,名称,学分) 学习(学号,课程号,分数)

5.检索不学课程号为“C135”课程的学生信息,包括学号,姓名和专业;

6.检索至少学过课程号为“C135”和“C219”的学生信息,包括学号、姓名和专业;

7.从学生表中删除成绩出现过0分的所有学生信息;

8.定义“英语”专业学生所学课程的信息视图AAA,包括学号、姓名、课程号和分数。

5.SELECT 学号,姓名,专业

FROM 学生 WHERE 学号 NOT IN (SELECT 学号FROM 学习 WHERE 课程号='C135')

6.SELECT 学号,姓名,专业 FROM 学生 WHERE 学号 IN (SELECT X. 学号

FROM 学习 X,学习 Y WHERE X.学号=Y.学号 AND X.课程号='C135' AND Y.课程号=’C219’)

7.DELETE FROM 学生 WHERE 学号 IN (SELECT 学号 FROM 学习 WHERE 分数=0)

8.CREATE VIEW AAA(学号,姓名,课程号,分数) AS SELECT 学号,姓名,课程号,分数 FROM 学生,学习 WHERE 学生.学号 =学习.学号 AND 专业=’英语’

1.用SQL的有关语句定义

1)学生关系Student,包括学号Sno、姓名SN、年龄SA;

2)课程关系Course,包括课程号Cno、课程名CN、任课教师CT;

3)学生选课关系,包括Sno、Cno和成绩G。

注意:说明主键码和外键码(如果有的话),并在键码属性上建立索引。

(12分)

2.按题1的学生关系模式,用SQL的有关语句

1)授予赵华对学生关系Student的插入和修改权限;

2)插入任意3个学生的完整信息;

3)修改所有学生的年龄(加1)。

(12分)

3.结合题1定义的学生选课数据库,用SQL语句查询计算机系学生数据库课的成绩,输出学生姓名和成绩,按成绩排序(降序),若成绩相同,再按学号排序(升序)。

(6分)

1.1)CREATE TABLE Student(

Sno INT PRIMARY KEY,

SN CHAR(30),

SA INT

);

2) CREATE TABEL Course(

Cno INT PRIMARY KEY,

CN CHAR(30),

CT CHAR(30)

);

3) CREATE TABEL SC(

Sno INT,

Cno INT,

G INT,

PRIMAYR KEY(Sno,Cno),

FOREIGN KEY(Sno) REFERENCES Student(Sno),

FOREIGN KEY(Cno) REFERENCES Course(Cno)

);

2.1)GRANT INSERT, UPDATE, ON Student TO 赵华;

2)INSERT INTO Student

(TABLE (01001,’赵华’,19),

(01002,’李芳’,18),

(01003,’刘红’,20),

);

3)UPDATE Student SET SA=SA+1;

3.SELECT SN,G FROM Student,Course,SC

WHERE Student.Sno=SC.Sno AND https://www.wendangku.net/doc/549941713.html,o=https://www.wendangku.net/doc/549941713.html,o

AND https://www.wendangku.net/doc/549941713.html,=’数据库’ORDER BY G DESC,Sno;

第三章 SQL语言练习题和答案

第三章SQL语言 一、选择题 1. SQL语言是(B )的语言,容易学习。 A.过程化 B. 非过程化 C.格式化 D. 导航式 2. SQL语言的数据操纵语句包括SELECT、INSERT、UPDATE、DELETE等。其中最重要的,也是使用最频繁的语句是(A)。 A. SELECT B. INSERT C. UPDATE D. DELETE 3. 在视图上不能完成的操作是()。 A. 更新视图 B. 查询 C. 在视图上定义新的表 D. 在视图上定义新的视图 4. SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能()。 A. 数据查询 B. 数据操纵 C. 数据定义 D. 数据控制 5. SQL语言中,删除一个视图的命令是()。 A.DELETE B.DROP C.CLEAR D.REMOVE 6. 在SQL语言中的视图VIEW是数据库的()。 A. 外模式 B. 模式 C. 内模式 D. 存储模式 7. 下列的SQL语句中,()不是数据定义语句。 A. CREATE TABLE B. DROP VIEW C. CREATE VIEW D. GRANT 8. 若要撤销数据库中已经存在的表S,可用()。 A. DELETE TABLE S B. DELETE S C. DROP TABLE S D. DROP S 9. 若要在基本表S中增加一列CN(课程名),可用()。 A.ADD TABLE S(CN CHAR(8)) B.ADD TABLE S ALTER(CN CHAR(8)) C.ALTER TABLE S ADD(CN CHAR(8)) D.ALTER TABLE S (ADD CN CHAR(8)) 10. 学生关系模式S(S#,Sname,Sex,Age),S的属性分别表示学生的学号、姓名、性别、年龄。要在表S中删除一个属性“年龄”,可选用的SQL语句是()。 A. DELETE Age from S B. ALTER TABLE S DROP Age C. UPDATE S Age D. ALTER TABLE S ‘Age’ 11. 有关系S(S#,SNAME,SAGE),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SAGE是学生年龄,C#是课程号,CNAME是课程名称。要查询选修“ACCESS”课的年龄不小于20的全体学生姓名的SQL语句是SELECT SNAME FROM S,C,SC WHERE子句。这里的WHERE子句的内容是()。

SQL语句练习题(精品文档)

S Q L语言 一、选择题 1.S Q L语言是()的语言,容易学习。 A.过程化 B.非过程化 C.格式化 D.导航式 2. S Q L语言的数据操纵语句包括S E L E C T、I N S E R T、U P D A T E、 D E L E T E等。其中最重要的,也是使用最频繁的语句是()。 A.S E L E C T B.I N S E R T C.U P D A T E D.D E L E T E 3.在视图上不能完成的操作是()。 A.更新视图 B.查询 C.在视图上定义新的表 D.在视图上定义新的视图 4.S Q L语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,C R E A T E、D R O P、A L T E R语句是实现哪种功能()。 A.数据查询 B.数据操纵 C.数据定义 D.数据控制 5.S Q L语言中,删除一个视图的命令是()。 A.D E L E T E B.D R O P C.C L E A R D.R E M O V E 6.在S Q L语言中的视图V I E W是数据库的()。 A.外模式 B.模式 C.内模式 D.存储模式 7.下列的S Q L语句中,()不是数据定义语句。 A.C R E A T E T A B L E B.D R O P V I E W C.C R E A T E V I E W D.G R A N T 8.若要撤销数据库中已经存在的表S,可用()。 A.D E L E T E T A B L E S B.D E L E T E S C.D R O P T A B L E S D.D R O P S

sql语句练习50题

sql语句练习50题 Student(Sid,Sname,Sage,Ssex) 学生表 Course(Cid,Cname,Tid) 课程表 SC(Sid,Cid,score) 成绩表 Teacher(Tid,Tname) 教师表 练习内容: 1.查询“某1”课程比“某2”课程成绩高的所有学生的学号; SELECT a.sid FROM (SELECT sid,score FROM SC WHERE cid=1) a,(SELECT sid,score FROM SC WHERE cid=3) b WHERE a.score>b.score AND a.sid=b.sid; 此题知识点,嵌套查询和给查出来的表起别名 2.查询平均成绩大于60分的同学的学号和平均成绩; SELECT sid,avg(score) FROM sc GROUP BY sid having avg(score) >60; 此题知识点,GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。group by后面不能接where,having代替了where 3.查询所有同学的学号、姓名、选课数、总成绩 SELECT Student.sid,Student.Sname,count(SC.cid),sum(score)FROM Student left Outer JOIN SC on Student.sid=SC.cid GROUP BY Student.sid,Sname 4.查询姓“李”的老师的个数; select count(teacher.tid)from teacher where teacher.tname like'李%' 5.查询没学过“叶平”老师课的同学的学号、姓名; SELECT Student.sid,Student.Sname FROM Student WHERE sid not in (SELECT distinct( SC.sid) FROM SC,Course,Teacher WHERE SC.cid=Course.cid AND Teacher.id=Course.tid AND Teacher.Tname='叶平'); 此题知识点,distinct是去重的作用 6.查询学过“```”并且也学过编号“```”课程的同学的学号、姓名; select a.SID,a.SNAME from (select student.SNAME,student.SID from student,course,sc where cname='c++'and sc.sid=student.sid and sc.cid=course.cid) a, (select student.SNAME,student.SID from student,course,sc where cname='english'and sc.sid=student.sid and sc.cid=course.cid) b where a.sid=b.sid; 标准答案(但是好像不好使)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# AND SC_2.C#='002'); 此题知识点,exists是在集合里找数据,as就是起别名 7.查询学过“叶平”老师所教的所有课的同学的学号、姓名; select a.sid,a.sname from (select student.sid,student.sname from student,teacher,course,sc where teacher.TNAME='杨巍巍' and teacher.tid=course.tid and course.cid=sc.cid and student.sid=sc.sid) a 标准答案:SELECT sid,Sname FROM Student WHERE sid in (SELECT sid FROM SC ,Course ,Teacher WHERE SC.cid=Course.cid AND Teacher.tid=Course.tid AND Teacher.Tname='杨巍巍' GROUP BY sid having count(SC.cid)=(SELECT count(cid) FROM Course,Teacher WHERE Teacher.tid=Course.tid AND Tname='杨巍巍')) 8.查询课程编号“”的成绩比课程编号“”课程低的所有同学的学号、姓名;

sql语句练习题及答案

一在数据库 school 中建立student , sc, course 表。 学生表、课程表、选课表属于数据库 School ,其各自的数据结构如下:学生 Student (Sno,Sname,Ssex,Sage,Sdept) 课程表 course(Cno,Cname,Cpno,Ccredit) 学生选课 SC(Sno,Cno,Grade) 二设定主码 1 Student表的主码:sno 2 Course表的主码:cno 3 Sc表的主码:sno,cno 1写出使用 Create Table 语句创建表 student , sc, course 的SQL语句create table student (sno char(6), sname varchar(8), ssex char(2), sage smallint, sdept varchar(15), primary key(sno)); Create table course( Cno char(4) primary key, Cname varchar(20), Cpno char(4),

Ccredit tinyint) create table sc (sno char(6), cno char(4), grade decimal(12,2), primary key(sno,cno)); c 2 insert into student values( ’4001’,’赵茵’,’男’,20,’SX’) insert into student values( ’4002’,’杨华’,’女’,21,’JXJ’) Delete 1 删除所有 JSJ 系的男生 delete from Student where Sdept=’JSJ’ and Ssex=’男’; 2 删除“数据库原理”的课的选课纪录 delete from SC where Cno in (select Cno fromCourse where Cname=’数据库原理’); Update 1 修改 0001 学生的系科为: JSJ Update student set sdept=’JSJ’ where sno=’0001’ 2 把陈小明的年龄加1岁,性别改为女。 Update student set age=age+1,ssex=’女’ where sname=’陈小明’ Select 查询语句 一单表 1查询年龄在19至21岁之间的女生的学号,姓名,年龄,按年龄从大到小排列。 select sno, sname, sage from student where ssex=’女’ and sage between 19 and 21 order by sage desc; 2查询姓名中第2个字为“明”字的学生学号、性别。 select sno, ssex from student where sname like ’_明% ’ ; 3查询 1001课程没有成绩的学生学号、课程号

数据库sql查询语句练习2_习题_结果(单世民)

现在有一教学管理系统,具体的关系模式如下:Student (no, name, sex, birthday, class) Teacher (no, name, sex, birthday, prof, depart) Course (cno, cname, tno) Score (no, cno, degree) 其中表中包含如下数据: Course表: Score表: Student表:

Teacher表: 根据上面描述完成下面问题: (注意:注意保存脚本,尤其是DDL和DML,以便进行数据还原)DDL 1.写出上述表的建表语句。 2.给出相应的INSERT语句来完成题中给出数据的插入。 单表查询 3.以class降序输出student的所有记录(student表全部属性) 命令:select*from Student order by class desc;

4.列出教师所在的单位depart(不重复)。 命令:select distinct depart from Teacher; 5.列出student表中所有记录的name、sex和class列 命令:select name,sex,class from Student; 6.输出student中不姓王的同学的姓名。 命令:select name from Student except select name from Student where name like'王%';或

select name from Student where name not like'王%'; 7.输出成绩为85或86或88或在60-80之间的记录(no,cno,degree) 命令:select no,cno,DEGREE from Score where degree=85 or degree=86 or degree=88 or degree between 60 and 80; 8.输出班级为95001或性别为‘女’的同学(student表全部属性) 命令:select*from Student where class=95001 or sex='女';

SQL语句练习及答案

sql语句练习题1 数据库有如下四个表格: student(sno,sname,sage,ssex,sdpt) 学生表 系表(dptno,dname) course(cno,cname, gradet, tno) 课程表 sc(sno,cno,score) 成绩表 teacher(tno,tname) 教师表 要求:完成以下操作 1.查询姓"欧阳"且全名为三个汉字的学生的姓名。 select sname from student where sname like “欧阳__?; 2.查询名字中第2个字为"阳"字的学生的姓名和学号。 select sname,sno from student where sname like '_阳%';3.查询所有不姓刘的学生姓名。 select sname,sno,ssex from student where sname not like “刘%”; 4.查询db_design课程的课程号和学分。 select cno,ccredit from course where cname like 'db_design' 5.查询以"db_"开头,且倒数第3个字符为i的课程的详细情况。 select * from course where cname like 'db%i_ _'; 6.某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查 询缺少成绩的学生的学号和相应的课程号。

select sno,cno from sc where grade is null; 7.查所有有成绩的学生学号和课程号。 select sno,cno from sc where grade is not null; 8.查询计算机系年龄在20岁以下的学生姓名。 select sname from student where sdept= 'cs' and sage<20; 9.查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。 select sno, grade from sc where cno= ' 3 ' order by grade desc;10.查询学生总人数。 select count(*) from student; 11.查询选修了课程的学生人数。 select count(distinct sno) from sc; 12.计算1号课程的学生平均成绩。 select avg(grade) from sc where cno= ' 1 '; 13.查询选修1号课程的学生最高分数。 select max(grade) from sc where cno= ' 1 '; 14.查询学生200215012选修课程的总学分数。 select sum(grade) from sc,course where sno= ' 200215012 ' and https://www.wendangku.net/doc/549941713.html,o=https://www.wendangku.net/doc/549941713.html,o;

学生选课数据库SQL语句练习题(详细分解答案)

一、设有一数据库,包括四个表:学生表(Student)、课程表 (Course)、成绩表(Score)以及教师信息表(Teacher)。 四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。 表1-1数据库的表结构 表(一)Student 属性名数据类 型可否为 空 含义 Sno Char(3) 否学号(主 键)Sname Char(8) 否学生姓名Ssex Char(2) 否学生性别Sbirthday datetime 可学生出生年 月 Class Char(5) 可学生所在班 级 表(二)Course 属性名数据类型可否为 空 含义Cno Char(5) 否课程号(主 键)Cname Varchar(10) 否课程名称Tno Char(3) 否教师编号 (外键) 表(三)Score 属性名数据类型可否为 空 含义Sno Char(3) 否学号(外 键) Cno Char(5) 否课程号(外

键)Degree Decimal(4,1) 可成绩 主码:Sno+ Cno 表(四)Teacher 属性名数据类型可否为 含义 空 Tno Char(3) 否教师编号 (主键)Tname Char(4) 否教师姓名Tsex Char(2) 否教师性别Tbirthday datetime 可教师出生年 月 Prof Char(6) 可职称Depart Varchar(10) 否教师所在部 门 表1-2数据库中的数据 表(一)Student Sno Sname Ssex Sbirthday class 108 曾华男1977-09- 95033 01 105 匡明男1975-10- 95031 02 107 王丽女1976-01- 95033 23 95033 101 李军男1976-02- 20 95031 109 王芳女1975-02- 10 95031 103 陆君男1974-06- 03 表(二)Course

T-SQL语句练习题

一、根据要求用T-SQL语句创建数据库和表。 创建数据库“英才大学成绩管理”。 分别创建三个表,具体的表名、字段名如下: 学生(学号,姓名,性别,出生年月,籍贯,班级) 其中性别字段只能为“男”或“女”课程(课程编号,课程名称,学分) 其中课程名称字段为唯一值约束 成绩(学号,课程编号,成绩) 带下划线的字段为主键,表之间的外键关联参考下图,各字段的数据类型应尽量合理。 CREATE DATABASE 英才大学成绩管理 create table 学生 (学号char(6) primary key, 姓名char(6), 性别char(2) check(性别='男' or 性别='女'), 出生年月datetime, 籍贯varchar(50), 班级char(12), )

create table 课程 (课程编号char(5) primary key, 课程名称char(20) unique, 学分smallint, ) create table 成绩 (学号char(6) references 学生(学号), 课程编号char(5) references 课程(课程编号), 成绩decimal(5,2), primary key(学号,课程编号) ) 二、根据T-SQL语句写出执行结果(20分,每题4分) 对上题所创建的表添加记录后如图所示,详细写出下面的SQL语句的执行结果。

1、select * from 课程where 课程编号='30442' 1、 2、select 姓名from 学生 where 性别='女' and 籍贯='辽宁' 2、 3、select 姓名,课程名称,成绩from 学生,课程,成绩 where 学生.学号=成绩.学号and 课程.课程编号=成绩.课程编号 and 学分='4' 3、 4、select max(成绩) as 最高分from 课程,成绩 where 课程.课程编号=成绩.课程编号and 课程名称='C语言程序设计' 4、 5、select 籍贯,count(*) as 人数from 学生 where 班级='计ZG091' group by 籍贯 5、

关系代数及SQL语言的习题

针对书上的学生选课数据库S_T,用关系代数和SQL语言完成以下查询: 1、查询“ CS系所有学生的学号和姓名。 2、Slelect sno,sname from student where sdept = ' CS 3、查询所有姓“刘”的学生的信息。 4、Select * from stude nt where sn ame like '刘% 5、查询年龄在18至20岁之间的学生信息。 6、Select * from stude nt where sage betwee n 18 and 20 7、查询不在“ CS系也不在“ MA系的学生的所有信息。 & Select * from student where sdept not in ( ‘ CS , ' MA ) 9、查询“ CS系所有学生的平均年龄。 10、Select avg(sage) from stude nt where sdept like ‘ CS 11、查询课程名是以“系统”结尾的课程信息。 12、Select * from course where cn ame like ‘ %系统' 13、查询先行课为“ 6”号课程的课程信息。 14、Select * from course where cpno=6 15、查询间接先行课为“ 5”号课程的课程号及课程名。 16、Select , from c c1,c c2 where = and =5 17、Select eno ,cname from course where epno in (select eno from course where epno=5) 18、查询没有先行课的课程名。 19、Select cn ame from course where epno is null 20、查询选修了“ 1”号课程的学生选课信息。

SQL语句练习题答案

SQL练习题及答案: 请用SQL语句实现以下功能。(1至6题每题10分,7至8题每题20分) 1. 如何用SQL语句求带辅助核算206科目12月的余额在贷方的合计值?cendd_c为余额方向字段,字符型,me为余额。 SELECT sum(me) FROM gl_accass WHERE ccode="206" and cendd_c="贷" and iperiod=12 2.如何查找GL_accass中的科目在科目表中不是末级的?(如下3种写法均正确) SELECT https://www.wendangku.net/doc/549941713.html,ODE ,B.BEND FORM GL_ACCASS AS A JOIN CODE AS B ON https://www.wendangku.net/doc/549941713.html,ODE=https://www.wendangku.net/doc/549941713.html,ODE WHERE B.BEND =0 select distinct ccode from gl_accass where ccode in(select ccode from code where bend=0) select distinct ccode from gl_accass where ccode not in(select ccode from code where bend=1)

3. 如何将AA库中的department表用语句把数据导入BB库中? INSERT INTO BB..DEPARTMENT SELECT * FROM AA..DEPARTMENT 4.如何查辅助总帐中的部门编号(cDEPT_ID)在部门目录(department 表cdepcode)中不存在的记录?SELECT cDEPT_ID FROM GL_ACCASS WHREE cDEPT_ID NOT IN (SELECT cdepcode FROM DEPARTMENT) 5. 如何在部门目录表中查找部门名称(CDEPNAME)重复的记录数? SELECT CDEPNAME, COUNT(CDEPNAME) FROM DEPARTMENT GROUP BY CDEPNAME HA VING COUNT(CDEPNAME)>1; 6. 已知有表R(sno, sname, age),其中sno表示学生的学号,类型为Char(8),前4位表示入学年份。查询所有2003年入学的学生姓名(sname),SQL语句是 SELECT sname FROM R WHERE sno LIKE ′2003%′ 7. 判断题:

SQL语句练习题

SQL语句练习题 一、单表查询练习 1、查询<学生信息表>,查询学生"张三"的全部基本信息 Select * from student where stname=’张三’; 2、查询<学生信息表>,查询学生"张三"和”李四”的基本信息 select * from student where stname in ('张三','李四') 3、查询<学生信息表>,查询姓"张"学生的基本信息 select * from student where stname like '张%'; 4、查询<学生信息表>,查询姓名中含有"四"字的学生的基本信息 select * from student where stname like '%四%'; 5、查询<学生信息表>,查询姓名长度为三个字,姓“李”,且最后一个字是“强”的全部学生信息。 select * from student where stname like '李_强'; 6、查询<学生信息表>,查询姓"张"或者姓”李”的学生的基本信息。 select * from student where stname like '张%' or stname like '李%'; 7、查询<学生信息表>,查询姓"张"并且"所属省份"是"北京"的学生信息 select * from student where stname like '张%' and family ='北京'; 8、查询<学生信息表>,查询"所属省份"是"北京"、”新疆”、”山东”或者"上海"的学生的信息select * from student where family in ('北京','新疆','山东','上海'); 9、查询<学生信息表>,查询姓"张",但是"所属省份"不是"北京"的学生信息 select * from student where family!='北京' and stname like '张_'; 10、查询<学生信息表>,查询全部学生信息,并按照“性别”排序,性别相同的情况下按照“所属省份”排序,所属省份相同的情况下再按照“班级”排序 select * from student order by sex,family,class; (多个排序条件,用逗号以此分开,先排第一个、再排第二个。。。。) 11、查询<学生信息表>,查询现有学生都来自于哪些不同的省份 select distinct (family) from student; (注意distinct使用方法) 12、查询<学生选修信息表>,查询没有填写成绩的学生的学号、课程号和成绩 select couid,couid,coursegrade from grade where coursegrade is null; 13、查询<学生选修信息表>,查询全部填写了成绩的学生的选修信息,并按照“成绩”从高到低进行排序 select * from grade where coursegrade is not null order by coursegrade desc; 二、聚合函数练习 1、统计<学生信息表>,统计共有多少个学生 select count(stname) from student; 2、统计<学生信息表>,统计年龄大于20岁的学生有多少个 select count(stname) from student where (year(getdate())-year(birthday))>20; 3、统计<学生信息表>,统计入学时间在1998年至2000年的学生人数 select count(stuid) from student where year(enrollment) between 1998 and 2000; 4、统计<学生选修信息表>,统计学号为"S001"的学生的平均成绩 select avg(coursegrade) from grade where stuid='1'; 5、统计<学生选修信息表>,统计学号为"S001"的学生的总成绩

Oracle的sql语句练习题含答案

--1、选择部门30中的雇员 select * from emp where deptno=30; --2、列出所有办事员的姓名、编号和部门 select ename,empno,dname from emp e inner join dept d on = where job=upper('clerk’); --3、找出佣金高于薪金的雇员 select * from emp where comm>sal; --4、找出佣金高于薪金60%的雇员 select * from emp where comm>sal* ^ --5、找出部门10中所有经理和部门20中的所有办事员的详细资料 select * from emp where (deptno=10 and job=upper('manager')) or (deptno=20 and job=upper('clerk ')); --6、找出部门10中所有经理、部门20中所有办事员,既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料 select * from emp where (deptno=10 and job=upper('manager')) or (deptno=20 and job=upper('clerk ')) or (job<>upper(‘manager’) and job<>upper(‘clerk’) and sal>=2000) --7、找出收取佣金的雇员的不同工作 select distinct job from emp where comm>0; --8、找出不收取佣金或收取的佣金低于100的雇员 select * from emp where nvl(comm,0)<100; | --9、找出各月最后一天受雇的所有雇员 select * from emp where hiredate= last_day(hiredate); --10、找出早于25年之前受雇的雇员 select * from emp where months_between(sysdate,hiredate)/12>25; select * from emp where hiredate

最新SQL练习题

例题 1、写出一条Sql语句:取出表A中第31到第40记录(Mysql) select * from A limit 30, 10 MS-SQLServer 解1:select top 10 * from A where id not in (select top 30 id from A) 解2:select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A) 解3:select * from (select *, Row_Number() OVER (ORDER BY id asc) rowid FROM A) as A where rowid between 31 and 40 Oracle select * from (select A.*, row_number() over (order by id asc) rank FROM A) where rank >=31 AND rank<=40; 2、用一条SQL语句查询出每门课都大于80 分的学生姓名 name kecheng fenshu 张三语文81 张三数学75 李四语文76 李四数学90 王五语文81 王五数学100 王五英语90

A: select distinct name from table where name not in (select distinct name from tabl e where fenshu<=80) select name from table group by name having min(fenshu)>80 3、学生表如下: 自动编号学号姓名课程编号课程名称分数 1 2005001 张三 0001 数学69 2 2005002 李四 0001 数学89 3 2005001 张三 0001 数学69 删除除了自动编号不同, 其他都相同的学生冗余信息 A: delete tablename where 自动编号 not in(select min( 自动编号) from tablename group by学号, 姓名, 课程编号, 课程名称, 分数) 4、请用SQL 语句实现: 从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。 AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。 数据库名:JcyAudit ,数据集:Select * from TestDB 答:select a.* from TestDB a ,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' gro up by Occmonth) b where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur

Oracle的sql语句练习题含答案

Oracle的sql语句练习题含答案(二)Oracle_SQL练习题1 1.选择部门30中的所有员工. 2.列出所有办事员(CLERK)的姓名,编号和部门编号. 3.找出佣金高于薪金的员工. 4.找出佣金高于薪金的60%的员工. 5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料. 6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料. 7.找出收取佣金的员工的不同工作. 8.找出不收取佣金或收取的佣金低于100的员工. 9.找出各月倒数第3天受雇的所有员工. 10.找出早于12年前受雇的员工. 11.以首字母大写的方式显示所有员工的姓名. 12.显示正好为5个字符的员工的姓名. 13.显示不带有"R"的员工的姓名. 14.显示所有员工姓名的前三个字符. 15.显示所有员工的姓名,用a替换所有"A" 16.显示满10年服务年限的员工的姓名和受雇日期. 17.显示员工的详细资料,按姓名排序. 18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面. 19.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序. 20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面. 21.显示在一个月为30天的情况所有员工的日薪金,忽略余数. 22.找出在(任何年份的)2月受聘的所有员工。 23.对于每个员工,显示其加入公司的天数. 24.显示姓名字段的任何位置包含"A"的所有员工的姓名. 25.以年月日的方式显示所有员工的服务年限. 答案: 1.select ename,job,mgr,hiredate,sal,comm ,deptno from emp where deptno=30; 2.select ename,empno,deptno from emp where job='CLERK'; 3.select * from emp where comm>sal; 4.select * from emp where comm>sal*0.6; 5.select empno ,ename, job,hiredate,sal,comm,deptno from emp where( job='MANAGER' and deptno=10) or( job='CLERK' and deptno=20); 6.select empno,ename,job, hiredate,sal, deptno from emp where ( job='MANAGER' and deptno=10) or( job='CLERK' and deptno=20) or((job <>'MANAGER' and job<>'CLERK') and sal>=2000);

SQL语句习题

设某商业集团关于商店销售商品的数据库中有三个基本表: 商店SHOP(S#,SNAME,AREA,MGR_NAME) 其属性是商店编号,商店名称,区域名,经理姓名。 销售SALE(S#,G#, QUANTITY) 其属性是商店编号,商品编号,销售数量。 商品GOODS(G#,GNAME,PRICE) 其属性是商品编号,商品名称,单价。 36.试写出下列查询的关系代数表达式、元组表达式和关系逻辑规则:检索销售“冰箱”的商店的编号和商店名称。 37.试写出上面第36题的SELECT语句表达形式。并写出该查询的图示形式。38.试写出下列操作的SQL语句: 从SALE表中,把“开开商店”中销售单价高于1000元的商品的销售元组全部删除。 39.写一个断言,要求区域名为“EAST”的商店里销售商品的单价不能低于100元。 40.试写出下列操作的SQL语句: 统计区域名为“EAST”的所有商店销售的每一种商品的总数量和总价值。 要求显示(G#,GNAME,SUM_QUANTITY,SUM_VALUE),其属性为商品编号、商品名称、销售数量、销售价值。 37.解:SELECT语句如下: SELECT A.S#,SNAME FROM SHOP A,SALE B,GOODS C WHERE A.S#=B.S# AND B.G#=C.G# AND GNAME='冰箱'; 该查询语句的图示形式如下: SHOP S# SNAME AREA MGR_NAME P._X P. SALE S# G# QUANTITY GOODS G# GNAME PRICE _X _Y _Y 冰箱 38.解:DELETE FROM SALE WHERE S# IN(SELECT S# FROM SHOP WHERE SNAME='开开商店') AND G# IN(SELECT G# FROM GOODS WHERE PRICE>1000); 39.解:CREATE ASSERTION ASSE8 CHECK (100<=ALL(SELECT PRICE

SQL语句练习题

有学生基本信息Student表和学院信息表College,表的结构为:1)Stu(Sno Char(8),Sname Char(8),Sage int,Ssex Char(2),DeptNo Char(2)) 2)College(DeptNo char(2),Dname char(12)) 请根据下列要求,分别写出完成对应功能的SQL语句: 1.查询所有学生的姓名和出生年份 select sname,year(now())-sage,sage from stu 2.查询学院号为01的所有学生的基本信息 3.查询姓张的学生的姓名和年龄 select sname,sage from stu where sname like ‘张%’ 4.查询学号为20060001的学生姓名年龄和所在学院的名称SELECT sname,sage,dname from stu,college where sno='20060001'and stu.deptno=college.deptno 5.查询与王凯在同一个学院学习的学生的学号和姓名 SELECT sno,sname from stu where deptno=(select deptno from stu where sname='王凯') 6.查询学院号为01和02的所有学生 select * from stu where deptno in('01','02') 7.将学号为20060001的学生学院号改为02 Update student set deptno=’02’ where sno=’20060001’ 8.将张雨的年龄改为20岁 9.将所有女生的年龄减1岁 update stu set sage=sage-1 where ssex='女' 10.删除学号为20060004的学生信息 Delete from stu where sno=’20060004’ 11.查询所有学生的基本信息并按学院对查询结果进行排序 12.统计各个学院的人数 select deptno , count(*) from stu group by deptno 13.查询年龄最小的学生姓名和年龄 select sname,sage from stu where sage=(select min(sage) from stu)

相关文档