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

SQL语句练习

SQL语句练习
SQL语句练习

现在有一教学管理系统,具体的关系模式如下:

Student (no, name, sex, birthday, class)

Teacher (no, name, sex, birthday, prof, depart)

Course (cno, cname, tno)

Score (no, cno, degree)

单表查询

1,以class降序输出student的所有记录(student表全部属性)

2,命令:select * from Student order by class desc

3,列出教师所在的单位depart(不重复)。

4,命令:select distinct depart from teacher

5,列出student表中所有记录的name、sex和class列

6,命令:select name,sex,class from student

7,输出student中不姓王的同学的姓名。

8,命令:select name from Student where name not like '王%'

9,输出成绩为85或86或88或在60-80之间的记录(no,cno,degree)

10,命令:select * from Score where degree=85 or degree=86 or degree=88 or degree between 60 and 80

11,输出成绩为85或86或88或在60-80之间的记录(no,cno,degree)

12,命令:select * from Score where degree=85 or degree=86 or degree=88 or degree between 60 and 80

13,以cno升序、degree降序输出score的所有记录。(score表全部属性)

14,命令:select * from Score order by cno,degree desc

15,输出男生人数及这些男生分布在多少个班级中

16,命令:select COUNT(*),COUNT(distinct class) from Student where sex='男'

17,列出存在有85分以上成绩的课程编号。

18,命令:select distinct cno from Score where degree>85

19,列出存在有85分以上成绩的课程编号。

20,命令:select distinct cno from Score where degree>85

21,输出‘3-105’号课程的平均分

22,命令:select AVG(DEGREE) from Score where cno='3-105'

23,输出student中最大和最小的birthday日期0值

24,命令:select MAX(birthday),MIN(birthday) from student

25,显示95001和95004班全体学生的全部个人信息(不包括选课)。(student表全部属性)

26,命令:select * from Student where class='95001' or class='95004'

27,输出至少有5个同学选修的并以3开头的课程的课程号,课程平均分,课程最高分,课程最低分。

28,命令:

29,select cno,AVG(degree),MAX(degree),MIN(degree) from Score

30,where cno like '3%' group by cno having COUNT(no)>=5

31,输出所选修课程中最低分大于70分且最高分小于90分的学生学号及学生姓名32,命令:select student.no,https://www.wendangku.net/doc/6b12359425.html, from Score inner join Student on student.no=score.no group by student.no,name having (MIN(degree)>70 and

MAX(degree)<90)

33,显示所教课程选修人数多于5人的教师姓名

34,命令:select name from Score inner join course on https://www.wendangku.net/doc/6b12359425.html,o=https://www.wendangku.net/doc/6b12359425.html,o inner join Teacher on Teacher.no=course.tno group by teacher.no,name having COUNT(*)>5

35,输出’95001’班级所选课程的课程号和平均分

36,命令:select cno,AVG(degree) from Student inner join Score on student.no=score.no where student.class='95001' group by cno

37,输出至少有两名男同学的班级编号。

38,命令:select class from Student inner join Score on student.no=score.no where sex='男' group by class having COUNT(distinct student.no)>1

39,列出与108号同学同年出生的所有学生的学号、姓名和生日

40,命令:select no,name,birthday from Student where year(birthday)=(select YEAR(birthday) from Student where no =108)

41,列出存在有85分以上成绩的课程名称

42,命令:select cname from course inner join Score on https://www.wendangku.net/doc/6b12359425.html,o=https://www.wendangku.net/doc/6b12359425.html,o group by cname having MAX(degree)>85

43,列出“计算机系”教师所教课程的成绩表(课程编号,课程名,学生名,成绩)。44,命令:select https://www.wendangku.net/doc/6b12359425.html,o,cname,https://www.wendangku.net/doc/6b12359425.html,,DEGREE from Student inner join Score on 45,student.no=score.no inner join course on https://www.wendangku.net/doc/6b12359425.html,o=https://www.wendangku.net/doc/6b12359425.html,o inner join Teacher on course.tno=Teacher.no where teacher.depart='计算机系'

46,列出所有可能的“计算机系”与“电子工程系”不同职称的教师配对信息,要求输出每个老师的姓名(name)和(职称)

