数据库原理实验2数据查询
- 格式:docx
- 大小:409.93 KB
- 文档页数:12
《数据库原理及应用》实验报告实验名称数据库查询实验室502 实验日期求选修了课程的学生学号。
Use 学生课程GoSelect 学号from 学生where 学号in (select 学号from where 课程号 is not null)求选修1102课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列。
Use 学生课程GoSelect 学号,成绩 from 课程,选课 where 课程.课程号and 课程号=1102 order by 成绩 desc,学号 asc求选修课程1102且成绩在80~90分之间的学生学号和成绩,并将成绩乘以系数0.8输出。
Use 学生课程GoSelect 学号,成绩*0.8 as 成绩 from选课 where 成绩 between 80 and求数学系或计算机系姓张的学生的信息。
Use 学生课程GoSelect * from 学生,课程,选课 where 学生.学号=选课.学号 and 课程号=课程.课程号and 姓名like ’张%’and (所在系=’数学’在系=’计算机’)求缺少了成绩的学生的学号和课程号。
Use 学生课程GoSelect 学号,课程号 from 选课 where 成绩 is null连接查询实验语句在“学生选课”数据库中实现下列数据连接查询操作。
查询每个学生的情况以及他(她)所选修的课程。
Use 学生课程GoSelect * from 学生,选课,课程 where 学生.学号=选课.学号课程号=课程.课程号求学生的学号、姓名、选修的课程名及成绩。
Use 学生课程GoSelect 学号,姓名,课程名,成绩 from 学生,选课,课程 where学生求选修1105课程且成绩为90分以上的学生学号、姓名及成绩。
Use 学生课程GoSelect 学号,姓名,成绩 from 学生,选课 where 学生.学号=选课and 课程号=1105 and 成绩>90查询每门课的选课人数。
实验4 数据查询一、实验目的1.掌握SELECT语句的基本语法和查询条件的表示方法;2.掌握连接查询的表示方法;3.掌握嵌套查询的表示方法;4.掌握数据汇总的方法;5.掌握ORDER BY子句的作用和使用方法;6.掌握HAVING子句的作用和使用方法;二、实验内容使用SELECT查询语句,在数据库StudentCourse的Student表、Course 表和StuCourse 表上进行各种查询,包括单表查询、连接查询、嵌套查询,并进行数据汇总,以及使用GROUP BY子句、ORDER BY子句和HAVING子句对结果进行分组、排序和筛选处理。
1.SELECT语句的基本使用;2.连接查询;3.嵌套查询;4.数据汇总;5.使用GROUP BY 子句对结果分组;6.使用ORDER BY子句对结果排序;7.使用HAVING子句对分组结果进行筛选;思考与练习:1.用SELECT语句查询Course表和StuCourse表中的所有记录。
SQL语句:select * from Course;select * from StuCourse;实验结果:2.用SELECT语句查询Course表和StuCourse表中满足指定条件的一列或若干列。
SQL语句:select 课程号,课程名 from Course where 学分=5;select 学号,课程号 from StuCourse where 成绩>80;实验结果:3.查询所有姓名中包含有“红”的学生的学号及姓名。
SQL语句:select 学号,姓名 from Student where 姓名 like '%红%';实验结果:4.用连接查询的方法查找所有选修了“2001” 或“1002”号课程的学生学号和姓名。
SQL语句:selectdistinct Student.学号,姓名from StuCourse,Studentwhere(课程号='1002'or 课程号='2001')and StuCourse.学号=Student.学号;实验结果:5.用子查询的方法查找所有选修了“2001”或“1002”号课程的学生学号和姓名。
实验2 数据库的简单查询和连接查询实验1.实验目的加深对SQL语言的查询语句的理解。
熟练掌握简单表的数据查询、数据排序和数据连接查询的操作方法。
2.实验内容1.简单查询操作。
该实验包括投影、选择条件表达,数据排序,使用临时表等。
具体完成以下题目,将它们转换为SQL语句表示,在学生选课数据库中实现其数据查询操作。
1.查询全体学生的学号和姓名2.查询全体学生的详细记录3.查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示所有系名。
4.查询选修了课程的学生学号,去掉结果中的重复行。
5.查询所有年龄在20~23岁之间的学生姓名、系别和年龄。
6.查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别。
7.查询所有姓刘的学生的姓名、学号和性别。
8.查询DB_Design课程的课程号和学分。
9.查询计算机科学系年龄在20岁以下的学生姓名。
10.查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列。
11.计算1号课程的学生最高分数。
12.查询选修了2门以上课程的学生学号。
13.查询缺少了成绩的学生的学号和课程号。
2.连接查询操作。
该实验包括等值连接、自然连接、求笛卡儿积、一般连接、外连接、内连接、左连接、右连接和自连接等。
14.查询每个学生的情况以及他所选修的课程15.求学生的学号、姓名、选修的课程及成绩16.求选修课程号为2且成绩在90以上的学生学号、姓名和成绩17.查询每一门课程的间接先行课(即先行课的先行课)。
实验二复杂的数据查询
一、实验目的
掌握利用select语句进行复杂的数据查询。
二、实验要求
写出实训时碰到的问题以及解决问题的办法,完成本次实训的体会。
三、实验内容
1.检索限选人数小于平均限选人数的课程名称和教师
2.检索班级号为20000003的学生的学号、姓名、班级代码、班级名称
3.检索学生选课为第1志愿(WILLORDER)的学号、姓名、课程号、课程名称
4.按部门统计课程的平均报名人数,要求显示部门名称、平均报名人数。
5.统计各部门的班级数,要求显示部门编号、部门名称和班级数量。
6.查看“00电子商务”版的选修报名情况。
要求显示学号、姓名、课程编号、课程名称、志愿号,并按学号(升序)、志愿号(降序)排列。
7.查看“甘蕾”同学选修的课程名、学分、上课时间、志愿号,按志愿号(升序)排序查询结果。
8.按系部统计各系的最少报名人数、最多报名人数、平均报名人数和报名总数,并汇总显示所有系部的报名总数。
要求平均报名人数保留两位小数位。
四、实验作业
严格按照各题要求做实验,在实训报告中,需要对知识点进行描述,撰写实验过程及过程中遇到的难点,并给出解决办法或新的心得体会。
数据库原理与应用实验二复杂的数据查询
实验二复杂的数据查询
一、实验目的
掌握利用select语句进行复杂的数据查询。
二、实验要求
写出实训时碰到的问题以及解决问题的办法,完成本次实训的体会。
三、实验内容
1.检索限选人数小于平均限选人数的课程名称和教师
2.检索班级号为20000003的学生的学号、姓名、班级代码、班级名称
3.检索学生选课为第1志愿(WILLORDER)的学号、姓名、课程号、课程名称
4.按部门统计课程的平均报名人数,要求显示部门名称、平均报名人数。
5.统计各部门的班级数,要求显示部门编号、部门名称和班级数量。
6.查看“00电子商务”版的选修报名情况。
要求显示学号、姓名、课程编号、课程名称、志愿号,并按学号(升序)、志愿号(降序)排列。
7.查看“甘蕾”同学选修的课程名、学分、上课时间、志愿号,按志愿号(升序)排序查询结果。
8.按系部统计各系的最少报名人数、最多报名人数、平均报名人数和报名总数,并汇总显示所有系部的报名总数。
要求平均报名人数保留两位小数位。
四、实验作业
严格按照各题要求做实验,在实训报告中,需要对知识点进行描述,撰写实验过程及过程中遇到的难点,并给出解决办法或新的心得体会。
实验训练2:数据查询操作实验目的:基于实验1创建的汽车用品网上商城数据库Shopping,理解MySQL运算符、函数、谓词,练习Select语句的操作方法。
实验内容:1.单表查询【实验2.1】字段查询(1)查询商品名称为“挡风玻璃”的商品信息。
分析:商品信息存在于商品表,而且商品表中包含商品名称此被查询信息,因此这是只需要涉及一个表就可以完成简单单表查询。
(2)查询ID为1的订单。
分析:所有的订单信息存在于订单表中,而且订单用户ID也存在于此表中,因此这是只需要查询订单表就可以完成的查询。
【实验2.2】多条件查询查询所有促销的价格小于1000的商品信息。
分析:此查询过程包含两个条件,第一个是是否促销,第二个是价格,在商品表中均有此信息,因此这是一个多重条件的查询。
【实验2.3】DISTINCT(1)查询所有对商品ID为1的商品发表过评论的用户ID。
分析:条件和查询对象存在于评论表中,对此商品发表过评论的用户不止一个,而且一个用户可以对此商品发表多个评论,因此,结果需要进行去重,这里使用DISTINCT实现。
(2)查询此汽车用品网上商城会员的创建时间段,1年为一段。
分析:通过用户表可以完成查询,每年可能包含多个会员,如果把此表中的创建年份都列出来会有重复,因此使用DISTINCT去重。
【实验2.4】ORDER BY(1)查询类别ID为1的所有商品,结果按照商品ID降序排列。
分析:从商品表中可以查询出所有类别ID为1的商品信息,结果按照商品ID的降序排列,因此使用ORDER BY语句,降序使用DESC关键字。
(2)查询今年新增的所有会员,结果按照用户名字排序。
分析:在用户表中可以完成查询,创建日期条件设置为今年,此处使用语句ORDER BY。
【实验2.5】GROUP BY(1)查询每个用户的消费总金额(所有订单)。
分析:订单表中包含每个订单的订单总价和用户ID。
现在需要将每个用户的所有订单提取出来分为一类,通过SUM()函数取得总金额。
实验内容:1、安装MySQL数据库安装MySQL可以参照文档“MySQL 5安装. doc”,安装MySQL并进行配置,安装成功后,即可操作管理数据库。
.方法一:从开始菜单>MySQL→MySQL Server5. 0 >MySQL Command Line Client,打开控制台界面,提示输入密码,密码输入成功后,登录MySQL数据库,如下图2.1所示方法二:将MySQL的安装路径下的bin目录添加到环境变量path中,打开控制台命令,输入mysq1 - uroot -p,在提示符下输入密码,登录MySQL服务器,如下图2.2所示。
2、安装Navicat for MySQLNavicat for MySQL是一款强大的MySQL数据库管理和开发工具,Navicat使用很好的GUI,可以使用户采用一种安全和更容易的方式创建、组织、存取和共享信息。
安装Navicat for_ _MySQL_ 10.1.7,安装向导启动界面如下图2.3所示。
2.3安装向导界面可以选择系统设置的安装路径,也可以自定义安装路径,点击“安装”按钮,进行安装。
安装完成后启动Navicat,界面显示如图2.4所示连接数据库:点击“连接”按钮连接,打开如下图2.5所示“新建连接”对话框,在“常规”选项卡下重新命名-一个“连接名”,在“密码”后的文本框中输入安装MySQL时设置的密码,点击“连接测试”,如果能够连接到数据库,则会弹出图2.6所示的连接成功提示对话框。
测试连接成功后,点击新建连接对话框中的“确定”按钮,即可连接到MySQL数据库,双击连接名,显示当前连接下的所有的数据甩,双声某个数据库名,即可显示该数据库下的表、视图、函数、事件、查询等信息如图2.7所示,打开scott数据库,有两张表,emp 和userinfo.3、使用SQL命令操作管理数据库使用第- -种或第二二种方法登录数据库,在命令行提示符下,依次输入如下的命令,即完成了scott 数据库中emp表的创建和数据记录的插入操作。
LIAOCHENG UNIVERSITY计算机学院实验报告【 2015 ~ 2016 学年第 2 学期】【一、基本信息】【实验课程】数据库原理与应用【设课形式】独立□非独立√【课程学分】0.5【实验项目】实验二、SQL数据操作及查询【项目类型】基础√综合□设计□研究创新□其它[ ] 【项目学时】 4 【学生姓名】傅雪晨【学号】2014204359【系别专业】电子商务【实验班组】 2014.06【同组学生】【实验室名】综合实验楼【实验日期】【报告日期】【二、实验教师对报告的最终评价及处理意见】实验成绩:(涂改无效)指导教师签名:年月日注:要将实验项目、实验课程的成绩评定及课程考核办法明确告知学生,并报实验管理中心备案3.将教材P70表中的数据添加到数据库SPJDB中. 体会执行插入操作时检查实体完整性规则、参照完整性规则和用户定义完整性规则的效果.Insert into S59select's1','精益','20','天津'unionselect's2','盛锡','10','北京'unionselect's3','东方红','30','北京'unionselect's4','丰泰盛','20','天津'unionselect's5','为民','30','上海'Insert into P59select'p1','螺母','红',12 unionselect'p2','螺栓','绿',17 unionselect'p3','螺丝刀','蓝',14 unionselect'p4','螺丝刀','红',14 unionselect'p5','凸轮','蓝',40 unionselect'p6','齿轮','红',30Insert into J59select'J1','三建','北京'unionselect'J2','一汽','长春'unionselect'J3','弹簧厂','天津'unionselect'J4','造船厂','天津'unionselect'J5','机车厂','唐山'unionselect'J6','无线电厂','常州'union4.删除student表中学号为201215121的学生,体会执行删除操作时检查参照完整性规则的效果.将参照完整性中的删除规则改为“级联(层叠)”(CASCADE),重新删除该学生信息。
_数据库实验二课程实验报告实验名称:姓名班级学号实验台编号同组学生实验课表现出勤、表现得分25% 实验报告得分50%实验总分操作结果得分25%实验目的:1.掌握SELECT语句的基本语法2.掌握SELECT语句中的SELECT子句的作用及使用方法3.掌握SELECT语句中的WHERE子句的作用及使用方法4.掌握SELECT语句中的ORDER BY子句的作用及使用方法5.掌握集合函数的作用及使用方法6.掌握SELECT语句中的GROUP BY子句的作用及使用方法7.熟悉内连接、外连接、自连接和非限制连接的概念8.能够熟练使用连接查询从多个表中查询数据9.能够熟练地使用子查询得到想要的数据实验内容:一、简单查询1.查询XS表中各个同学的所有信息。
select* from XS;2.查询XS表中各个同学的姓名、专业名和总学分。
select姓名,专业,总学分from XS;3.查询XS表中所有同学的学号、姓名和总学分,结果中各列的标题分别指定为num,name和mark。
select学号num,姓名name,总学分mark from XS;4.查询XS表中的学生数据来自哪些专业(使用DISTINCT子句消除结果集中的重复行)。
select distinct专业from XS;5.查询XS表中各个同学的姓名、专业名和总学分,只返回结果集的前5行。
select top 5 姓名,专业,总学分from XS;6.查询XS表中每个学生的学号、姓名和年龄信息。
select datediff(yyyy,出生日期,'2010')年龄from XS;7.查询XS表中专业为“计算机”的同学的情况。
select*from XS where专业='计算机';8.查询XS表中1979年出生的学生姓名和专业情况。
SELECT姓名,专业from XS where year(出生日期)='1979';9.查询XS表中专业名为“计算机”或“电子”或“数学”的学生的情况。
课程名称数据库原理实验序号 2实验项目数据查询实验地点实验学时实验类型验证性指导教师实验员专业班级学号姓名年月日成绩:A教师该学生本次实验的内容丰富,完成的操作步骤详细具体,实验结果正确,在实验报告的填写中态度十分严谨,对数据分析有自己的见解。
四、实验过程(实验步骤、记录、数据、分析)实验准备:在实验一的基础上(包括数据库的建立、定义表和添加表内容)进行实验,下面分别为depts表、students表、courses表、reports表。
一、简单的选择与投影查询1、无条件查询1.1查询全体学生的详细记录。
这是一个无条件的选择查询,其命令为:其命令为:select * from students运行结果如右图,显示整张表的内容。
1.2查询全体学生的姓名(Sname)、学号(Sno)、所在系(dno)。
这是一个无条件的投影查询,其命令为:select sname,ssexfrom students运行结果如右图,显示了表中的三列。
1.3查询全体学生的姓名(Sname)、出生年份及学号(Sno)。
其命令为:select sno,sname,2017-sage as birth from students运行结果如右图,显示了三列内容。
1.4查询全体学生的姓名、出生年份和学号,要求用小写字母表示学号中的字母。
其命令为:select sname,'birth:' title,YEAR(GETDATE())-sagebirthyear,LOWER(sno) lsnofrom students运行结果如右图,显示了四列内容。
1.5查询选修了课程的学生学号。
其命令为:select distinct snofrom reports运行结果如右图,distinct短语是为了消去查询结果中的重复值。
2、条件查询(1)比较条件1.1查询d03系全体学生的学号(Sno)和姓名(Sname)。
其命令为:select sno,snamefrom studentswhere dno='d03'运行结果如右图,显示了d03系的全体学生姓名与学号。
实验二:数据库的简单查询和连接查询实验二:数据库的简单查询和连接查询实验目的:掌握简单表的数据查询、数据排序和数据联结查询的操作方法。
实验内容:简单查询操作和连接查询操作。
实验步骤:一. 单表查询:1. 查询全体学生的学号和姓名:select sno, sname from student2. 查询全体学生的所有信息:select * from student或者 select sno, sname, ssex,sage, sdept from student3. 查询全体学生的姓名, 出生年份,和所在系, 并用小写字母表示所有系名:VFP中: select sname, '出生年份为: ', year(date() - sage, lower(sdept) from studentSQLServer中: select sname, '出生年份为: ', year(getdate()) - sage, lower(sdept) from student4. 给上例的结果集指定列名:VFP中: select sname, ' ‘出生年份为: ' 出生, year(date() - sage 年份, lower(sdept) 系名 from studentSQLServer中: select sname, '出生年份为: ' 出生, year(getdate())- sage 年份, lower(sdept) 系名from student5. 查询选修了课程的学生的学号:select distinct sno from sc比较: select sno from sc6. 查询年龄在20岁以下的学生的姓名及其年龄:select sname, sage from student where sage<207. 查询考试成绩有不及格的学生的学号:select distinct sno from sc where grade<60比较: select sno from sc where grade<608. 查询年龄在20-30岁直接的学生的姓名, 姓名, 所在系:select sname, ssex, sdept from student where sage between 20 and 309. 查询 IS,CS,MA系的所有学生的姓名和性别:select sname, ssex from student where sdept in ('IS', 'MA','CS')10. 查找所有姓’李’的学生的姓名, 学号和性别:select sname, sno, ssex from student where sname like '李%' 比较: 将学生表中的’95001’号学生的姓名’李勇’改为’李勇勇’, 再执行:select sname, sno, ssex from student where sname like '李_'11. 查询没有先行课的课程的课程号cno和课程名cname:select cno, cname from course where pcno is null二. 查询结果排序12. 查询选修了3号课程的学生的学号和成绩, 并按分数降序排列:select sno, grade from sc where cno='3' order by grade DESC23. 查询全体学生的情况,查询结果按所在系号升序排列, 同一系中的学生按年龄降序排列:select * from student order by sdept ASC, sage DESC三. 连接查询:14. 查询每个学生及其选修课程的情况:select student.*, sc.* from student, sc where student.sno=sc.sno比较: 笛卡尔集: select student.*, sc.* from student, sc自然连接: select student.sno, sname, ssex, sdept, cno, grade from student, sc where student.sno=sc.sno15. 查询每一门课程的间接先行课(只求两层即先行课的先行课):select /doc/ac16672179.html,o, Second.pcno 间接先行课from course First, course Second where First.pcno=/doc/ac16672179.html,o 比较:select /doc/ac16672179.html,o, Second.pcno 间接先行课 from course First, course Second where First.pcno=/doc/ac16672179.html,o and Second.pcno is not null16. 列出所有学生的基本情况和选课情况, 若没有选课,则只列出基本情况信息:SQL Server 中: select s.sno, sname, ssex,sdept, cno, grade from student s, sc sc where s.sno*=sc.snoVFP中: select s.sno, sname, ssex,sdept, cno, grade from student s left join sc sc on s.sno=sc.sno17. 查询每个学生的学号, 姓名, 选修的课程名和成绩:select S.sno, sname, cname, grade from student S, course C, sc SC where S.sno=SC.sno and /doc/ac16672179.html,o=http://www.doc /doc/ac16672179.html,o思考:如何求出不及格学生的学号, 姓名, 不及格的课程名以及成绩。
实验二MySQL数据库操作实验实验目的:基于实验1创建的汽车用品网上商城数据库Shopping,理解MySQL 运算符、函数、谓词,练习Select语句的操作方法。
实验内容:1.单表查询【实验2.1】字段查询(1)查询商品名称为“挡风玻璃”的商品信息。
分析:商品信息存在于商品表,而且商品表中包含商品名称此被查询信息,因此这是只需要涉及一个表就可以完成简单单表查询。
(2)查询ID为1的订单。
分析:所有的订单信息存在于订单表中,而且订单用户ID也存在于此表中,因此这是只需要查询订单表就可以完成的查询。
【实验2.2】多条件查询查询所有促销的价格小于1000的商品信息。
分析:此查询过程包含两个条件,第一个是是否促销,第二个是价格,在商品表中均有此信息,因此这是一个多重条件的查询。
【实验2.3】DISTINCT(1)查询所有对商品ID为1的商品发表过评论的用户ID。
分析:条件和查询对象存在于评论表中,对此商品发表过评论的用户不止一个,而且一个用户可以对此商品发表多个评论,因此,结果需要进行去重,这里使用DISTINCT实现。
(2)查询此汽车用品网上商城会员的创建时间段,1年为一段。
分析:通过用户表可以完成查询,每年可能包含多个会员,如果把此表中的创建年份都列出来会有重复,因此使用DISTINCT去重。
【实验2.4】ORDER BY(1)查询类别ID为1的所有商品,结果按照商品ID降序排列。
分析:从商品表中可以查询出所有类别ID为1的商品信息,结果按照商品ID的降序排列,因此使用ORDER BY语句,降序使用DESC关键字。
(2)查询今年新增的所有会员,结果按照用户名字排序。
分析:在用户表中可以完成查询,创建日期条件设置为今年,此处使用语句ORDER BY。
【实验2.5】GROUP BY(1)查询每个用户的消费总金额(所有订单)。
分析:订单表中包含每个订单的订单总价和用户ID。
现在需要将每个用户的所有订单提取出来分为一类,通过SUM()函数取得总金额。
《数据库原理》实验报告书学号:姓名:专业班级:课程名称数据库原理实验项目名称数据查询与更新实验项目类型验证演示综合设计指导教师徐凯华成绩√一实验目的1.掌握使用SQL语句单表查询;2.掌握使用SQL语句多表连接查询,嵌套查询;3.掌握使用SQL语句实现数据的更新。
二实验内容1、给每张表插入5条以上数据。
2、完成下面查询。
1)查询年龄大于25岁的女学生的学号和姓名。
2)查询选修了“数据库系统概论”课程的学生姓名。
3)统计选修2号课程的人数。
4)查询平均成绩大于80分的学生的学号。
5)统计每个系的学生人数。
6)查询选修数据库课程并且成绩不及格的学生学号和姓名。
7) 查询每门课程先修课的学分。
8)查询成绩在60到80之间的所有记录。
9)查询成绩为85,86或88的记录。
10) 查询所有不姓“王”的学生记录。
11)以系别和年龄从大到小的顺序查询Student表中的全部记录。
12)统计男女生分别有多少人。
13)查询姓名的第二个字为“小”字的女生信息。
14)查询学生的成绩信息,先按学号升序排序,再按成绩降序排序。
三实验步骤1、给每张表插入5条以上数据。
1)插入学生表INSERT INTO Student(Sno,Sname,Sage,Ssex) VALUES('','李小明',23,'男'); INSERT INTO Student(Sno,Sname,Sage,Ssex) VALUES('','王大刚',26,'男'); INSERT INTO Student(Sno,Sname,Sage,Ssex) VALUES('','没头脑',28,'男'); INSERT INTO Student(Sno,Sname,Sage,Ssex) VALUES('','李小红',32,'女'); INSERT INTO Student(Sno,Sname,Sage,Ssex) VALUES('','王小华',50,'女'); INSERT INTO Student(Sno,Sname,Sage,Ssex) VALUES('','不高兴',18,'男');三实验步骤2)插入课程表INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES('001','数据库系统概论','006',5);INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES('002','数据结构','006',6);INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES('003','数据库系统概论','002',8);INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES('004','JAVA程序设计','001',6);INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES('005','大学英语','003',5);INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES('006','高等数学','004',5);3)插入关系表INSERT INTO SC(Sno,Cno,Grade) VALUES('','006','80');INSERT INTO SC(Sno,Cno,Grade) VALUES('','005','85');INSERT INTO SC(Sno,Cno,Grade) VALUES('','004','86');INSERT INTO SC(Sno,Cno,Grade) VALUES('','003','88');INSERT INTO SC(Sno,Cno,Grade) VALUES('','002','76');INSERT INTO SC(Sno,Cno,Grade) VALUES('','001','50');2、完成下面查询。
数据库原理与应⽤实验2-数据查询电⼦与信息⼯程学院实验报告班级学号姓名吴前斌同组实验课程:数据库实验实验项⽬:数据查询实验⽇期:2019 年04 ⽉08 ⽇3、在查询窗⼝下⽤SELECT语句完成下列查询:1)检索⾄少选修课程“数据结构”和“C语⾔”的学⽣学号;Sql语句:查询结果描述:2)检索学习课程号为C02的学⽣学号和姓名;Sql语句:查询结果描述:3)检索选修课程“数据库”的学⽣学号和姓名;Sql语句:查询结果描述:4)检索选修课程号为C02或C04的学⽣学号;Sql语句:查询结果描述:5)检索⾄少选修课程号为C02和C04的学⽣姓名;Sql语句:查询结果描述:6)检索没有选修课程“数据库”的学⽣姓名和年龄;Sql语句:查询结果描述:7)在SC表中检索男⽣选修的课程名;Sql语句:查询结果描述:8)检索每个学⽣的出⽣年份;Sql语句:查询结果描述:9)在S中检索学⽣的姓名和出⽣年份,输出的列名分别为STUDENT_NAME和BIRTH_YEAR;Sql语句:查询结果描述:10)列出选修课程超过3门的学⽣姓名及选修门数;Sql语句:查询结果描述:11)求选修了各课程的学⽣⼈数;Sql语句:查询结果描述:12)在SC中,求选修课程C01的学⽣的学号和得分,并将结果按分数降序排序;Sql语句:查询结果描述:13)查找每个同学的学号及选修课程的平均成绩情况;Sql语句:查询结果描述:14)列出学⽣所有可能的选课情况;Sql语句:查询结果描述:15)列出每个同学的学号及选修课程的平均成绩情况,没有选修的同学也列出;Sql语句:查询结果描述:16)列出每个同学的学号及选修课程号,没有选修的同学也列出;Sql语句:查询结果描述:17)检索⾄少有两名男⽣选修的课程名;Sql语句:查询结果描述:18)检索S中不姓“王”同学记录;Sql语句:查询结果描述:19)检索和“李军”同性别并同系的同学姓名;Sql语句:查询结果描述:20)统计被学⽣选修的课程门数;Sql语句:查询结果描述:21)求选修C04课程的学⽣的平均年龄;Sql语句:查询结果描述:22)求LIU⽼师所授课程的每门课程的学⽣平均成绩;Sql语句:查询结果描述:23)统计每门课程的学⽣选修⼈数(超过10⼈的课程才统计)。
SQL实验二:数据库查询实验报告实验二数据库的查询实验一、实验目的和要求(1)掌握SQL Server查询分析器的使用方法,加深对SQL和Transact-SQL语言的查询语句的理解。
(2)熟练掌握简单表的数据查询、数据排序和数据连接查询的操作方法。
(3)熟练掌握数据查询中的分组、统计、计算和组合的操作方法。
二、实验内容和原理在实验一定义的“学生成绩数据库”中,使用T-SQL语句完成以下查询:(1)求计算机系学生的学号和姓名。
(2)求选修了数学的学生学号、姓名和成绩。
(3)求选修01课程的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。
(4)查找选修课程的平均成绩位于前三名的学生的学号。
(5)查询计算机系的姓刘且单名的学生的信息。
(6)查询至少选修两门课程的学生学号。
(7)查询学生的学号、课程号以及对应成绩与所有学生所有课程的最高成绩的百分比。
(8)查询选修“数据库”课程,且成绩在80分以上的学生的学号和成绩。
(9)查询所有姓“王”的同学没有选修的课程名。
(请分别用exists和in完成该查询)(10)查询选修了全部课程的学生的姓名。
(请至少写出两种查询语句)(11)求选修了学生“*****”所选修的全部课程的学生学号和姓名。
(12)查询每一门课的间接先修课。
(13)列出所有学生所有可能的选课情况。
(14)列出每个学生的学号及选修课程号,没有选修的学生的学号也一并列出。
(15)输出与“张三”同性别并位于同一个系的所有同学的姓名。
(请至少写出两种查询语句)(16)查询至少被两名男生选修的课程名。
(17)对被两名以上学生所选修的课程统计每门课的选课人数。
要求输出课程号和选修人数,查询结果按人数降序排列;若人数相同,按课程号升序排列。
(18)列出选修课程超过3门的学生姓名及选修门数。
(19)检索至少选修课程号为01和03的学生姓名。
(20)检索至少选修课程“数学”和“操作系统”的学生学号。
数据库表的查询操作(实验⼆),数据库表查询实验【实验⽬的】:了解SQL语⾔的使⽤,进⼀步理解关系运算,巩固数据库的基础知识。
【实验要求】:掌握利⽤Select语句进⾏各种查询操作:单表查询、多表连接及查询、嵌套查询、集合查询等。
【实验内容】⼀、单表查询1.简单查询打开查询分析器,根建⽴teacher表,并加⼊数据。
从teacher表中分别检索出教师的所有信息,以及仅查询教⼯号、姓名和职称。
语句如下:select * from teacherselect tno, tname from teacher如要查询时改变列标题的显⽰,则从teacher表中分别检索出教师教⼯号、姓名、电⼦邮箱信息并分别加上‘教师姓名'、‘教⼯号'、'电⼦邮箱'等标题信息。
select tno ⼯号, tname 姓名, temail 电⼦邮箱 from teacher使⽤TOP关键字:分别从teacher中检索出前2条及前⾯67%的教师的信息。
select top 2 * from teacherselect top 67 percent * from teacher使⽤DISTINCT关键字:从teacher表中检索出教师的职称并且要求显⽰的职称不重复。
select distinct tposition from teacher2.⽤计算列:将teacher表中各教师的姓名、教⼯号及⼯资按95%发放的信息,第2条语句将⼯资按95%发放后列名该为‘预发⼯资'。
语句如下:select tno tname ,tsalary*0.95 from teacherselect tno⼯号, tname姓名, tsalary*0.95 AS 预发⼯资 from teacher3.使⽤ORDER BY⼦句对查询的结果进⾏排序使⽤ORDER BY语句可以对查询的结果进⾏排序,ASC、DESC分别是升序和降序排列的关键字,系统默认的是升序排列。
课程名称数据库原理实验序号 2实验项目数据查询实验地点实验学时实验类型验证性指导教师实验员专业班级学号姓名年月日成绩:A教师该学生本次实验的内容丰富,完成的操作步骤详细具体,实验结果正确,在实验报告的填写中态度十分严谨,对数据分析有自己的见解。
四、实验过程(实验步骤、记录、数据、分析)实验准备:在实验一的基础上(包括数据库的建立、定义表和添加表内容)进行实验,下面分别为depts表、students表、courses表、reports表。
一、简单的选择与投影查询1、无条件查询1.1查询全体学生的详细记录。
这是一个无条件的选择查询,其命令为:其命令为:select * from students运行结果如右图,显示整张表的内容。
1.2查询全体学生的姓名(Sname)、学号(Sno)、所在系(dno)。
这是一个无条件的投影查询,其命令为:select sname,ssexfrom students运行结果如右图,显示了表中的三列。
1.3查询全体学生的姓名(Sname)、出生年份及学号(Sno)。
其命令为:select sno,sname,2017-sage as birth from students运行结果如右图,显示了三列内容。
1.4查询全体学生的姓名、出生年份和学号,要求用小写字母表示学号中的字母。
其命令为:select sname,'birth:' title,YEAR(GETDATE())-sagebirthyear,LOWER(sno) lsnofrom students运行结果如右图,显示了四列内容。
1.5查询选修了课程的学生学号。
其命令为:select distinct snofrom reports运行结果如右图,distinct短语是为了消去查询结果中的重复值。
2、条件查询(1)比较条件1.1查询d03系全体学生的学号(Sno)和姓名(Sname)。
其命令为:select sno,snamefrom studentswhere dno='d03'运行结果如右图,显示了d03系的全体学生姓名与学号。
1.2查询所有年龄在18~22岁(包括18岁和22岁)之间的学生姓名(Sname)及年龄(Sage)。
其命令为:select sno,sagefrom studentswhere sage >= 18 and sage <=20运行结果如右图,共有5名在18岁到20岁的学生。
(2)谓语条件2.1查询年龄在18~22岁(包括18岁和22岁)之间的学生姓名(Sname)及年龄(Sage)。
其命令为:select sno,sagefrom studentswhere sage between 18 and 20运行结果如右图,结果与比较条件的结果一样。
2.2查询年龄不在18-22岁之间的学生姓名(Sname)及年龄(Sage)。
其命令为:select sno,sagefrom studentswhere sage not between 18 and 20运行结果如右图,共有2个人不在18岁到20岁之间。
2.3查询系别编号为d01、d02、d03学生的学号(Sno)、姓名(Sname)和性别(Ssex)。
其命令为:select sno,sname,ssexfrom studentswhere dno='d01' or dno='d02' or dno='d03'运行结果如右图,共有6个人。
2.4查询系别编号既不是d01、d02,也不是d03的学生的姓名(Sname)和性别(Ssex)。
其命令为:select sname,ssexfrom studentswhere dno not in('d01','d02','d03')运行结果如右图,因为没有其他系别的学生,因此查询出来的是空表。
2.5查询所有姓刘的学生的姓名(Sname)、学号(Sno)和性别(Ssex)。
其命令为:select sname,sno,ssexfrom studentswhere sname like '刘%'运行结果如右图,只有一个人姓刘。
2.6查询姓“刘”而且全名不多于3个汉字的学生的姓名(sname)和所在系(dno),其命令为:select sname,dnofrom studentswhere sname like '刘__'运行结果如右图,在英文系统中下横线“_”代表一个英文字符,但在支持汉字的数据库系统中下横线“_”也代表一个汉字,所以匹配串“刘”的后面只需要跟2个“_”(下横线)2.7查询所有不姓刘的学生姓名(Sname)和年龄(Sage)。
其命令为:select sname,sagefrom studentswhere sname not like '刘%'运行结果如右图,5个人不姓刘。
2.8查询课程名为“DB_设计”的课程号(Cno)和学分(Credits)。
其命令为:select cno,creditsfrom courseswhere cname like 'DB\_设计' escape '\'运行结果如右图,ESCAPE‘\’短语表示\为换码字符,这样匹配串中紧跟在\后面的字符“_”不再具有通配符的含义,转义为普通的“”字符。
2.9查询以"DB_"开头,且倒数第2个汉字字符为“设”的课程的详细情况。
其命令为:select *from courseswhere cname like 'DB\_设_' escape '\'运行结果如右图,这里的匹配串为“DB\_%设_。
第1个“_”前面有换码字符“\”,所以它被转义为普通的“_”字符。
由于“%”和“设”字后面的下横线“_”的前面均没有换码字符“\”,所以它们仍作为通配符。
2.10假设某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
试查询缺少成绩的学生的学号(Sno)和相应的课程号(Cno)。
其命令为:select sno,cnofrom reportswhere grade IS NULL运行结果如右图,没有缺少成绩的学生,因此查询结果为空。
IS不能用等号“=”代替,否则不能得到正确的查询结果。
2.11查询所有有成绩的学生学号(Sno)和课程号(Cno)。
其命令为:select sno,cnofrom reportswhere grade is not NULL运行结果如右图,3、查询结果排序3.1查询选修了C03号课程的学生的学号(Sno)和成绩(Grade),并按成绩降序排列。
其命令为:select sno,gradefrom reportswhere cno='c03'order by grade desc运行结果如右图,查询并降序排列。
3.2查询全体学生情况,查询结果按所在系的系别编号(dnot)升序排列,同一系中的学生按年龄(Sage)降序排列。
其命令为:select *from studentsorder by dno,sage desc运行结果如右图3、集函数的使用4.1查询学生总人数。
其命令为:select COUNT(*) renshufrom students运行结果如右图,学生总人数为6人。
4.2查询选修了课程的学生人数。
其命令为:select COUNT( distinct sno) renshufrom reports运行结果如右图,为了避免重复,必须在函数中使用distinct短语。
4.3计算选修C01号课程的学生平均成绩。
其命令为:select A VG(grade) 平均成绩from reportswhere cno='c01'运行结果如右图4.4查询选修C01号课程的学生最高分数。
其命令为:select max(grade) 最高分from reportswhere cno='c01'运行结果如右图4、查询结果分组5.1求各个课程号(Cno)及相应的选课人数。
其命令为:select cno,count(sno) cntsnofrom reportsgroup by cno运行结果如右图5.2查询选修了3门或3门以上课程的学生学号(Sno)。
其命令为:select snofrom reportsgroup by snohaving COUNT(cno) >=3运行结果如右图二、连接查询1、不同表之间的连接查询1.1查询每个学生及其选修课程的情况。
本查询实际上是涉及Students与Reports两个表的连接操作。
这两个表之间的联系是通过公共属性Sno实现的,因此,其操作命令为:select students.*,reports.*from students,reportswhere students.sno=reports.sno运行结果如右图1.2查询每个学生的学号(Sno)、姓名(Sname)、选修的课程名(Cname)及成绩(Grade)。
本查询涉及到三个表的连接操作,完成该查询的SQL语句如下:select students.sno,sname,cname,grade,dnamefrom students,reports,courses,deptswhere students.sno = reports.sno ando = oand students.dno = depts.dno运行结果如右图2、自身连接2.1查询每一门课的间接先修课(即先修课的先修课)。
在Courses表关系中,只有每门课的直接先修课信息,而没有先修课的先修课。
要得到这个信息,必须先对一门课找到其先修课,再按此先修课的课程号,查找它的先修课程。
这就需要要将Courses表与其自身连接。
为方便连接运算,这里为Courses表取两个别名分别为A,B。
则完成该查询的SQL语句为:select o,ame,B.Pre_Cnofrom courses A,courses BWHERE A.Pre_Cno = o运行结果如右图3、外连接把连接查询中1.2中的等值连接改为左连接。
该左连接操作在SQL Server 2000中的命令格式为:selectstudents.sno,sname,ssex,sage,dno,cno,gradefrom students,reportswhere students.sno =reports.sno运行结果如右图三、嵌套查询1、带谓词IN的嵌套查询1.1查询选修了编号为“C02”的课程的学生姓名(Sname)和所在系别编号(dno)。