数据库sql高级查询教务_答案
- 格式:doc
- 大小:57.00 KB
- 文档页数:7
题1、查询Student表中得所有记录得Sname、Ssex与Class列。
2、查询教师所有得单位即不重复得Depart列。
3、查询Student表得所有记录。
4、查询Score表中成绩在60到80之间得所有记录。
5、查询Score表中成绩为85,86或88得记录。
6、查询Student表中“95031”班或性别为“女”得同学记录。
7、以Class降序查询Student表得所有记录。
8、以Cno升序、Degree降序查询Score表得所有记录。
9、查询“95031”班得学生人数。
10、查询Score表中得最高分得学生学号与课程号。
11、查询‘3-105’号课程得平均分。
12、查询Score表中至少有5名学生选修得并以3开头得课程得平均分数。
13、查询最低分大于70,最高分小于90得Sno列。
14、查询所有学生得Sname、Cno与Degree列。
15、查询所有学生得Sno、Cname与Degree列。
16、查询所有学生得Sname、Cname与Degree列。
17、查询“95033”班所选课程得平均分。
18、假设使用如下命令建立了一个grade表:create table grade(low numeric(3,0),upp numeric(3),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');现查询所有同学得Sno、Cno与rank列。
19、查询选修“3-105”课程得成绩高于“109”号同学成绩得所有同学得记录。
适用专业:1、假定一位教师可讲授多门课程,一门课程可由多位教师讲授,教师和课程之间()。
A.一对一的关系B.一对多的关系C.多对一的关系D.多对多的关系2、在E-R图中,用长方形和椭圆分别表示()。
A.联系、属性B.属性、实体C.实体、属性D.属性、联系3、关于数据库的设计范式,以下说法错误的是()。
A.数据库的设计范式有助于规范化数据库的设计B.数据库的设计范式有助于减少数据冗余C.设计数据库时,一定要严格遵守设计范式。
满足的范式级别越高,系统性能就越好4、用于表示数据库实体之间关系的图是()。
A.实体关系图B.数据模型图C.实体分类图D.以上都不是5、下面的()存储过程用于添加一个数据库安全帐户并授予它访问权限。
A.sp_grantdbaccessB.sp_grantloginC.sp_grantuserD.sp_grantall6、创建图书借阅表时,“归还日期”默认为当天,且必须晚于“借出日期”,应采用()约束。
(多项选择)A.检查约束B.默认约束C.主键约束D.外键约束7、在SQL Server 中,删除数据库使用()语句。
A.REMOVEB.DELETEC.ALTERD.DROP8、下列()语句可以用来从WHILE语句块中退出。
A.CLOSEB.BREAKC.EXITD.以上都是9、要将一组语句执行10次,下列()结构可以用来完成此项任务。
A.IF….ELSEB.WHILEC.CASED.以上都不是10、给变量赋值时,如果数据来源于表中的某一列,应采用()方式。
A.printB.setC.select11、SELECT * FROM stuInfo WHERE stuNo( ) (SELECT stuNo FROMstuMarks)括号中应该填()比较合理。
A.“=”B.“IN”C.“LIKE”D.“>=”12、下列()子句可以与子查询一起使用以检查行或列是否存在。
A.UNIONB.EXISTSC.DISTINCTPUTE BY13、下列()可用于创建一个新表,并用已存在的表的数据填充新表。
数据库实验总汇二、使用SQL Server 工具在管理数据库系统和运行SQL查询的两个主要工具是企业管理器和查询分析器三、实验目的1.熟悉数据库的交互式SQL工具。
2.熟悉通过SQL对数据库进行操作。
3.完成上机练习。
四、实验内容(打※为选做题)Part A1.使用CREATE语句创建数据库2. 使用CREATE语句创建基本表3.更改基本表的定义,增加列,修改列的数据类型。
4.创建表的索引,取消表的索引1、数据库的建立使用SQL 语句建立关系数据库schooldemo2、基本表的建立在数据库schooldemo下,使用SQL 语句建立关系数据库表:人员表PERSON(Pno,Pname, Page),房间表ROOM(Rno,Rname,Rarea),表PR(Pno,Rno,Date).其中,表PERSON :Pno(CHAR(8),主码,非空,唯一),Pname(CHAR(20),非空),Page(INT);表ROOM:Rno(CHAR(8),主码,非空,唯一),Rname(CHAR(20)),Rarea(FLOAT (10));表PR:Pno(CHAR(8),非空,唯一),Rno(CHAR(8),非空,唯一),Date (DATETIME);(三个表之间有联系)3、更改基本表的定义,增加列,删除列,修改列的数据类型。
更改表PERSON,增加属性Ptype(类型是CHAR ,长度为10),把表ROOM中的属性Rname的数据类型改为长度为40。
4、创建表的索引,取消表的索引为ROOM表创建按Rno降序排列的索引创建PERSON表按Pname升序排列的唯一性索引取消PERSON表Pname升序索引5、删除表ROOM实验过程(1.a)1、数据库的建立使用SQL 语句建立关系数据库schooldemocreate database schooldemoon(name=schooldemo,filename='e:\123\school_data.mdf',size=5mb,maxsize=15mb,filegrowth=10%)log on(name=schooldemo_log,filename='e:\123\schooldemo.ldf',size=5mb,maxsize=15mb,filegrowth=4mb)2、基本表的建立在数据库schooldemo下,使用SQL 语句建立关系数据库表:人员表PERSON(Pno,Pname, Page),房间表ROOM(Rno,Rname,Rarea), 表PR(Pno,Rno,Date).其中,表PERSON :Pno(CHAR(8),主码,非空,唯一),Pname(CHAR(20),非空),Page(INT);表ROOM:Rno(CHAR(8),主码,非空,唯一),Rname(CHAR(20)),Rarea(FLOAT(10));表PR:Pno(CHAR(8),非空,唯一),Rno(CHAR(8),非空,唯一),Date(DATETIME);(三个表之间有联系)create table person(pno char (8)primary key,pname char (20),page int);create table room(rno char (8) primary key,rname char(20),rarea float(10));create table pr(pno char (8),rno char (8),date datetime,primary key(pno,rno),foreign key(pno) references person(pno),foreign key(rno) references room(rno));3、更改基本表的定义,增加列,删除列,修改列的数据类型。
习题13、简述数据库系统的组成。
答:数据库系统一般由数据库、数据库管理系统(及其开发工具)、数据库管理员(DataBase Administrator ,DBA )和用户组成。
4、试述数据库系统的三级模式结构。
这种结构的优点是什么?答:数据库系统的三级模式结构是指数据库系统是由外模式、模式和内模式三级构成,同时包含了二级映像,即外模式/模式映像、模式/内模式映像,如下图所示。
数据库应用1……外模式A 外模式B 模式应用2应用3应用4应用5……模式外模式/模式映像模式/内模式映像数据库系统的这种结构具有以下优点:(1)保证数据独立性。
将外模式与模式分开,保证了数据的逻辑独立性;将内模式与模式分开,保证了数据的物理独立性。
(2)有利于数据共享,减少了数据冗余。
(3)有利于数据的安全性。
不同的用户在各自的外模式下根据要求操作数据,只能对限定的数据进行操作。
(4)简化了用户接口。
按照外模式编写应用程序或输入命令,而不需了解数据库全局逻辑结构和内部存储结构,方便用户系统。
5、什么是数据的物理独立性与逻辑独立性?并说明其重要性。
答:(1)数据的物理独立性是指数据的物理结构(包括存储结构、存取方式等)的改变,存储设备的更换,物理存储的更换,存取方式改变等都不影响数据库的逻辑结构,从而不致引起应用程序的变化。
(2)数据的逻辑独立性是指数据库总体逻辑结构的改变,如修改数据模式,增加新的数据类型、改变数据间联系等,不需要相应修改应用程序。
(3)数据的独立性使得数据库中数据独立于应用程序而不依赖于应用程序,也就是说数据的逻辑结构、存储结构与存取方式的改变不影响应用程序。
相应的,数据的独立性也使得应用程序的编制不再依赖于数据的物理和逻辑结构,提高了应用程序的可移植性与鲁棒性。
从理论上说,数据的独立性可以使数据的组织和应用程序的编制完全分离。
8、什么是数据模型?答:数据模型(Data Model )是一种抽象模型,是对现实世界数据特征的抽象。
SQL高级查询语句SQL高级查询语句--交互式SQL语句1.1 创建数据库(unis_db_日期)及其基本表(学生、课程、选课)1)建立一个“学生”表Student,它由学号sno、姓名sname、性别ssex、年龄sage、所在系sdept五个属性组成,其中学号为主属性,ssex默认为‘男’,年龄大于0。
2)建立“课程”表Course,包括课程号cno,课程名称cname,选修课程cpno,学分credit,要求cno建立主键,cpno是外键。
3)建立“选课”表StudentCourse,包括学号sno,课程号cno,成绩grade,要求建立主键及与student及course表联接的外键。
1.2 数据查询1)查询Student表的所有信息。
2)查询学生的姓名和出生年(2010-年龄,并命名为birth)。
3)查询年龄在20-22之间的学生信息。
4)查询数学系(Math)学生的学号和姓名。
5)查询选修了课程的学生学号(distinct)。
6)查询选修课程号为C1的学生号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同按学号的升序排列。
7)查询选修课程号为C1且成绩在80~90之间的学生学号和成绩,并成绩乘以0.8输出。
8)查询数学系(Math)或计算机系(CS)姓张的学生的信息。
9)查询数学系(Math)或计算机系(CS)姓张年龄为21-22的学生信息。
10)查询学生表中年龄不为空的学生信息。
11)查询各个课程号、相应的选课人数及平均分。
12)查询各个课程号、相应的选课人数及平均分,且平均分大于80的课程号。
13)查询各个课程号、相应的选课人数,且该课程平均分大于80的,并按课程号的降序排列。
1.3 连接查询1)把学生表和选课表广义连接。
2)查询学生的选课信息(学生表与选课表的自然连接)。
3)求每门课的先行课的先行课。
4)学生表与选课表的左外连接、右外连接及全外连接。
5)查询选修‘操作系统’的学生姓名。
实验8 查询复习一、程序分析题已知两个关系表:学生关系表Stu(SNO,SNAME,SAGE,SDEPT),各字段的意义依次为学号、姓名、年龄和所属院系;学生选课关系表SC(SNO,CNO,GRADE),各字段的意义依次为学号、课程号和成绩分析并写出以下各段T-SQL代码所能完成的查询功能1.SELECT Stu.SNO , Stu.SNAMEFrom Stu, SCWhere Stu.SNO=SC.SNO AND O=’06’查询选修了课程号为06课程的所有学生的学号与姓名2.SELECT Stu.SNO , Stu.SNAME, Stu.SDEPT, O, SC.GRADEFrom Stu, SCWhere Stu.SNO=SC.SNO查询所有学生的学号、姓名、所属院系、选修的课程号与成绩3.SELECT Stu.SNAME From Stu, SCWhere Stu.SNO=SC.SNO AND O=’06’ AND SC.GRADE>95查询选修了课程号为06课程且成绩超过95分的学生姓名4.SELECT SNO From SCWhere SCORE=(SELECT MAX(GRADE) FROM SC Where CNO=’06’)查询与课程号为06的课程最高成绩相等的学生的学号5.SELECT SNO ,SNAME,SDEPT,GRADEFrom StuWhere SDEPT IN(SELECT SDEPT From Stu Where SNAME=’刘春鹅’)查询与学生‘刘春鹅’在同一个院系的学生信息6.SELECT SNAMEFrom StuWhere NOT EXISTS(SELECT * FROM SC Where SC.SNO=Stu.SNO and CNO=’06’)以上代码的查询结果为:查询没有选修课程号为06课程的学生姓名7.SELECT SNOFrom SCWhere CNO=’02’IntersectSELECT SNOFrom SCWhere CNO=’06’以上代码的查询结果为:查询选修了课程号为02课程的学生学号集合与选修了课程号为06课程的学生学号集合的交集数据集二、--(1) 查询课程表中所有课程的课程编号和课程名称。
大学sql数据库考试题及答案一、单项选择题(每题2分,共10题)1. SQL代表什么?A. Structured Query LanguageB. Standard Query LanguageC. Simple Query LanguageD. Sequential Query Language答案:B2. 在SQL中,哪个命令用于创建新的数据库表?A. CREATE TABLEB. CREATE DATABASEC. INSERT INTOD. SELECT INTO答案:A3. 如何在SQL查询中选择所有列?A. SELECT *B. SELECT ALLC. SELECT ALL COLUMNSD. SELECT ALL *答案:A4. SQL中的主键(Primary Key)是什么?A. 可以有多个值的字段B. 可以为空的字段C. 表中每行的唯一标识符D. 用于排序的字段5. 以下哪个SQL命令用于删除表?A. DROP TABLEB. DELETE TABLEC. REMOVE TABLED. CLEAR TABLE答案:A6. SQL中的外键约束用于实现什么?A. 存储备注信息B. 防止破坏表之间的关系C. 存储表的创建日期D. 存储表的创建者信息答案:B7. 如何在SQL查询中使用别名?A. SELECT column_name AS alias_nameB. SELECT column_name = alias_nameC. SELECT column_name (alias_name)D. SELECT alias_name (column_name)答案:A8. SQL中的事务是什么?A. 一组必须一起执行的SQL语句B. 单个SQL命令C. 数据库的一个备份D. 数据库的一个索引答案:A9. 在SQL中,哪个命令用于更新表中的记录?B. MODIFYC. CHANGED. ALTER答案:A10. SQL中的视图是什么?A. 一个存储在数据库中的虚拟表B. 一个数据库的图形界面C. 一个数据库的物理表D. 一个数据库的备份文件答案:A二、多项选择题(每题3分,共5题)1. 下列哪些是SQL中的聚合函数?A. COUNTB. AVGC. SUMD. MAX答案:ABCD2. 在SQL中,哪些关键字用于数据的连接操作?A. JOINB. INNER JOINC. LEFT JOIND. RIGHT JOIN答案:ABCD3. 下列哪些是SQL中的约束类型?A. PRIMARY KEYB. FOREIGN KEYC. UNIQUED. CHECK答案:ABCD4. SQL中的哪些命令用于数据的插入?A. INSERT INTOB. ADD INTOC. PUT INTOD. CREATE INTO答案:A5. 在SQL中,哪些命令用于数据的删除?A. DELETE FROMB. REMOVE FROMC. DROP TABLED. TRUNCATE TABLE答案:AD三、简答题(每题5分,共2题)1. 请简述SQL中的索引是什么,并说明其作用。
高级SQL查询与优化考试(答案见尾页)一、选择题1. 在SQL查询中,用于分组数据的关键字是?A. GROUP BYB. ORDER BYC. DISTINCTD. HAVING2. 以下哪个SQL命令可以用来查看表结构?A. SELECT * FROM information_schema.TABLES;B. DESCRIBE table_name;C. SHOW CREATE TABLE table_name;D. all of the above3. 在执行SQL查询时,以下哪个操作可以用来排序查询结果?A. ORDER BYB. GROUP BYC. JOIND. DISTINCT4. 下列哪一个SQL函数用于计算字符串的长度?A. LENGTHB. CONCATC. SUBSTRD. TRIM5. 在SQL中,用于限制查询结果数量的关键字是?A. LIMITB. OFFSETC. FETCHD. ALL6. 对于给定的表名,如何使用SELECT语句查询所有列?A. SELECT * FROM table_name;B. SELECT column1, column2 FROM table_name;C. SELECT * FROM table_name WHERE 1=1;D. SELECT distinct * FROM table_name;7. 在SQL查询中,哪种运算符用于返回两个或多个表中的相同列的值?A. INNER JOINB. LEFT JOINC. RIGHT JOIND. FULL OUTER JOIN8. 为了提高查询性能,应该避免使用哪种类型的JOIN?A. INNER JOINB. LEFT JOINC. RIGHT JOIND. FULL OUTER JOIN9. 在SQL中,如何使用GROUP BY和聚合函数来按类别汇总销售数据?A. SELECT category, SUM(sale_amount) FROM sales GROUP BY category;B. SELECT category, COUNT(category) FROM sales GROUP BY category;C. SELECT category, AVG(sale_amount) FROM sales GROUP BY category;D. SELECT category, MAX(sale_amount) FROM sales GROUP BY category;10. 在SQL查询中,如何使用子查询来为另一个查询提供条件?A. 使用IN操作符B. 使用比较运算符(如=<, >, <=>)C. 使用SELECT语句并省略WHERE子句D. 使用带有CASE语句的IFNULL函数11. 在SQL查询中,哪个子句用于指定查询结果的列?A. FROMB. WHEREC. GROUP BYD. ORDER BY12. 在执行SELECT语句时,如果想要忽略空值(NULL)导致的性能问题,应该使用哪个关键字?A. DISTINCTB. NULLIFC. COALESCED. ISNULL13. 在SQL的聚合函数中,哪个函数用于计算所有行的总和?A. SUMB. COUNTC. AVGD. MAX14. 在多表联接查询中,为了提高查询效率,你应该选择哪种类型的联接?A. INNER JOINB. LEFT JOINC. RIGHT JOIND. FULL OUTER JOIN15. 当你使用LIKE操作符进行模式匹配时,如果模式以通配符开始(例如%,_),那么你应该使用哪种类型的通配符?A. 子串通配符B. 匹配任何单个字符C. 匹配零个或多个字符D. 正则表达式通配符16. 在SQL中,为了更改查询结果的排序方向,应该使用哪个关键字?A. ORDER BYB. GROUP BYC. HAVINGD. DISTINCT17. 如果你的SQL查询中包含多个条件,你应该使用哪种逻辑运算符来组合这些条件?A. ANDB. ORC. NOTD. BETWEEN18. 在SQL的窗口函数中,哪个函数用于计算查询范围内的行聚合值?A. ROLLUPB. CUME_DISTC. LEADD. FIRST_VALUE19. 当你想要返回查询结果中的前几个记录时,应该使用哪个关键字?A. LIMITB. OFFSETC. ROW_NUMBERD. FETCH20. 在SQL查询中,如果你的目标是检索某个特定日期的数据,你应该使用哪种类型的日期函数?A. DATEB. TIMEC. DATETIMED. TIMESTAMP21. 在SQL查询中,以下哪个关键字用于指定查询结果的排序?A. ORDER BYB. GROUP BYC. HAVINGD. DISTINCT22. 在进行数据库查询时,为了提高性能,你应该关注哪些关键因素?A. 使用合适的索引B. 减少数据量C. 优化查询语句D. 使用更强大的硬件资源23. 以下哪个查询操作会返回表中的所有行,即使它们没有满足查询条件?A. ALLB. DISTINCTC. DISTINCT OND. LEFT JOIN24. 在SQL中,什么是索引?它的主要作用是什么?A. 索引是一种特殊的文件,用于快速查找数据库表中的数据。
实验4 数据的高级查询(一)实验目的:1. 掌握表中数据的查询方法及操作方法2. 掌握连接查询与嵌套查询的方法3. 掌握SELECT 语句的GROUP BY 和Having的使用方法实验内容:1.查询每个学生及其选修课程的情况:select student.*, sc.* from student, sc where student.sno=sc.sno2.查询每一门课程的间接先行课(只求两层即先行课的先行课):select o, Second.pcno 间接先行课from course First, course Second where First.pcno=o比较:select o, Second.pcno 间接先行课from course First, course Second where First.pcno=o and Second.pcno is not null3.列出所有学生的基本情况和选课情况, 若没有选课,则只列出基本情况信息:select s.sno, sname, ssex,sdept, cno, grade from student s, sc sc where s.sno*=sc.sno4.查询每个学生的学号, 姓名, 选修的课程名和成绩:select S.sno, sname, cname, grade from student S, course C, sc SC where S.sno=SC.sno and o=o5.查询各系的学生的人数并按人数从多到少排序 :Select sdept, Count(*) as 人数 from student group by sdept order by 人数 desc6.查询各系的男女生学生总数, 并按系别,升序排列, 女生排在前:select sdept,ssex,Count(*) as 人数 from student group by sdept, ssex order by sdept,ssex desc7.查询选修了3门课程已上的学生的学号和姓名:select sno, sname from student where sno in(select sno from sc group by (sno) having count(*)>3)8. 查询每个学生所选课程的平均成绩, 最高分, 最低分,和选课门数: select sno, avg(grade) as 平均成绩,max(grade) as 最高分, min(grade) as 最低分,count(*) as 选课门数 from sc group by sno9. 查询至少选修了2门课程的学生的平均成绩:select sno, avg(grade) as 平均成绩, from sc group by sno having count(*)>=210. 查询平均分超过80分的学生的学号和平均分:Select sno, avg(grade) as 平均成绩from sc group by sno having avg(*)>=80比较: 求各学生的60分以上课程的平均分:select sno, avg(grade) as 平均成绩 from sc where grade>=60 group by sno11. 查询”信息系”(IS)中选修了5门课程以上的学生的学号:select sno from sc where sno in (select sno from student where sdept='IS') group by sno having count(*)>=2补充:在查询的基础上创建新表,例如:将查询结果保存到新表temp_orders。
数据库--SQL练习_参考答案 根据student数据库的内容完成如下任务: 1、在student数据库中,新建一个表:teacher(教师编号,教师姓名),其中,教师编号为char(5),教师姓名char(10),设置主键。
2、向curriculum表添加一列任课教师编号char(5),并与teacher表建立联系。 向原来curriculum表中的记录添加任课教师信息,要求教师“t0003叶钊”必须负责至少两门课程。 以下查询请写出SQL语句: 3、查询姓“刘”的学生的个数; select count(*) from student_info where 姓名like …刘%? 4、查询同名同姓学生名单,并统计同名人数; select distinct 姓名,count(姓名) from student_info group by姓名 5、向grade表中插入一些记录,这些记录要求符合以下条件:没有上过编号“0001”课程的同学学号、“0002”号课的平均成绩; Insert grade(学号,课程编号,分数) select学号,'0002',(Select avg(分数) from grade where 课程编号='0002') from Student_info where 学号not in (Select 学号from grade where 课程编号='0001'); 6、查询课程编号“0002”的成绩比课程编号“0001”课程低的所有同学的学号、姓名; select a.学号from (select学号,分数from grade where课程编号='0001') a,(select学号,分数from grade where课程编号='0002') b where a.分数>b.分数and a.学号=b.学号 7、查询没有学全所有课的同学的学号、姓名; select student_info.学号,student_info.姓名 from student_info, grade where student_info.学号=grade.学号group by student_info.学号, student_info.姓名having count(grade. 课程编号) <(select count(课程编号) from curriculum); 8、创建视图查询各门课程的平均成绩,并按各科平均成绩从低到高和及格率的百分数从高到低顺序; create view view1 as SELECT grade.课程编号AS课程号,课程名称,A VG(分数) A S平均成绩, 100*SUM(CASE WHEN isnull(分数,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS及格百分数FROM grade inner join curriculum on grade.课程编号= curriculum..课程编号GROUP BY grade课程编号, 课程名称 ORDER BY avg(分数),100*SUM(CASE WHEN isnull(分数,0)>=60 THEN 1 ELSE0 END)/COUNT(*) DESC 9、查询各科成绩前三名的学生学号、课程号、分数:(不考虑成绩并列情况) ; SELECT t1.学号as学生ID,t1.课程编号as课程ID,分数 FROM SC t1 WHERE分数IN (SELECT TOP 3 score FROM grade WHERE t1.课程编号=课程编号ORDER BY分数DESC) ORDER BY t1.课程编号 10、查询没学过“叶钊”老师讲授的任一门课程的学生姓名; select student_info.姓名 from student _info where student_info.学号not in(select distinct grade.学号from grade, curriculum,teacher where grade.课程编号=curriculum.课程编号and teacher.教师编号=curriculum.任课教师编号and teacher.教师姓名='叶钊'); 11、把“叶钊”老师教的课的成绩都更改为此课程的平均成绩。 update grade set分数=(select avg(SC_2.分数) from grade SC_2 where SC_2.课程编号= grade.课程编号) from grade,curriculum, teacher where curriculum.课程编号= grade.课程编号and teacher.教师编号= curriculum.任课教师编号and teacher.教师姓名='叶钊';
设教学数据库Education 有三个关系:学生关系S (SNO ,SNAME ,AGE ,SEX ,SDEPT );学习关系SC (SNO ,CNO ,GRADE );课程关系C (CNO ,CNAME ,CDEPT ,TNAME ) 查询问题:检索计算机系的全体学生的学号,姓名和性别; 检索学习课程号为C2的学生学号与姓名; 检索选修课程名为“DS ”的学生学号与姓名; (4)检索选修课程号为C2或C4的学生学号; (5)检索至少选修课程号为C2和C4的学生学号;(6)检索不学C2课的学生姓名和年龄; (7)检索学习全部课程的学生姓名;(8)查询所学课程包含学生S3所学课程的学生学号。
(1)检索计算机系的全体学生的学号,姓名和性别;SELECT Sno ,Sname ,Sex FROM SWHERE Sdept =’CS ’;(2)检索学习课程号为C2的学生学号与姓名;(3)检索选修课程名为“DS ”的学生学号与姓名本查询涉及到学号、姓名和课程名三个属性,分别存放在S 和C 表中,但S 和C 表没有直接联系,必须通过SC 表建立它们二者的联系。
C → SC → S 基本思路:(1)首先在C 表中找出“DS ”课程的课程号Cno ;(2)然后在SC 表中找出Cno 等于第一步给出的Cno 集合中的某个元素Cno ;(3)最后在S 关系中选出Sno 等于第二步中Sno 集合中某个元素的元组,取出Sno 和Sname 送入结果表列。
SELECT Sno ,Sname FROM SWHERE Sno IN (SELECT Sno FROM SCWHERE Cno IN (SELECT Cno FROM CWHERE Cname=‘DS ’));检索选修课程号为C2或C4的学生学号;2.SELECT S.Sno ,SnameFROM S ,SCWHERE S.Sno=SC.Sno AND o=‘C2’;1.SELECT Sno ,SnameFROM SWHERE Sno IN ( SELECT Sno FROM SC WHERE Cno=‘C2’)SELECT SnoFROM SCWHERE Cno=‘C2’OR Cno=‘C4’;检索至少选修课程号为C2和C4的学生学号;SELECT SnoFROM SC X,SC YWHERE X.Sno=Y.Sno AND o=‘C2’AND o=‘C4’;检索不学C2课的学生姓名和年龄;检索学习全部课程的学生姓名;在表S中找学生,要求这个学生学了全部课程。
换言之,在S 表中找学生,在C中不存在一门课程,这个学生没有学。
SELECT SnameFROM S WHERE NOT EXISTS(SELECT *FROM CWHERE NOT EXISTS(SELECT *FROM SCWHERE SC.Sno=S.Sno AND o=o));查询所学课程包含学生S3所学课程的学生学号。
分析:不存在这样的课程Y,学生S3选了Y,而其他学生没有选。
SELECT DISTINCT SnoFROM SC AS XWHERE NOT EXISTS(SELECT *FROM SC AS YWHERE Y.Sno=‘S3’AND NOT EXISTS(SELECT *FROM SC AS ZWHERE Z.Sno=X.Sno AND o=o));1.SELECT SnameFROM SWHERE Sno NOT IN ( SELECT SnoFROM SCWHERE Cno=‘C2’);2.SELECT SnameFROM SWHERE NOT EXISTS ( SELECT *FROM SCWHERE SC.Sno=S.Sno AND Cno=‘C2’);设教学数据库Education有三个关系:学生关系S(SNO,SNAME,AGE,SEX,SDEPT);学习关系SC(SNO,CNO,GRADE);课程关系C(CNO,CNAME,CDEPT,TNAME)查询问题:1:查所有年龄在20岁以下的学生姓名及年龄。
2:查考试成绩有不及格的学生的学号3:查所年龄在20至23岁之间的学生姓名、系别及年龄。
4:查计算机系、数学系、信息系的学生姓名、性别。
5:查既不是计算机系、数学系、又不是信息系的学生姓名、性别6:查所有姓“刘”的学生的姓名、学号和性别。
7:查姓“上官”且全名为3个汉字的学生姓名。
8:查所有不姓“张”的学生的姓名。
9:查DB_Design课程的课程号。
10:查缺考的学生的学号和课程号。
11:查年龄为空值的学生的学号和姓名。
12:查计算机系20岁以下的学生的学号和姓名。
13:查计算机系、数学系、信息系的学生姓名、性别。
14:查询选修了C3课程的学生的学号和成绩,其结果按分数的降序排列。
15:查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。
16:查询学生总人数。
17:查询选修了课程的学生人数。
18:计算选修了C1课程的学生平均成绩。
19:查询学习C3课程的学生最高分数。
20:查询各个课程号与相应的选课人数。
21:查询计算机系选修了3门以上课程的学生的学号。
22:求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。
23:查询每个学生及其选修课程的情况。
24:查询选修了C2课程且成绩在90分以上的所有学生。
25:查询每个学生选修的课程名及其成绩。
26:统计每一年龄选修课程的学生人数。
27:查询选修了C2课程的学生姓名。
28:查询与“张三”在同一个系学习的学生学号、姓名和系别。
29:查询选修课程名为“数据库”的学生学号和姓名。
30:查询与“张三”在同一个系学习的学生学号、姓名和系别。
31:查询选修课程名为“数据库”的学生学号和姓名。
32:查询选修了C2课程的学生姓名。
33:查询所有未选修C2课程的学生姓名。
34:查询与“张三”在同一个系学习的学生学号、姓名和系别。
35:查询选修了全部课程的学生姓名。
36:查询所学课程包含学生S3所学课程的学生学号(1)比较例1:查所有年龄在20岁以下的学生姓名及年龄。
SELECT Sname,SageFROM SWHERE Sage<20; (NOT age>=20)例2:查考试成绩有不及格的学生的学号SELECT DISTINCT SnoFROM SCWHERE grade<60;(2)确定范围例3:查所年龄在20至23岁之间的学生姓名、系别及年龄。
SELECT Sname,Sdept,SageFROM SWHERE Sage BETWEEN 20 AND 23;(3)确定集合例4:查计算机系、数学系、信息系的学生姓名、性别。
SELECT Sname,SsexFROM SWHERE Sdept IN (’CS’, ‘IS’, ‘MATH’);例5:查既不是计算机系、数学系、又不是信息系的学生姓名、性别SELECT Sname,SsexFROM SWHERE Sdept NOT IN (’CS’, ‘IS’, ‘MATH’);(4)字符匹配例6:查所有姓“刘”的学生的姓名、学号和性别。
SELECT Sname,Sno,SsexFROM SWHERE Sname LIKE ‘刘%’;例7:查姓“上官”且全名为3个汉字的学生姓名。
SELECT SnameFROM SWHERE Sname LIKE ‘上官_ _’;例8:查所有不姓“张”的学生的姓名。
SELECT Sname,Sno,SsexFROM SWHERE Sname NOT LIKE ‘张%’;例9:查DB_Design课程的课程号。
SELECT CnoFROM CWHERE Cname LIKE ‘DB\_Design’ ESCAPE ‘\’;(5)涉及空值的查询例10:查缺考的学生的学号和课程号。
SELECT Sno,CnoFROM SCWHERE Grade IS NULL;(不能用=代替){ 有成绩的 WHERE Grade IS NOT NULLL;}例11:查年龄为空值的学生的学号和姓名。
SELECT Sno,SnameFROM SWHERE Sage IS NULL;(6)多重条件查询例12:查计算机系20岁以下的学生的学号和姓名。
SELECT Sno,SnameFROM SWHERE Sdept=‘CS’ AND Sage<20;例13:查计算机系、数学系、信息系的学生姓名、性别。
SELECT Sname,SsexFROM S WHERE Sdept =’CS’ OR Sdept =‘IS’ OR Sdept =’MATH’);3、对查询结果排序例14:查询选修了C3课程的学生的学号和成绩,其结果按分数的降序排列。
SELECT Sno,GradeFROM SCWHERE Cno=‘C3’ORDER BY Grade DESC;例15:查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。
SELECT *FROM SORDER BY Sdep,Sage DESC;4.聚合函数的使用例16:查询学生总人数。
SELECT COUNT(*)FROM S例17:查询选修了课程的学生人数。
SELECT COUNT(DISTINCT Sno)FROM SC例18:计算选修了C1课程的学生平均成绩。
SELECT AVG(Grade)FROM SCWHERE Cno=‘C1’;例19:查询学习C3课程的学生最高分数。
SELECT MAX(Grade)FROM SCWHERE Cno=‘C3’;5、对查询结果分组例20:查询各个课程号与相应的选课人数。
SELECT Cno,COUNT(Sno)FROM SCGROUP BY Cno;该SELECT语句对SC表按Cno的取值进行分组,所有具有相同Cno值的元组为一组,然后对每一组作用聚合函数COUNT以求得该组的学生人数。
如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件组,则可以使用HAVING短语指定筛选条件。
例21:查询计算机系选修了3门以上课程的学生的学号。
SELECT SnoFROM SCWHERE Sdept=‘CS’GROUP BY SnoHAVING COUNT(*)>3;WHERE子句与HAVING短语的根本区别在于作用对象不同。
WHERE子句作用于基本表或视图,从中选择满足条件的元组。
HAVING短语作用于组,从中选择满足条件的组。
例22:求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。