47,命令:select https://www.wendangku.net/doc/6b12359425.html,,ex1.prof,https://www.wendangku.net/doc/6b12359425.html,,ex2.prof from Teacher ex1,Teacher ex2 where ex1.depart='计算机系' and ex2.depart='电子工程系' and ex1.prof!=ex2.prof

48,列出所有处于不同班级中,但具有相同生日的学生,要求输出每个学生的学号和姓名。(提示:使用datediff函数,具体用法可以参考:https://www.wendangku.net/doc/6b12359425.html,/blog/588844)命令:

49,select ex1.no,https://www.wendangku.net/doc/6b12359425.html,,ex2.no,https://www.wendangku.net/doc/6b12359425.html, from Student ex1 inner join Student ex2 on ex1.birthday=ex2.birthday where ex1.class!=ex2.class

50,select ex1.no,https://www.wendangku.net/doc/6b12359425.html,,ex2.no,https://www.wendangku.net/doc/6b12359425.html, from Student ex1 ,Student ex2 where ex1.class!=ex2.class and datediff(day,ex1.birthday,ex2.birthday )=0

51,显示‘张三’教师任课的学生姓名,课程名,成绩

52,命令:select https://www.wendangku.net/doc/6b12359425.html,,cname,DEGREE from Student inner join Score on student.no=score.no inner join course on https://www.wendangku.net/doc/6b12359425.html,o=https://www.wendangku.net/doc/6b12359425.html,o inner join Teacher on course.tno=teacher.no where https://www.wendangku.net/doc/6b12359425.html,='张三'

53,列出所讲课已被选修的教师的姓名和系别

54,命令:select distinct https://www.wendangku.net/doc/6b12359425.html,,depart from Score inner join course on https://www.wendangku.net/doc/6b12359425.html,o=https://www.wendangku.net/doc/6b12359425.html,o inner join Teacher on course.tno=Teacher.no

55,输出所有学生的name、no和degree。(degree为空的不输出和为空的输出两种情况)。

56,命令:select https://www.wendangku.net/doc/6b12359425.html,,student.no,DEGREE from Student inner join Score on student.no=score.no select https://www.wendangku.net/doc/6b12359425.html,,student.no,DEGREE from Student left join Score on student.no=score.no

57,列出所有任课教师的name和depart。(从课程选修和任课两个角度考虑)

58,命令:

59,(课程选修)

60,select distinct https://www.wendangku.net/doc/6b12359425.html,,depart from score

61,left join course on https://www.wendangku.net/doc/6b12359425.html,o=https://www.wendangku.net/doc/6b12359425.html,o left join teacher on course.tno=teacher.no 62,(任课)

63,select distinct https://www.wendangku.net/doc/6b12359425.html,,depart from teacher inner join course on Teacher.no=course.tno

64,输出男教师所上课程名称。

65,命令:

66,select cname from Teacher inner join course on Teacher.no=course.tno where teacher.sex='男'

67,出与“李军”同性别的所有同学的name。

68,命令:select name from Student where sex=(select sex from Student where name='李军')

69,输出选修“数据结构”课程的男同学的成绩。

70,命令:select DEGREE from Student inner join Score on student.no=score.no where sex='男'

71,列出选修编号为‘3-105’课程并且该门课程成绩比课程‘3-111’的最高分

72,要高的cno,no和degree。

73,命令:select cno,student.no,DEGREE from Student inner join Score on student.no=score.no where cno='3-105' and degree>(select MAX(degree) from Score where cno='3-111')

74,输出score中成绩最高的学号和课程号

75,命令:select no,cno from Score where degree=(select MAX(degree) from Score)

76,输出选修3-105课程,其成绩高于109号同学在此课程所得成绩的所有同学的学号,姓名

77,命令:select student.no,name from Student inner join Score on student.no=score.no where cno='3-105' and degree>(select degree from Student inner join Score on student.no=score.no where student.no=109 and cno='3-105')

78,列出成绩比该课程平均成绩低的同学的学号,成绩和该门课的平均成绩

79,命令:

80,select no,DEGREE,temp.avgdegree from Score inner join (select cno,AVG(degree) avgdegree from Score group by cno) as temp on https://www.wendangku.net/doc/6b12359425.html,o=https://www.wendangku.net/doc/6b12359425.html,o where degree

81,列出没有实际授课的教师的姓名和系别

82,命令:

83,select distinct name,depart from Teacher left join course on Teacher.no=course.tno left join Score on https://www.wendangku.net/doc/6b12359425.html,o=https://www.wendangku.net/doc/6b12359425.html,o where score.no is null

84,列出选修了编号为‘3-105’课程且其成绩高于‘4-109’课程最高成绩的同学的课程编号,学号和成绩

85,命令:select cno,student.no,DEGREE from Student inner join Score on student.no=score.no where cno='3-105' and degree>(select MAX(degree) from Score where cno='4-109')

86,列出符合下述条件的所有可能的同学配对(sno1,sname1,sno2,sname2,difference)。

其中要求学号为sno1的sname1同学的所学课程的平均分大于学号为sno2的sname2同学的所学课程平均分,两个同学的课程平均分的差值difference为(sno1同学平均分-sno2同学平均分)

87,命令:

88,select ex1.no,https://www.wendangku.net/doc/6b12359425.html,,ex2.no,https://www.wendangku.net/doc/6b12359425.html,,

89,AVG(ex3.degree)-AVG(ex4.degree) as diffenence from (Student ex1 inner join Score ex3 on ex1.no=ex3.no), (Student ex2 inner join Score ex4 on ex2.no=ex4.no) group by ex1.no,https://www.wendangku.net/doc/6b12359425.html,,ex2.no,https://www.wendangku.net/doc/6b12359425.html, having AVG(ex3.degree)>AVG(ex4.degree) Selectstuavg1.no,https://www.wendangku.net/doc/6b12359425.html,,stuavg2.no,https://www.wendangku.net/doc/6b12359425.html,, stuavg1.avgscore-stuavg2.avgscore as diffenence from (

90,select student.no,name,avg(degree) as avgscore from score

91,left join student on score.no=student.no group by student.no,name )as stuavg1

