数据库原理实验报告模板-实验四高级查询
数据库原理实验4多表查询
数据库原理实验4多表查询实验四多表查询1 实验目的与要求(1) 熟练掌握SQL语句的使用。
(2) 熟练使用SQL语句进行连接操作。
2 实验内容(1) 找出同一天进入公司效劳的员工。
(2) 查找与“陈诗杰〞在同一个单位工作的员工姓名、性别、部门和职务。
(3) 在Employee表中查询薪水超过员工平均薪水的员工信息。
(4) 查找有销售记录的客户编号、名称和订单总额。
(5) 查询没有订购商品的客户编号和客户名称。
(6) 使用子查询查找32M DRAM的销售情况,要求显示相应的销售员的姓名、性别,销售日期、销售数量和金额,其中性别用“男〞、“女〞表示。
(7) 查询OrderMaster表中订单金额最高的订单号及订单金额。
(8) 在订单主表中查询订单金额大于“E2022002业务员在2022-1-9这天所接的任一张订单的金额〞的所有订单信息。
(9) 查询单价高于400元的商品编号、商品名称、订货数量和订货单价。
(10) 分别使用左外连接、右外连接、完整外部连接查询单价高于400元的商品编号、商品名称、订货数量和订货单价,并分析比拟检索的结果。
(11) 使用左外连接查找每个客户的客户编号、名称、订货日期、订单金额,其中订货日期不要显示时间,日期格式为“yyyy-mm-dd〞,按客户编号排序,同一客户再按订单金额降序排序输出。
(12) 查找每个员工的销售记录,要求显示销售员的编号、姓名、性别、商品名称、数量、单价、金额和销售日期,其中性别使用“男〞和“女〞表示,日期使用“yyyy-mm-dd〞格式显示。
(13) 查找16M DRAM的销售情况,要求显示相应的销售员的姓名、性别,销售日期、销售数量和金额,其中性别用“男〞、“女〞表示。
(14) 找出公司男业务员所接且订单金额超过2000元的订单号及订单金额。
(15) 查询每种商品的总销售数量及总销售金额,要求显示出商品编号、商品名称、总数量及总金额,并按商品号从小到大排列。
实验报告高级查询
一、实验目的1. 掌握SQL语言中高级查询语句的使用方法。
2. 熟悉使用子查询、连接查询、分组查询、排序查询等高级查询功能。
3. 提高数据库查询能力,解决实际查询问题。
二、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 数据库工具:MySQL Workbench三、实验内容1. 创建数据库和表(1)创建数据库```sqlCREATE DATABASE experiment;```(2)创建表```sqlUSE experiment;CREATE TABLE department (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL);CREATE TABLE employee (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,age INT,department_id INT,salary DECIMAL(10, 2),FOREIGN KEY (department_id) REFERENCES department(id) );```2. 高级查询(1)子查询```sql-- 查询部门名称为“技术部”的员工信息SELECT FROM employee WHERE department_id IN (SELECT id FROM department WHERE name = '技术部');-- 查询年龄大于30岁的员工信息SELECT FROM employee WHERE age > (SELECT AVG(age) FROM employee);```(2)连接查询```sql-- 查询部门名称为“技术部”的员工及其部门信息SELECT e., AS department_nameFROM employee eJOIN department d ON e.department_id = d.idWHERE = '技术部';-- 查询员工姓名为“张三”的部门及其部门领导信息SELECT AS employee_name, AS department_name, AS manager_nameFROM employee eJOIN department d ON e.department_id = d.idJOIN employee m ON d.id = m.department_idWHERE = '张三' AND = '部门领导';```(3)分组查询```sql-- 查询每个部门员工的人数SELECT AS department_name, COUNT(e.id) AS employee_countFROM department dJOIN employee e ON d.id = e.department_idGROUP BY ;-- 查询平均工资大于5000的部门信息SELECT AS department_name, AVG(e.salary) AS average_salaryFROM department dJOIN employee e ON d.id = e.department_idGROUP BY HAVING AVG(e.salary) > 5000;```(4)排序查询```sql-- 查询所有员工信息,按年龄升序排序SELECT FROM employee ORDER BY age ASC;-- 查询所有员工信息,按工资降序排序SELECT FROM employee ORDER BY salary DESC;```四、实验结果与分析通过本次实验,我们学习了SQL语言中高级查询语句的使用方法,包括子查询、连接查询、分组查询、排序查询等。
数据库查询的实验报告
数据库查询的实验报告数据库查询的实验报告引言:数据库查询是一项重要的技术,它可以帮助我们从庞大的数据集中提取所需的信息。
本实验旨在探索数据库查询的原理和实践,通过实际操作和分析,深入了解数据库查询的过程和技巧。
实验目的:1. 理解数据库查询的基本概念和原理;2. 掌握使用SQL语句进行数据库查询的方法;3. 分析不同查询语句的执行效率和优化策略。
实验步骤:1. 数据库准备:选择一个合适的数据库系统,并创建一个包含适当表结构和数据的数据库。
2. 查询语句编写:根据实际需求,编写不同类型的查询语句,包括基本查询、条件查询、排序查询、聚合查询等。
3. 查询语句执行:使用数据库管理系统提供的查询工具,执行编写好的查询语句,并观察查询结果。
4. 查询结果分析:根据查询结果,分析查询语句的执行效率和查询结果的准确性。
5. 优化策略实施:对于执行效率较低的查询语句,尝试优化策略,如索引的使用、查询语句的重写等。
6. 优化效果评估:比较优化前后查询语句的执行效率,并分析优化策略的有效性。
实验结果与讨论:通过实验,我们发现数据库查询的过程中,查询语句的编写和优化对查询效率有重要影响。
以下是我们的实验结果和讨论。
1. 基本查询:基本查询是最简单的查询方式,通过SELECT语句从数据库中选择所需的字段。
我们发现,基本查询的执行效率较高,查询结果准确。
然而,在处理大量数据时,查询时间可能会增加。
为了提高效率,我们可以使用LIMIT子句限制返回的记录数。
2. 条件查询:条件查询是根据特定条件筛选数据的查询方式。
我们使用WHERE子句来指定查询条件,并发现查询结果的准确性和效率与查询条件的选择有关。
使用索引字段作为查询条件可以大大提高查询效率。
3. 排序查询:排序查询是根据指定字段的顺序对查询结果进行排序的方式。
我们使用ORDER BY子句来指定排序字段,并观察到排序查询的执行效率较高。
然而,对于大规模数据集,排序操作可能会导致性能下降。
数据库查询实验报告doc
4. 查询分析器及利用方式。
查询分析器是在开发数据库应用
系统时利用最多的工具。查询分析器的
要紧作用是编辑Transact-SQL,将其发
送到效劳器,并将执行结果及分析显示
出来(或进行存储)。查询分析功能主
要通过测试查询本钱,判定该查询是不是
from 学生表,班级表
where 学生表.班级编号=班级表.班级编号
and 学号 in(
select 学号
from 选课表
where 课程编号 in (
select 课程编号
from 课程表
where 课程名='数据库'
)
);
/*查询学生XX15121选修课程的总学分。*/
SELECT SUM(学分) 总学分
)=(select count(*) from course)
--法三
select Sname
from student
where Sno in
(
selhaving count(*) = (select count(*) from course)
)
--(11)求选修了学生“”所选修的全数课程的学生学号和姓名。
where cno not in
(
select cno from student s,sc
where s.sno=sc.sno and sname like '王%' and co=sco
)
--(10)查询选修了全数课程的学生的姓名。(请至少写出两种查询语句)
--法一
select Sname
from student s
实验4:数据库的高级查询操作
实验4:数据库的高级查询操作实验四:数据库的各类数据查询操作一、实验目的掌握SQL程序设计基本规范,熟练运用SQL语言实现数据的各种查询和设计,包括连接查询、嵌套查询、集合查询等。
二、实验内容和要求针对KingbaseES数据库设计单个表针对自身的连接查询,设计多个表的连接查询;设计各种嵌套查询和集合查询。
了解和掌握SQL查询语句各个子句的特点和作用,按照SQL程序设计规范写出具体的SQL查询语句,并调试通过。
三、实验步骤连接查询1. 查询每个学生及其选修课程的情况: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.sno2. 查询每一门课程的间接先行课(只求两层即先行课的先行课):select /doc/3d4429586.html,o, Second.pcno 间接先行课from course First, course Second where First.pcno=/doc/3d4429586.html,o比较:select /doc/3d4429586.html,o, Second.pcno 间接先行课from course First, course Second where First.pcno=/doc/3d4429586.html,o and Second.pcno is not null3. 列出所有学生的基本情况和选课情况, 若没有选课,则只列出基本情况信息:SQL Server 中: 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 /doc/3d4429586.html,o=/doc/ 3d4429586.html,o5. 查询平均成绩在80分以上的学生姓名Select sname from student,sc where student.sno=sc.sno GROUP BY sc.snoHAVING AVG(sc.grade)>80;高级查询使用带IN谓词的子查询1.查询与’刘晨’在同一个系学习的学生的信息:select * from student where sdept in(select sdept from student where sname='刘晨')比较: select * from student where sdept =(select sdept from student where sname='刘晨') 的异同比较: select * from student where sdept =(select sdept from student where sname='刘晨') and sname<>'刘晨' 比较: select S1.* from student S1, student S2 where S1.sdept=S2.sdept and S2.sname='刘晨'2.查询选修了课程名为’信息系统’的学生的学号和姓名:SQL Server中: select sno, sname from student where sno in (select sno from sc where cno in(select cno from course where cname='信息系统'))3.查询选修了课程’1’和课程’2’的学生的学号:select sno from student where sno in (select sno from sc where cno='1')and sno in (select sno from sc where cno='2') 比较: 查询选修了课程’1’或课程’2’的学生的sno:select sno from sc where cno='1' or cno='2'比较连接查询:select A.sno from sc A, sc B where A.sno=B.sno and /doc/3d4429586.html,o='1' and/doc/3d4429586.html,o='2'使用带比较运算的子查询1.查询比’刘晨’年龄小的所有学生的信息:select * from student where sage<(select sage from student where sname='刘晨')使用带Any, All谓词的子查询2.查询其他系中比信息系(IS)某一学生年龄小的学生姓名和年龄;select sname, sage from student where sage <any< p=""> (select sage from student where sdept='IS')and sdept<>'IS'3.查询其他系中比信息系(IS)学生年龄都小的学生姓名和年龄:select sname, sage from student where sage <all< p="">(select sage from student where sdept='IS')and sdept<>'IS'4.查询与计算机系(CS)系所有学生的年龄均不同的学生学号, 姓名和年龄:select sno,sname,sage from student where sage<>all(select sage from student where sdept='CS')使用带Exists谓词的子查询和相关子查询5.查询与其他所有学生年龄均不同的学生学号, 姓名和年龄:select sno,sname,sage from student A where not exists(select * from student B where A.sage=B.sage andA.sno<>B.sno)6.查询所有选修了1号课程的学生姓名:select sname from student where exists(select * from sc where sno=student.sno and cno='1')7.查询没有选修了1号课程的学生姓名:select sname from student where not exists(select * from sc where sno=student.sno and cno='1')8.查询选修了全部课程的学生姓名:select sname from student where not exists(select * from course where not exists( select * from sc where sno=student.sno and cno=/doc/3d4429586.html,o))12. 查询至少选修了学生95002选修的全部课程的学生的学号:select distinct sno from sc A where not exists(select * from sc B where sno='95002'and not exists(select * from sc C where sno=A.sno and cno=/doc/3d4429586.html,o))13. 求没有人选修的课程号cno和cnamecname:select cno,cname from course C where not exists(select * from sc where /doc/3d4429586.html,o=/doc/ 3d4429586.html,o )14. 查询满足条件的(sno,cno)对, 其中该学号的学生没有选修该课程号cno 的课程select sno,cno from student,course where not exists(select * from sc where cno=/doc/3d4429586.html,o and sno=student.sno)15. 查询每个学生的课程成绩最高的成绩信息(sno,cno,grade):select * from sc A where grade=(select max(grade) from sc where sno=A.sno )集合查询1. 查询数学系和信息系的学生的信息;select * from student where sdept='MA' union select * from student where sdept='IS'2. 查询选修了1号课程或2号课程的学生的学号:select sno from sc where cno='1'Unionselect sno from sc where cno='2'思考:1. 连接查询速度是影响关系数据库性能的关键因素。
高级查询实验总结
高级查询实验总结一、引言高级查询是数据库操作中非常重要的一部分,它不仅可以帮助我们更精准、高效地获取数据库中的信息,还可以对数据进行聚合、计算等操作。
通过对高级查询的学习和实验,我们可以更好地掌握数据库操作的技巧,提高数据处理的能力。
在本次实验中,我们将总结高级查询的相关知识和实验结果,并进行深入分析和总结。
二、实验过程1. 数据库准备首先我们需要准备一个数据库和相应的数据表,以便进行高级查询的实验。
在实验中,我们选择了一个包含学生信息的数据库作为实验对象,其中包括学生表、课程表和成绩表等。
2. 实验环境我们使用了MySQL作为实验环境,通过控制台或者可视化工具对数据库进行操作和查询。
我们还使用了一些辅助工具来提高查询效率和性能。
3. 实验内容在实验中,我们主要对高级查询的各种操作进行了实验,包括但不限于:- 使用子查询进行数据过滤和筛选- 多表连接查询和相关子查询- 使用聚合函数进行数据统计和计算- 对查询结果进行排序和分组- 对查询结果进行分页和限制4. 实验结果通过实验,我们得到了大量的查询结果和数据处理的操作,对于每一种查询方式,我们都进行了分析和总结,并对比了不同查询方式的性能和效果。
同时还结合了具体的实际案例,对相关查询进行了演练和应用,以更好地理解和掌握高级查询的技巧和方法。
三、实验总结1. 高级查询的优势通过本次实验,我们深刻认识到高级查询在数据库操作中的重要性和优势,它可以帮助我们更快速、高效地获取所需信息,并且可以对数据进行复杂的处理和计算。
高级查询还能够有效提高数据库的性能和查询效率,优化数据检索的速度和精准度。
2. 高级查询的应用在实际应用中,高级查询可以广泛应用于各种数据处理和业务场景中,例如报表生成、数据分析、决策支持等方面。
通过合理地运用高级查询,我们可以更好地实现数据挖掘和价值发现,为企业决策和发展提供有力的支持。
3. 高级查询的挑战尽管高级查询有诸多优势,但在实际操作过程中也会遇到一些挑战和难点。
高级查询实验总结
高级查询实验总结一、实验目标本次实验的目标是掌握高级查询技术,通过实验,深入理解数据库查询优化的重要性,以及如何通过合理使用索引、编写高效查询语句等方式提升查询性能。
同时,也希望通过实验,提高我们解决实际问题的能力,以及对数据库系统的深入理解。
二、实验原理高级查询优化主要基于以下几个原理:1.索引原理:索引能够极大地提高查询速度,通过合理地创建和使用索引,可以显著降低数据库的查询负担。
2.查询优化原理:通过优化查询语句,减少不必要的计算和数据检索,可以提高查询性能。
例如,合理地使用连接(JOIN)代替子查询,能够减少数据的冗余检索。
3.数据库系统原理:理解数据库系统的内部工作机制,如数据的存储和检索方式,能够更好地进行查询优化。
三、实验步骤1.创建数据库和表,并添加数据。
2.分析数据,确定需要优化的查询语句。
3.根据查询需求,创建合适的索引。
4.优化查询语句,提高查询效率。
5.对比优化前后的查询性能,分析优化效果。
四、实验结果经过实验,我们发现优化后的查询性能有了显著提升。
具体来说,优化前的查询需要10秒,而优化后的查询只需要2秒。
这表明我们的优化策略是有效的。
五、结果分析通过对比优化前后的查询性能,我们可以看到索引和查询优化的重要性。
在本次实验中,我们根据索引原理创建了合适的索引,并根据查询优化原理优化了查询语句。
这些优化策略显著提高了查询性能。
具体来说,索引的创建减少了数据检索的时间,而查询的优化减少了不必要的计算,提高了查询效率。
六、实验总结本次实验使我们深入理解了高级查询优化的原理和技术。
通过实验,我们掌握了如何根据实际需求创建合适的索引和优化查询语句。
同时,我们也认识到查询优化的重要性,以及在实际应用中合理运用这些技术的重要性。
总的来说,本次实验是一次非常有价值的经验,我们从中受益匪浅。
七、实验反思在本次实验中,我们取得了显著的成果,但也存在一些不足之处。
首先,我们在优化查询语句时,可能还可以进一步挖掘其他可能的优化策略。
数据库实验4实验报告
数据库实验4实验报告一、实验目的本次数据库实验 4 的主要目的是深入了解和掌握数据库中的索引、存储过程以及事务处理等关键技术,通过实际操作和实践,提高对数据库管理系统的运用能力,以及解决实际问题的能力。
二、实验环境本次实验使用的数据库管理系统为 MySQL 80,操作系统为Windows 10。
实验在个人电脑上进行,配置为英特尔酷睿 i5 处理器,8GB 内存。
三、实验内容与步骤(一)索引的创建与使用1、首先,创建了一个名为`students` 的表,包含`id`(主键,自增)、`name`(姓名)、`age`(年龄)、`grade`(年级)等字段。
```sqlCREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),age INT,grade VARCHAR(20));```2、向表中插入了一些示例数据,用于后续的实验操作。
```sqlINSERT INTO students (name, age, grade)VALUES ('张三', 18, '大一'),('李四', 19, '大二'),('王五', 20, '大三'),('赵六', 21, '大四');```3、为`name` 字段创建了一个普通索引,观察查询性能的变化。
```sqlCREATE INDEX idx_name ON students (name);```4、执行查询语句,对比创建索引前后的查询时间。
```sqlSELECT FROM students WHERE name ='张三';```(二)存储过程的创建与调用1、创建了一个简单的存储过程,用于计算两个数的和。
```sqlDELIMITER //CREATE PROCEDURE add_numbers(IN num1 INT, IN num2 INT, OUT result INT)BEGINSET result = num1 + num2;END//DELIMITER ;```2、调用存储过程,传递参数并获取结果。
数据库查询操作实训报告
一、实训目的本次实训旨在通过实际操作,加深对数据库查询语言(SQL)的理解和应用,掌握基本的查询技巧,包括单表查询和多表查询,并能灵活运用各种查询条件、聚合函数、连接操作等,以提高数据检索和处理的能力。
二、实训内容1. 实训环境- 数据库管理系统:MySQL 5.7- 实训数据:使用自建或提供的数据库实例,包含多个表,如用户表、订单表、商品表等。
2. 实训步骤(1)单表查询- 查询所有字段:`SELECT FROM 表名;`- 查询指定字段:`SELECT 字段1, 字段2 FROM 表名;`- 查询指定记录:`SELECT FROM 表名 WHERE 条件;`- 带IN关键字的查询:`SELECT FROM 表名 WHERE 字段 IN (值1, 值2, ...);`- 带BETWEEN AND的范围查询:`SELECT FROM 表名 WHERE 字段 BETWEEN 值1 AND 值2;`- 带LIKE的字符匹配查询:`SELECT FROM 表名 WHERE 字段 LIKE '模式';`- 查询空值:`SELECT FROM 表名 WHERE 字段 IS NULL;`- 带AND的多条件查询:`SELECT FROM 表名 WHERE 条件1 AND 条件2;`- 带OR的多条件查询:`SELECT FROM 表名 WHERE 条件1 OR 条件2;`- 关键字DISTINCT(查询结果不重复):`SELECT DISTINCT 字段 FROM表名;`- 对查询结果排序:`SELECT FROM 表名 ORDER BY 字段 [ASC|DESC];`- 分组查询(GROUP BY):`SELECT 字段1, 字段2, ... FROM 表名GROUP BY 字段1, 字段2, ...;`- 使用LIMIT限制查询结果的数量:`SELECT FROM 表名 LIMIT 起始位置, 数量;`- 集合函数查询:`SELECT COUNT(), SUM(), AVG(), MAX(), MIN() FROM 表名;`(2)多表查询- 为表取别名:`SELECT 表1.字段1, 表2.字段2 FROM 表1 AS t1, 表2 AS t2 WHERE t1.字段1 = t2.字段2;`- 普通双表连接查询:`SELECT FROM 表1, 表2 WHERE 表1.字段1 = 表2.字段1;`- 内连接查询:`SELECT FROM 表1 INNER JOIN 表2 ON 表1.字段1 =表2.字段1;`- 左外连接查询:`SELECT FROM 表1 LEFT JOIN 表2 ON 表1.字段1 = 表2.字段1;`- 右外连接查询:`SELECT FROM 表1 RIGHT JOIN 表2 ON 表1.字段1 = 表2.字段1;`- 复合条件连接查询:`SELECT FROM 表1 INNER JOIN 表2 ON 表1.字段1 = 表2.字段1 AND 表1.字段2 = 表2.字段2;`- 子查询:`SELECT FROM 表1 WHERE 字段1 IN (SELECT 字段2 FROM表2 WHERE 条件);`(3)高级查询- 查询涉及多级联表:`SELECT FROM 表1 AS t1 INNER JOIN 表2 AS t2 ON t1.字段1 = t2.字段1 INNER JOIN 表3 AS t3 ON t2.字段2 = t3.字段1;`- 查询涉及多条件、多表的复杂条件:`SELECT FROM 表1 AS t1 INNER JOIN 表2 AS t2 ON t1.字段1 = t2.字段1 WHERE t1.字段2 = '条件1' OR t2.字段3 = '条件2';`- 查询涉及聚合函数和分组:`SELECT COUNT(), AVG(字段), MAX(字段), MIN(字段) FROM 表1 AS t1 INNER JOIN 表2 AS t2 ON t1.字段1 = t2.字段1 GROUP BY t1.字段1;`3. 实训要求- 熟练掌握单表查询和多表查询的各种技巧。
数据库实验卡4-数据库多表高级查询
天津师范大学软件学院数据库原理实践课程实验卡实验序号: 4 实验室名称:计信学院实验室实验名称数据库的高级查询实验类型验证计划学时 2 人组数 1 首开日期面向专业(逐个填写)主要配置仪器设备名称设备规格型号每组台件数1.计算机 12.投影仪 1消耗材料名称每组消耗量消耗材料名称每组消耗量实验项目简介实验目的:通过上机实验验证数据库的多表的高级查询。
实验内容:1、将studentw数据库还原。
2、在studentw数据库中,完成以下单表查询的操作,将每一个程序保存为.sql。
(1)查询选了Java课程的学生的学号、姓名、所在系和成绩,并对所在系进行如下处理:“计算机系”:显示“CW”;“信息管理系”:显示“IM”;“通信工程系”:显示“COM”,查询结果存入新表w1。
(2)查询“C001”课程的考试情况,列出学号和成绩,对成绩进行如下处理:如果成绩大于等于90,则在查询结果中显示“优”;如果成绩在80到89分之间,则在查询结果中显示“良”;如果成绩在70到79分之间,则在查询结果中显示“中”;如果成绩在60到69分之间,则在查询结果中显示“及格”;如果成绩小于60分,则在查询结果中显示“不及格”,查询结果存入新表w2。
(3)统计每个学生的考试平均成绩,列出学号、考试平均成绩和考试情况,其中考试情况的处理为:如果平均成绩大于等于90,则考试情况为“好”;如果平均成绩在80~89,则考试情况为“比较好”;如果平均成绩在70~79,则考试情况为“一般”;如果平均成绩在60~69,则考试情况为“不太好”;如果平均成绩低于60,则考试情况为“比较差”,查询结果存入新表w3。
(4)统计计算机系每个学生的选课门数,包括没有选课的学生。
列出学号、选课门数和选课情况,其中对选课情况的处理为:如果选课门数超过4,则选课情况为“多”;如果选课门数在2~4,则选课情况为“一般”;如果选课门数少于2,则选课情况为“少”;如果学生没有选课,则选课情况为“未选”。
数据库原理实验报告
数据库原理实验报告一、实验目的本次数据库原理实验旨在通过实际操作和实践,深入理解数据库的基本概念、原理和技术,掌握数据库设计、创建、管理和操作的方法,提高解决实际问题的能力和数据处理的技能。
二、实验环境本次实验使用的软件环境为 Microsoft SQL Server 2019,操作系统为 Windows 10。
硬件环境为一台具备 8GB 内存、Intel Core i5 处理器的计算机。
三、实验内容与步骤(一)数据库设计1、需求分析根据给定的业务场景,明确数据库需要存储的信息和数据之间的关系。
例如,对于一个学生管理系统,需要存储学生的基本信息、课程信息、成绩信息等,并且要确定这些信息之间的关联,如学生与课程的选课关系、课程与成绩的对应关系等。
2、概念设计使用 ER 图(EntityRelationship Diagram,实体关系图)对需求进行建模,清晰地表示出实体(如学生、课程)、属性(如学生的学号、姓名)和实体之间的关系(如选课关系)。
3、逻辑设计将 ER 图转换为关系模式,确定表的结构,包括表名、列名、数据类型、主键和外键等。
例如,学生表(学号,姓名,年龄,性别),课程表(课程号,课程名,学分),选课表(学号,课程号,成绩)。
(二)数据库创建1、启动 SQL Server 2019 数据库管理系统。
2、使用 CREATE DATABASE 语句创建数据库,指定数据库的名称、文件存储位置和初始大小等参数。
3、在创建的数据库中,使用 CREATE TABLE 语句创建各个表,按照逻辑设计的结果定义表的结构。
(三)数据插入1、使用 INSERT INTO 语句向表中插入数据,确保数据的完整性和准确性。
例如,向学生表中插入学生的信息:INSERT INTO Students (StudentID, Name, Age, Gender) VALUES (1, '张三', 20, '男')。
数据库原理复杂查询实验报告
计算机科学与信息学院 软件工程系上机实验报告《数据库原理》实验报告《数据库原理》实验报告题目题目实验4 复杂查询(一)姓名姓名 *** 班级班级 *** 日期日期 ***实验环境:实验环境:SQL Server 2000 SQL Server 2000实验内容与完成情况:一、实验目的本实验的目的使学生熟练掌握SQL Server 查询分析器的使用方法,本实验的目的是使学生进一步掌握SQL Server 查询分析器的使用方法,加深SQL 语言的连接查询的理解。
语言的连接查询的理解。
二、实验内容本实验使用实验三中建立的基本表Student Student、、Course 、SC 和Teacher 中的元组。
中的元组。
Student 学 号 Sno 姓 名 Sname 性 别 Ssex 年 龄 Sage 所在系所在系 Sdept 200215121 李勇李勇 男 20 CS 200215122 刘晨刘晨 女 19 CS 200215123 王敏王敏 女 18 MA 200215125 张立张立 男 19 IS 200215126 欧阳丽欧阳丽女21FL Course课程号课程号 Cno 课程名课程名Cname 先行课先行课 Cpno 学分学分 Ccredit 1 数据库数据库 5 4 2数学数学 2 3 信息系统信息系统 1 4 4 操作系统操作系统 6 3 5 数据结构数据结构 7 4 6 数据处理数据处理 2 7 PASCAL6 4 8DB_Design12SC学号学号 Sno 课程号课程号 Cno 成绩成绩 Grade 200215121 1 92 200215121 2 85 200215121 3 88 200215122 2 90 200215122 3 80 200215122 1 200215123 2 50 200215123 3 70Teacher教师编号教师编号 Tno 教师教师姓名姓名Tname 性 别 Tsex 年 龄 Tage 所在系所在系 Tdept 职称职称 Ttitles 工资工资Twage系主任系主任编号编号 Tdno 110001 钟灵钟灵 女27 CS 讲师讲师 2800110005 110002 杨毅杨毅 男 42 CS 副教授副教授 3500 110005 110003 周倩周倩 女 25 CS 讲师讲师 2800 110005 110005 陈文茂陈文茂 男 48 CS 教授教授 4000 110005 120001 江南江南 男 30 IS 副教授副教授 3500 120003 120002 刘洋刘洋 男 28 IS 讲师讲师 2800 120003 120003 汪明汪明 男 44 IS 教授教授 4000 120003 120004 张蕾张蕾 女 35 IS 副教授副教授 3500 120003 130001 邹佳羽邹佳羽 女 25 MA 讲师讲师 2800 130003 130002 王力王力 男 30 MA 讲师讲师 2800 130003 130003 王小峰王小峰 男 35 MA 副教授副教授 3500 130003 130004 魏昭魏昭 男 40 MA 副教授副教授 3500 130003 140001 王力王力 男 32 FL 副教授副教授 3500 140005 140002 张小梅张小梅 女 27 FL 讲师讲师 2800 140005 140003 吴娅吴娅 女 27 FL 讲师讲师 2800 140005 140004 陈姝陈姝 女 35 FL 副教授副教授 3500 140005 140005 周斌周斌男44FL教授教授4000140005在SQL Server2000查询分析器中,使用查询分析器中,使用连接查询连接查询完成如下查询要求:完成如下查询要求: (1) 求选课学生的基本情况以及他的选修情况;求选课学生的基本情况以及他的选修情况;SELECT Student .*,SC .* FROM S tudent Student ,SCWHERE Student .Sno =SC .Sno ;(2) 求学生的学号、姓名、选修的课程号及成绩;求学生的学号、姓名、选修的课程号及成绩;SELECT Student.Sno,Student.Sname,o,SC.GradeStudent,SCFROM S tudentWHERE Student.Sno=SC.Sno;(3) 求选修课程号为1且成绩在90以上的学生学号、姓名和成绩;以上的学生学号、姓名和成绩; SELECT Student.Sno,Student.Sname,SC.GradeFROM S tudentStudent,SC;WHERE Student.Sno=SC.Sno AND o=1 AND Grade>90(4) 求每一门课程的间接先行课(即先行课的先行课);求每一门课程的间接先行课(即先行课的先行课); SELECT o,SECOND.Cpno as '该课程的先行课'FROM C ourseCourse FIRST, Course SECONDWHERE o=o;(5) 求选修了数学课的学生的学号和姓名;求选修了数学课的学生的学号和姓名;SELECT Student.Sno,Student.SnameStudent,SC,CourseFROM S tudentWHERE Student.Sno=SC.Sno AND o=o AND ame='数学';(6) 求学生李勇选修的总学分;求学生李勇选修的总学分;SELECT SC Sno,SUM(SC Grade) as '总学分'Student,SCFROM S tudentWHERE Student.Sno=SC.Sno AND Student.Sname='李勇'Group by SC.Sno;(7) 求各学生选修的总学分;求各学生选修的总学分;SELECT Student.Sname,SUM(SC.Grade) as '总学分'Student,SCFROM S tudentWHERE Student.Sno=SC.SnoGroup by Student.Sname;(8) 求课程“数据库”的平均成绩;求课程“数据库”的平均成绩;SELECT ame as'数据库',AVG(SC.Grade) as '平均成绩' Course,SCFROM C ourseWHERE o=o AND ame='数据库'Group by ame;(9) 求计算机系学生的选课情况;求计算机系学生的选课情况;SELECT SC.*,Student.Sname,Student.SdeptFROM SC,StudentWHERE SC.Sno=Student.Sno AND Student.Sdept ='CS' ;W HERE(10) 求和钟灵在同一个系的老师姓名;和钟灵在同一个系的老师姓名;SELECT TnameFROM TeacherWHERE Tdept=SELECT Tdept(TeacherFROMTname ='钟灵');WHERE(11) 求吴娅所在系的教师人数;吴娅所在系的教师人数;SELECT COUNT(Tdept)FROM TeacherWHERE Tdept =(SELECT TdeptFROM TeacherWHERE Tname = ‘‘吴娅’);WHERE Tname =(12) 求和王小峰同一职称的教师姓名和所在系;和王小峰同一职称的教师姓名和所在系; SELECT Tname,TdeptFROM TeacherWHERE Ttitles=(SELECT TtitlesFROM TeacherWHERE Tname = ‘‘王小峰’)WHERE Tname =AND Tname != ‘‘王小峰’;AND Tname !=(13) 求和邹佳羽工资相同的教师人数;和邹佳羽工资相同的教师人数;SELECT count(Twage)FROM TeacherWHERE Twage=(TwageSELECT T wageFROM TeacherWHERE Tname= '邹佳羽')AND Tname != '邹佳羽';(14) 求汪明所在系教师的平均工资和最高工资;汪明所在系教师的平均工资和最高工资; SELECT AVG(Twage) as '平均工资',MAX(Twage) as '最高工资' FROM TeacherWHERE Tdept=(TdeptSELECT T deptFROM TeacherWHERE Tname= '汪明');(15) 求至少选修了8个学分的学生学号。
数据查询技术实验报告(3篇)
第1篇一、实验背景随着信息技术的飞速发展,数据库技术在各个领域得到了广泛应用。
数据查询是数据库技术中的一项基本操作,它能够帮助用户从数据库中检索所需的数据。
为了提高数据查询的效率,各种查询技术应运而生。
本次实验旨在通过实际操作,使学生掌握数据查询的基本方法和技术,提高数据检索能力。
二、实验目的1. 熟悉SQL语言的基本语法和查询条件表示方法;2. 掌握单表查询、连接查询、嵌套查询和集合查询等常用查询方法;3. 学会使用聚集函数、分组统计等高级查询技巧;4. 培养实际操作能力和问题解决能力。
三、实验环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 5.73. 开发工具:MySQL Workbench四、实验内容1. 单表查询(1)指定列或全部列查询以学生信息表(student)为例,查询所有学生的姓名和年龄:SELECT name, age FROM student;(2)按条件列查询及模糊查询查询年龄大于20岁的学生:SELECT FROM student WHERE age > 20;查询姓名中包含“张”的学生:SELECT FROM student WHERE name LIKE '%张%';(3)对查询结果排序查询所有学生的姓名,按年龄降序排列:SELECT name, age FROM student ORDER BY age DESC;(4)使用聚集函数的查询查询学生的平均年龄:SELECT AVG(age) AS avg_age FROM student;(5)分组统计查询查询每个专业的学生人数:SELECT major, COUNT() AS student_count FROM student GROUP BY major;2. 连接查询(1)连接查询查询学生姓名和对应的专业名称:SELECT , AS major_name FROM student JOIN major ON student.major_id = major.id;(2)自身连接查询具有相同专业的前三名学生:SELECT AS student1, AS student2 FROM student a, student b WHERE a.major_id = b.major_id AND a.id < b.id ORDER BY a.age LIMIT 3;(3)外连接查询所有学生的姓名和对应的专业名称,即使某些学生没有专业信息:SELECT , AS major_name FROM student LEFT JOIN major ON student.major_id = major.id;3. 嵌套查询(1)返回一个值的子查询查询年龄最大的学生姓名:SELECT name FROM student WHERE age = (SELECT MAX(age) FROM student);(2)返回一组值的子查询查询年龄在20到25岁之间的学生姓名:SELECT name FROM student WHERE age BETWEEN (SELECT MIN(age) FROM student WHERE age > 20) AND (SELECT MAX(age) FROM student WHERE age < 25);4. 集合查询查询年龄不大于19岁或者属于地信专业的学生:SELECT FROM student WHERE age <= 19 OR major = '地信';五、实验总结通过本次实验,我们掌握了数据查询的基本方法和技术,包括单表查询、连接查询、嵌套查询和集合查询等。
数据库实验报告4
数据库实验报告4数据库实验报告4引言:数据库是现代信息管理的重要工具,广泛应用于各个领域。
本实验报告将介绍数据库实验4的内容,主要包括数据库的备份与恢复、数据库的性能优化以及数据库的安全性。
一、数据库的备份与恢复数据库的备份与恢复是数据库管理中非常重要的一环。
在实验中,我们使用了MySQL数据库,通过备份和恢复操作来保障数据的安全性。
1. 数据库的备份数据库的备份可以通过多种方式实现,常见的有物理备份和逻辑备份。
物理备份是将数据库的物理文件进行拷贝,包括数据文件、日志文件等;逻辑备份则是将数据库的逻辑结构进行导出,如SQL语句等。
2. 数据库的恢复数据库的恢复是在数据库出现故障或数据丢失时进行的操作。
在实验中,我们使用了MySQL提供的恢复工具来进行数据库的恢复操作。
二、数据库的性能优化数据库的性能优化是提高数据库查询和操作效率的关键。
在实验中,我们通过索引的创建和查询优化来优化数据库的性能。
1. 索引的创建索引是数据库中用于提高查询效率的重要手段。
在实验中,我们通过创建合适的索引来加快数据库的查询速度。
索引的创建需要考虑字段的选择、索引类型的选择以及索引的维护等因素。
2. 查询优化查询优化是通过调整查询语句和数据库的结构来提高查询效率的方法。
在实验中,我们通过分析慢查询日志和使用数据库的性能监控工具来进行查询优化。
通过调整查询语句的写法、添加合适的索引以及优化数据库的配置参数等方式,可以显著提高数据库的查询性能。
三、数据库的安全性数据库的安全性是保护数据库中数据不受非法访问和恶意操作的重要保障。
在实验中,我们通过用户权限管理和数据加密来提高数据库的安全性。
1. 用户权限管理用户权限管理是通过为用户分配合适的权限来控制其对数据库的访问和操作。
在实验中,我们通过创建不同的用户并为其分配不同的权限来实现数据库的安全管理。
2. 数据加密数据加密是通过对数据库中的敏感数据进行加密处理,确保数据在传输和存储过程中不被窃取或篡改。
数据库系统原理实验报告多表查询
《数据库系统原理》实验报告实验名称:多表查询学院:班级:学号:姓名:实验日期:一、实验准备为了使该实验顺利进行,需要有一台计算机,计算机必须安装Windows 2000、Windows XP或Windows NT操作系统,还必须安装Microsoft SQL Server 2000Microsoft SQL Server 2005任意一版本(个人版、标准版、企业版)。
实验开始之前,必须将本章实验四中创建好的SCDB数据库和ShiYan数据库附加到当前SQL数据库服务器中。
二、实验目的(1)了解查询的概念和方法。
(2)掌握查询分析器的使用方法。
(3)掌握复杂查询的实现方法。
(4)掌握多表连接的方法。
(5)掌握嵌套查询与集合查询的基本方法。
(6)掌握SELECT语句在多表查询中的应用。
三、实验内容针对实验数据库ShiYan,完成以下多表查询操作:(1)查询为工程J1供应红色零件的供应商号码SNO。
在查询分析器中输入下面脚本:use ShiYangoselect SNOfrom SPJwhere PNO IN(select PNOfrom Pwhere COLOR='红'and JNO='J1')结果:(2)查询没有使用天津供应商生产的零件并且当前工程所使用零件的颜色全部为红色的工程号JNO。
在查询分析器中输入下面脚本:use ShiYanselect JNOfrom SPJwhere SNO IN(select SNOfrom Swhere city!='天津')and pno in (select pnofrom pwhere color='红')结果:(3)查询至少选用了供应商S1所供应的全部零件的工程号JNO。
在查询分析器中输入下面脚本:use ShiYangoselect DISTINCT JNOfrom SPJwhere EXISTS(select SNOfrom Swhere SNO='S1')结果:(4)找出工程项目J2使用的各种零件的名称及其重量。
数据库实验报告范本(3篇)
第1篇实验名称:数据库设计与实现实验日期:2023年4月15日实验班级:计算机科学与技术专业1班实验学号:12345678一、实验目的1. 理解数据库设计的基本原理和方法。
2. 掌握数据库概念结构、逻辑结构和物理结构的设计。
3. 学会使用数据库设计工具进行数据库设计。
4. 能够使用SQL语句进行数据库的创建、查询、更新和删除等操作。
二、实验内容1. 数据库概念结构设计- 分析需求,确定实体和实体间的关系。
- 设计E-R图,表示实体、属性和关系。
2. 数据库逻辑结构设计- 将E-R图转换为关系模式。
- 设计关系模式,确定主键、外键等约束。
3. 数据库物理结构设计- 选择合适的数据库管理系统(DBMS)。
- 设计数据库表结构,包括字段类型、长度、索引等。
- 设计存储策略,如数据文件、索引文件等。
4. 数据库实现- 使用DBMS创建数据库。
- 创建表,输入数据。
- 使用SQL语句进行查询、更新和删除等操作。
三、实验步骤1. 数据库概念结构设计- 分析需求,确定实体和实体间的关系。
- 设计E-R图,表示实体、属性和关系。
2. 数据库逻辑结构设计- 将E-R图转换为关系模式。
- 设计关系模式,确定主键、外键等约束。
3. 数据库物理结构设计- 选择合适的数据库管理系统(DBMS)。
- 设计数据库表结构,包括字段类型、长度、索引等。
- 设计存储策略,如数据文件、索引文件等。
4. 数据库实现- 使用DBMS创建数据库。
- 创建表,输入数据。
- 使用SQL语句进行查询、更新和删除等操作。
四、实验结果与分析1. 数据库概念结构设计- 实体:学生、课程、教师、成绩。
- 关系:学生与课程之间有选课关系,教师与课程之间有授课关系。
2. 数据库逻辑结构设计- 学生表(学号,姓名,性别,年龄,班级号)。
- 课程表(课程号,课程名,学分,教师号)。
- 教师表(教师号,姓名,性别,年龄,职称)。
- 成绩表(学号,课程号,成绩)。
数据库实验报告复杂查询
实验五复杂查询1 实验目的与要求(1) 熟练掌握SQL语句的使用。
(2) 熟练使用SQL语句进行连接操作。
2 实验内容(1) 在订单明细表中查询订单金额最高的订单。
实验脚本:实验结果图-1 (1)查询结果(2) 找出至少被订购3次的商品编号、订单编号、订货数量和订货金额,并按订货数量的降序排序输出。
实验脚本:实验结果图-2 (2)查询结果(3) 查找销售总额少于5000元的销售员编号、姓名和销售额。
实验脚本:实验结果图-3 (3)查询结果(4) 找出目前业绩未超过5000元的员工,并按销售业绩的降序排序输出。
实验结果图-4 (4)查询结果(5) 查询订购的商品数量没有超过10个的客户编号和客户名称。
实验结果图-5 (5)查询结果(6) 查找订货金额最大的客户名称和总货款。
实验脚本:实验结果:图-6 (6)查询结果(7) 查找至少订购了3种商品的客户编号、客户名称、商品编号、商品名称、数量和金额。
实验结果:图-7 (7)查询结果(8) 找出目前销售业绩超过4000元的业务员编号及销售业绩,并按销售业绩从大到小排序。
实验脚本:实验结果:图-8 (8)查询结果(9) 求每位客户订购的每种商品的总数量及平均单价,并按客户号、商品号从小到大排列。
实验结果:图-9 (9)查询结果(10) 查询业绩最好的的业务员号、业务员名及其总销售金额。
实验脚本:实验结果:图-10 (10)查询结果(11) 查询订购的商品至少包含了订单“200803010001”中所订购商品的订单。
实验结果:图-11 (11)查询结果(12) 查询总订购金额超过“C20070002”客户的总订购金额的客户号、客户名及其住址。
图-12 (12)查询结果(13) 查询总销售金额最高的销售员编号、订单编号、订单日期和订单金额。
实验脚本:图-13 (13)查询结果(14) 用存在量词查找没有订货记录的客户名称。
实验脚本:图-14 (14)查询结果(15) 查询既订购了“52倍速光驱”商品,又订购了“17寸显示器”商品的客户编号、订单编号和订单金额。
数据库原理与应用 数据库查询操作
自连接查询
例如:查询学生中年龄相同的学生情况。
SELECTA.Sno,A.Sname,A.Ssex,A.Sage,A.Sdept
FROMStudentAJOINStudentBONA.Sno!=B.SnoANDA.Sage=B.Sage
注意:在自然连接时,对数表必须使用别名。且本题中用自连接时必须指明条件:A.Sno!= B.Sno不然的话会出现很多重名的无用结果。
INTOGradeList
FROMStudentA,SC
WHEREA.Sno=SC.Sno
GROUPBYA.Sno,Sname,Ssex
HAVING(SUM(SC.Grade)>=200)
这句语句的语义是:将Student表中的Sno,Ssex和把SUM值作为新的数据项,存放到GradeList表中,且存放的数据需满足SUM(SC.Grade >= 200)。
2.在FROM子句中用JOIN连接符指定连接条件
例如:查询所有有2号t.Sno,Sname,Grade
FROMStudentINNERJOINSCONStudent.Sno=SC.Sno
WHERECno=2
非等值连接查询
在等值连接条件中不使用等号,而使用其他比较运算符,这就构成了非等值连接查询,可以使用的比较运算度有:> >= < <= !=还可以使用BETWEEN……AND之类的谓词。
SELECTTOP (200) Sno,Sname,Ssex, Sage,Sdept
FROMStudent
③:学习和使用QBE查询
数据库原理实验报告模板-实验四高级查询
大连海事大学数据库原理课程实验报告(2013-2014学年第二学期)实验四高级查询班级:网络工程2班学号:2220133079姓名:祁恩星指导教师:张德珍成绩:大连海事大学网络工程系2014年5月27日目录1实验目的 (3)2实验内容 (3)2.1掌握SQL高级查询使用方法 (3)3实验要求 (3)4实验步骤 (3)4.1掌握SQL高级查询使用方法 (3)5总结与体会 (4)5.1实验中出现的问题及其解决方案............................................. 错误!未定义书签。
5.2总结............................................................................................. 错误!未定义书签。
5.3体会............................................................................................. 错误!未定义书签。
1实验目的(1)掌握SQL的高级查询的使用方法,如分组统计、嵌套查询、集合查询等等。
2实验内容2.1 掌握SQL高级查询使用方法(1)分组统计。
(2)嵌套查询,包括IN查询、EXISTS查询。
(3)集合查询。
3实验要求(1)深入复习教材第三章SQL有关高级查询语句。
(2)根据书上的例子,针对DBTestBed数据库模式设计分组统计查询、嵌套查询(IN、EXISTS)语句和集合查询语句,每种类型的基本查询至少要设计一个查询,描述清楚查询要求,运行你所设计的查询语句,并截图相应的实验结果,每幅截图并要有较为详细的描述。
也可以按照附1所列示例查询做实验。
(3)实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。
4实验步骤4.1 掌握SQL高级查询使用方法(1)不带分组过滤条件的分组统计查询。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大连海事大学
数据库原理课程实验报告(2013-2014学年第二学期)
实验四高级查询
班级:软件工程四班
学号:2220121787
姓名:马跃
指导教师:曹志英
成绩:
大连海事大学软件工程系
2014年6 月23 日
目录
1实验目的 (3)
2实验内容 (3)
2.1掌握SQL高级查询使用方法 (3)
3实验要求 (3)
4实验步骤 (3)
4.1掌握SQL高级查询使用方法 (3)
5总结与体会 (6)
5.1实验中出现的问题及其解决方案 (6)
5.2总结 (7)
5.3体会 (7)
1实验目的
(1)掌握SQL的高级查询的使用方法,如分组统计、嵌套查询、集合查询等等。
2实验内容
2.1 掌握SQL高级查询使用方法
(1)分组统计。
(2)嵌套查询,包括IN查询、EXISTS查询。
(3)集合查询。
3实验要求
(1)深入复习教材第三章SQL有关高级查询语句。
(2)根据书上的例子,针对DBTestBed数据库模式设计分组统计查询、嵌套查询(IN、EXISTS)语句和集合查询语句,每种类型的基本查询至少要设计一个查询,描述清楚查询要求,运行你所设计的查询语句,并截图相应的实验结果,每幅截图并要有较为详细的描述。
也可以按照附1所列示例查询做实验。
(3)实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。
4实验步骤
4.1 掌握SQL高级查询使用方法
(1)不带分组过滤条件的分组统计查询。
统计2013-2014上学期信息学院(01)开设的每门课程的最高分,最低分,及平均成绩。
select C.coursename,avg(score)AVGS,max(score)MAXS,min(score)MINS from tb_select_course A,Tb_Cultivate_Scheme B,Tb_Course_info C
where A.schemeid=B.schemeid and B.cyear='2013'and B.term='上'and
C.courseid=B.courseid and C.deptid='01'
group by C.coursename
(2)带分组过滤条件的分组统计查询。
查询选修了1门以上课程的学生学号,姓名,年级,专业名称
select A.graduateid,graduatename,grade,specialityname
from tb_student_info A,tb_speciality_info B,tb_select_course C
where A.specialityid=B.specialityid and C.graduateid=A.graduateid group by A.graduateid,A.graduatename,grade,specialityname
having count(A.graduateid)>1
(3)单层IN查
查询学号为’1787’的学生信息。
select A.graduateid,graduatename,sex,city,email,tel,birthday
from tb_student_info A
where graduateid in(
select graduateid
from tb_student_info D
where D.graduateid='1787')
(4)IN嵌套查询。
查询“信息科学技术学院”学生姓名和学号和家庭地址。
select graduateid,graduatename,city
from tb_student_info
where specialityid in
(select specialityid
from tb_speciality_info
where deptid in
(select deptid
from tb_dept_info
where deptname='信息科学技术学院'
)
)
(5)带有比较运算符的子查询
查询指导教师为“曹志英”的所有学生学号姓名和电话。
select graduateid,graduatename,tel
from tb_student_info
where tutorid=
(select tutorid
from tb_tutor_info
where tutorname='曹志英'
)
(6)单层EXISTS嵌套查询。
所有选修培养方案号(SchemeID)为3的学生姓名
select graduatename
from tb_student_info A
where exists
(select*
from tb_select_course B
where B.schemeid='01'and A.graduateid=B.graduateid
)
(7)双层EXISTS嵌套查询。
查询选修了全部课程的学生姓名
select graduatename
from tb_student_info A
where not exists
(select*
from tb_course_info B,tb_cultivate_scheme D
where B.courseid=D.courseid and not exists
(select*
from tb_select_course C
where graduateid=A.graduateid and
schemeid=D.schemeid
))
(8)集合查询(交、并、差各设计一个)。
查询“曹志英”老师和“宗雪飘”老师都授过课的学生姓名学号。
select graduatename,A.graduateid
from tb_student_info A,tb_select_course B
where A.graduateid=B.graduateid and B.teacher='01'
union
select graduatename,A.graduateid
from tb_student_info A,tb_select_course B
where A.graduateid=B.graduateid and B.teacher='02'
查询“曹志英”老师和“宗雪飘”老师授过课的所有学生姓名学号。
select graduatename,A.graduateid
from tb_student_info A,tb_select_course B
where A.graduateid=B.graduateid and B.teacher='01'
intersect
select graduatename,A.graduateid
from tb_student_info A,tb_select_course B
where A.graduateid=B.graduateid and B.teacher='02'
查询选修过“曹志英”老师的课程,却没有听过“宗雪飘”课程的学生姓名学号。
select graduatename,A.graduateid
from tb_student_info A,tb_select_course B
where A.graduateid=B.graduateid and B.teacher='01'
except
select graduatename,A.graduateid
from tb_student_info A,tb_select_course B
where A.graduateid=B.graduateid and B.teacher='02'
5总结与体会
5.1 实验中出现的问题及其解决方案
在group by查询学号姓名时没有将,没有将姓名放在group by语句中,结果出现查询不正确,最后请教老师,在group by分组时应将查询的内容都包含。
5.2 总结
感觉这个实验相对于上几个实验比较难,尤其是双层EXISTS嵌套查询,自己的理解还不是很到位,但是慢慢参考书上的例子,将代码写了出来。
5.3 体会
感觉自己自己学习的数据库还不是很踏实,还应该继续努力脚踏实地,不要急于求成,自己不会时应该多向同学老师请教。