92,inner join (

93,select student.no,name,avg(degree) as avgscore from score

94,left join student on score.no=student.no group by student.no,name )as stuavg2

95,on stuavg1.avgscore>stuavg2.avgscore

SQL语句强化练习题及答案

一、简单查询

1、列出全部学生的信息。

SELECT * FROM 学生

2、列出软件专业全部学生的学号及姓名。

SELECT 学号,姓名FROM 学生WHERE 专业="软件"

3、列出所有必修课的课号。

SELECT DISTINCT 课号FROM 必修课

4、求1号课成绩大于80分的学生的学号及成绩,并按成绩由高到低列出。

SELECT 学号,成绩FROM 选课WHERE 课号="1" AND 成绩>80 ORDER BY 成绩DESC

5、列出非软件专业学生的名单。

方法一:SELECT 姓名FROM 学生WHERE 专业<>"软件"

方法二:SELECT 姓名FROM 学生WHERE NOT 专业="软件"

方法三:SELECT 姓名FROM 学生WHERE 专业!="软件"

6、查询成绩在70~80分之间的学生选课得分情况

方法一:SELECT * FROM 选课WHERE 成绩>=70 AND 成绩<=80

方法二:SELECT * FROM 选课WHERE 成绩BETWEEN 70 AND 80

不在此范围内的查询:(注意写出和以下语句等价的语句)

SELECT * FROM 选课WHERE 成绩NOT BETWEEN 70 AND 80

7、列出选修1号课或3号课的全体学生的学号和成绩。

方法一:SELECT 学号,成绩FROM 选课WHERE 课号="1" OR 课号="3"

方法二:SELECT 学号,成绩FROM 选课WHERE 课号IN ("1","3")

相反条件查询:SELECT 学号,成绩FROM 选课WHERE 课号NOT IN ("1","3")

8、列出所有98级学生的学生成绩情况。

SELECT * FROM 选课WHERE 学号LIKE "98%"

SELECT * FROM 选课WHERE 学号LIKE "98_ _ _ _"

相反条件查询:SELECT * FROM 选课WHERE 学号NOT LIKE "98%"

9、列出成绩为空值(或不为空值)的学生的学号和课号。

答案一:SELECT 学号,课号FROM 选课WHERE 成绩IS NULL

答案二:SELECT 学号,课号FROM 选课WHERE 成绩IS NOT NULL

10、求出所有学生的总成绩。

SELECT SUM(成绩) AS 总成绩FROM 选课

11、列出每个学生的平均成绩。

SELECT 学号,AVG(成绩) AS 平均成绩FROM 选课GROUP BY 学号

12、列出各科的平均成绩、最高成绩、最低成绩和选课人数。

SELECT 课号,AVG(成绩) AS 平均成绩,MAX(成绩) AS 最高分,;

MIN(成绩) AS 最低分,COUNT(学号) AS 选课人数FROM 选课GROUP BY 课号

二、连接查询

(一)简单连接

1、列出选修1号课的学生姓名及成绩。

SELECT 姓名,成绩FROM 学生,选课WHERE 学生.学号=选课.学号AND 课号="1"

2、列出选修1号课的学生的学号、姓名及成绩。

SELECT 学生.学号,姓名,成绩FROM 学生S,选课X WHERE S.学号=X.学号AND 课号="1"

3、求出总分大于150的学生的学号、姓名及总成绩。

SELECT 学生.学号,姓名,SUM(成绩) AS 总成绩FROM 学生,选课;

WHERE 学生.学号=选课.学号GROUP BY 选课.学号HAVING SUM(成绩)>150

(二)自连接查询

1、列出那些专业相同的学生相应的姓名及专业信息。

SELECT a.姓名,b.姓名,专业FROM 学生a,学生b WHERE a.学号<>b.学号AND a.专业=b.专业

2、求至少选修1号课和2号课的学生的学号。

SELECT X.学号FROM 选课X,选课Y WHERE X.学号=Y.学号AND X.课号="1" AND Y.课号="2"

3、有以下表rate.dbf

币种1代码C(2)、币种2代码C(2)、买入价N(8,4)、卖出价N(8,4)

外汇汇率.dbf

币种1 C(4)、币种2 C(4)、买入价N(8,4)、卖出价N(8,4)

外汇代码.dbf

外汇名称C(10)、外汇代码C(10)

要求:将所有“外汇汇率”表中的数据插入rate表中并且顺序不变,由于“外汇汇率”中的币种1和币种2存放的是外币名称,而rate表中的币种1代码和币种2代码应该存放外币代码,所以插入时要做相应的改动,外币名称与外向代码的对应关系存储在“外汇代码”表中。

SELECT A.外币代码AS 币种1代码,B.外币代码AS 币种2代码,;

买入价,卖出价FROM 外汇代码A,外汇汇率,外汇代码B;

WHERE A.外币名称=外汇汇率.币种1 AND B.外币名称=外汇汇率.币种2 INTO TABLE rate

4、假定有“雇员”表(雇员号C(2),雇员姓名C(6),经理号C(2)),根据雇员关系列出上一级经理及其所领导的职员清单。(教案中的例题)

SELECT "领导",S.雇员姓名,"雇员",E.雇员姓名FROM 雇员S,雇员E WHERE S.雇员号=E.经理

(三)超连接

1、列出选修1号课的学生姓名及成绩。

方法一:(使用简单连接查询格式)

SELECT 姓名,成绩FROM 学生,选课WHERE 学生.学号=选课.学号AND 课号="1"

方法二:(使用内部连接格式)

SELECT 姓名,成绩FROM 学生INNER JOIN 选课ON 学生.学号=选课.学号WHERE 课号="1"

方法三:内部连接的INNER短语可以省略。(与方法二等价)

SELECT 姓名,成绩FROM 学生JOIN 选课ON 学生.学号=选课.学号WHERE 课号="1"

2、查询订货管理数据库中数据的仓库号、城市、供应商名和地址信息。

方法一:使用简单连接格式。

SELECT 仓库.仓库号,城市,供应商名,地址FROM 供应商,订购单,职工,仓库;

WHERE 供应商.供应商号=订购单.供应商号AND订购单.职工号=职工.职工号;

AND 职工.仓库号=仓库.仓库号

方法二:使用超连接的内部连接格式。(注意连接条件的顺序)

SELECT 仓库.仓库号,城市,供应商名,地址FROM 供应商JOIN 订购单JOIN 职工JOIN 仓库;

ON 职工.仓库号=仓库.仓库号ON 订购单.职工号=职工.职工号ON 供应商.供应商号=订购单.供应商号

3、查询没有选修任何课程的学生姓名。

方法一:使用嵌套查询

SELECT 姓名FROM 学生WHERE 学号NOT IN (SELECT 学号FROM 选课)

方法二:使用超连接的右连接。

SELECT 姓名FROM 选课RIGHT JOIN 学生ON 选课.学号=学生.学号WHERE 选课.学号<>学生.学号

方法三:使用超连接的左连接。(注意表名顺序和方法二的不同)

SELECT 姓名FROM 学生LEFT JOIN 选课ON 选课.学号=学生.学号WHERE 选课.学号<>学生.学号

三、嵌套查询

(一)普通嵌套与谓词EXISTS

1、列出选修汇编语言课的学生的学号。

方法一:

SELECT 学号FROM 选课WHERE 课号=(SELECT 课号FROM 课程WHERE 课名="汇编语言")

方法二:使用谓词EXISTS。注意和方法一格式上的不同。

SELECT 学号FROM 选课WHERE EXIST (SELECT * FROM 课程;

WHERE 课名="汇编语言" AND 选课.课号=课程.课号)

2、求软件专业所有必修课的课程信息。

方法一:

SELECT * FROM 课程WHERE 课号IN; (SELECT 课号FROM 必修课WHERE 必修专业="软件")

方法二:

SELECT * FROM 课程WHERE EXIST (SELECT * FROM 必修课WHERE 必修专业="软件" ;

AND 课程.课号=必修课.课号)

(二)量词ANY、SOME、ALL

1、求选修2号课的学生中,成绩比选修1号课的最低成绩要高的学生的学号和成绩。

方法一:

SELECT 学号,成绩FROM 选课WHERE 课号="2" AND 成绩>;

(SELECT MIN(成绩) FROM 选课WHERE 课号="1")

方法二:ANY等价于SOME,所以可将ANY换成SOME。

SELECT 学号,成绩FROM 选课WHERE 课号="2" AND 成绩>ANY ;

(SELECT 成绩FROM 选课WHERE 课号="1")

2、求选修2号课的学生中,成绩比选修1号课的任何学生的成绩都要高的那些学生的学号和成绩。

方法一:

SELECT 学号,成绩FROM 选课WHERE 课号="2" AND 成绩>;

(SELECT MAX(成绩) FROM 选课WHERE 课号="1")

方法二:

SELECT 学号,成绩FROM 选课WHERE 课号="2" AND 成绩>ALL ;

(SELECT 成绩FROM 选课WHERE 课号="1")

(三)内外层互相关嵌套(外层依赖于内层的查询结果,内层依赖于外层来进一步查询)

1、列出每门课程中成绩最高的选课信息。

SELECT * FROM 选课A WHERE 成绩=(SELECT MAX(成绩) FROM 选课B WHERE A.课号=B.课号)

2、列出每个学生中成绩低于本人平均成绩的选课信息。

SELECT * FROM 选课A WHERE 成绩<(SELECT AVG(成绩) FROM 选课B WHERE A.学号=B.学号)

3、列出表“订购单2.dbf”(其内容就是在订购单表的基础上增加一个总金额字段)中每个职工经手的具有最高总金额的订购单信息。(教案中例题)

SELECT out.职工号,out.供应商号,out.订货单号,out.订货日期,out.总金额;

FROM 订购单out WHERE 总金额=(SELECT MAX(总金额) FROM 订购单inner1;

Where out.职工号=inner1.职工号)

四、操作功能

1、在课程表中插入新的元组(5,大学英语)。

INSERT INTO 课程(课号,课名) VALUES("5","大学英语")

2、给学生表中男生的记录加上删除标记。

DELETE FROM 学生WHERE 性别="男"

3、将选课表中所有课程的成绩分别提高5分。将课号为“4”的课程的成绩置为空值。

UPDATE 选课SET 成绩=成绩+5

UPDATE 选课SET 成绩=NULL WHERE 课号="4"

五、定义表结构

1、建立研究生表,该表不属于任何数据库,其结构如表所示:

CREATE TABLE 研究生FREE (学号C(6),姓名C(8),性别C(2),年龄N(3,0),入学年月D NULL)

2、假设已经建立了XSK数据库,在XSK中建立“学生1”表,其结构如表所示

OPEN DATABASE XSK

CREATE TABLE 学生1 (学号C(6) PRIMARY KEY,姓名C(8) NOT NULL,性别C(2),;

年龄N(3,0) CHECK 年龄>10 AND 年龄<45 ERROR "年龄必须大于10小于45",是否党员L,;

入学年月D DEFAULT {^1999-9-1})

3、在XSK数据库建立“课程1”表,其结构如表所示:

CREATE TABLE 课程1 (课号C(4) PRIMARY KEY,课程名C(10) NOT NULL,学分N(2))

4、在XSK数据库建立“选课1”表,其结构如表所示:

CREATE TABLE 选课1 (学号C(6) REFERENCE 学生,课号C(4) REFERENCE 课程,成绩N(5,2))

六、修改表结构

1、为“课程1”表添加一个开课学期字段,字段类型为数值型,长度为1。

ALTER TABLE 课程1 ADD COLUMN 开课学期N(1)

2、修改开课学期字段为字符型,合法值为1或2。

ALTER TABLE 课程1 ALTER COLUMN 开课学期C(1) CHECK 开课学期="1" OR 开课学期="2"

3、删除“课程1”表中对开课学期字段的合法值约束,设置默认值为1。

ALTER TABLE 课程1 ALTER 开课学期DROP CHECK

ALTER TABLE 课程1 ALTER 开课学期SET DEFAULT "1"

4、删除“课程1”表中的开课学期字段。修改课程名字段为“课名”字段。

ALTER TABLE 课程1 DROP 开课学期RENAME 课程名TO 课名5、在“学生1”表的“年龄”字段上建立候选索引。

ALTER TABLE 学生1 ADD UNIQUE 年龄TAG 年龄

6、在“学生1”表中添加一个出生日期字段,删除年龄字段。

ALTER TABLE 学生1 ADD 出生日期D

ALTER TABLE 学生1 DROP UNIQUE TAG 年龄DROP 年龄

七、补充练习

利用订货管理数据库中表数据,用SQL完成查询。

1、检索在北京的供应商的名称。

SELECT 供应商名FROM 供应商WHERE 地址="北京"

2、检索出向供应商S3发过订购单的职工的职工号和仓库号。方法一(嵌套查询):

SELECT 职工号,仓库号FROM 职工WHERE 职工号IN; (SELECT 职工号FROM 订购单WHERE 供应商号="S3")

方法二(连接查询):

SELECT 职工.职工号,仓库号FROM 职工,订购单;

WHERE 职工.职工号=订购单.职工号AND 供应商号="S3"

3、检索出和职工E1、E3都有联系的北京的供应商信息。

SELECT * FROM 供应商WHERE 地址="北京" AND 供应商号IN;

(SELECT 供应商号FROM 订购单WHERE 职工号="E1") AND 供应商号IN; (SELECT 供应商号FROM 订购单WHERE 职工号="E3")

4、检索出向S4供应商发出订购单的仓库所在的城市。

SELECT 城市FROM 仓库,职工,订购单WHERE 仓库.仓库号=职工.仓库号;

AND 职工.职工号=订购单.职工号AND 供应商号="S4"

5、检索出由工资多于1230元的职工向北京的供应商发出的订购单号。

SELECT 订货单号FROM 职工,订购单,供应商WHERE 职工.职工号=订购单.职工号; AND 订购单.供应商号=供应商.供应商号AND 工资>1230 AND 地址="北京"

6、检索出所有仓库的平均面积。

SELECT AVG(面积) AS 面积FROM 仓库

7、检索出每个仓库中工资多于1220元的职工个数。

SELECT 仓库号,COUNT(*) 职工个数FROM 职工WHERE工资>1220 GROUP BY 仓库号8、检索工资低于本仓库平均工资的职工信息。

SELECT * FROM 职工AA WHERE 工资<(SELECT AVG(工资) FROM 职工BB WHERE AA.仓库号=BB.仓库号)

第三章 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/6b12359425.html,o=https://www.wendangku.net/doc/6b12359425.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/6b12359425.html,ODE ,B.BEND FORM GL_ACCASS AS A JOIN CODE AS B ON https://www.wendangku.net/doc/6b12359425.html,ODE=https://www.wendangku.net/doc/6b12359425.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)

相关文档