数据库实验2---数据查询

本次实验涉及SQL查询的基本操作,包括选择特定字段、条件查询、聚合函数、子查询、联合查询以及连接查询等。实验内容涵盖在studentsdb数据库中查询student_info和grade表,提取学生信息、成绩数据,并进行各种条件筛选、排序和统计分析。通过这些操作,可以深入理解和掌握SQL在数据查询和处理中的应用。
摘要由CSDN通过智能技术生成

实验内容

  1. 在studentsdb数据库中使用SELECT语句进行基本查询。
    (1)在student_info表中,查询每个学生的学号、姓名、出生日期信息。
    (2)查询student_info表学号为 0002的学生的姓名和家庭住址。
    (3)查询student_info表所有出生日期在95年以后的女同学的姓名和出生日期。
  2. 使用select语句进行条件查询。
    (1)在grade表中查询分数在70-80范围内的学生的学号、课程编号和成绩。
    (2)在grade表中查询课程编号为0002的学生的平均成绩。
    (3)在grade表中查询选修课程编号为0003的人数和该课程有成绩的人数。
    (4)查询student_info的姓名和出生日期,查询结果按出生日期从大到小排序。
    (5)查询所有姓名“张”的学生的学号和姓名。
  3. 对student_info表,查询学生的学号、姓名、性别、出生日期及家庭住址,查询结果先按照性别的由小到大排序,性别相同的再按学号由大到小排序。
  4. 使用GROUP BY子句查询grade表中各个学生的平均成绩。
  5. 使用UNION运算符针student_info表中姓“刘”的学生的学号、姓名与姓“张”的学生的学号、姓名返回在一个表中。
  6. 嵌套查询
    (1)在student_info表中查找与“刘东阳”性别相同的所有学生的姓名、出生日期。
    (2)使用IN子查询查找所修课程编号为0002、0005的学生学号、姓名、性别。
    (3)使用ANY子查询查找学号为0001的学生的分数比0002号的学生的最低分数高的课程编号和分数。
    (4)使用ALL子查询查找学号为0001的学生的分数比学号为0002的学生的最高成绩还要高的课程编号和分数。
  7. 连接查询
    (1)查询分数在80-90范围内的学生的学号、姓名、分数。
    (2)使用INNER JOIN连接方式查询学习“数据库原理及应用”课程的学生学号、姓名、分数。
    (3)查询每个学生所选课程的最高成绩,要求列出学号、姓名、最高成绩。
    (4)使用左外连接查询每个学生的总成绩,要求列出学号、姓名、总成绩,没有选修课程的学生的总成绩为空。
    (5)为grade表添加数据行:学号为0004、课程编号为0006、分数为76。
    使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,curriculum表中没有的课程列值为空。

实验要求

1.粘贴SQL代码(小四号,宋体)及运行结果图,截图清晰。
2.学习通平台提交实验报告。
3.文件名:姓名+学号+实验几+班级

实验步骤及处理结果

粘贴SQL代码(小四号,宋体)及运行结果图,截图清晰。

思考体会

参考资料


# 附 代码
#1. 在studentsdb数据库中使用SELECT语句进行基本查询。  
#(1)在student_info表中,查询每个学生的学号、姓名、出生日期信息。  
  
USE studentsdb;  
SELECT 学号,姓名,出生日期 FROM student_info;  
  
#(2)查询student_info表学号为 0002的学生的姓名和家庭住址。  
SELECT 姓名,家庭住址 FROM student_info WHERE 学号 = '0002';  
  
#(3)查询student_info表所有出生日期在95年以后的女同学的姓名和出生日期。  
SELECT 姓名,出生日期 FROM student_info  
    WHERE 出生日期 >= '1996-01-01' AND 性别 = '女';  
  
#2. 使用select语句进行条件查询。  
#(1)在grade表中查询分数在70-80范围内的学生的学号、课程编号和成绩。  
SELECT * FROM grade WHERE 分数 BETWEEN 70 AND 80;  
  
#(2)在grade表中查询课程编号为0002的学生的平均成绩。  
SELECT AVG(分数) 平均分 FROM grade WHERE 课程编号 = '0002';  
  
#(3)在grade表中查询选修课程编号为0003的人数和该课程有成绩的人数。  
SELECT COUNT(*) 选课人数,COUNT(分数) 有成绩人数 FROM grade  
    WHERE 课程编号 = '1003';  
  
#(4)查询student_info的姓名和出生日期,查询结果按出生日期从大到小排序。  
SELECT 姓名,出生日期 FROM student_info ORDER BY 出生日期 DESC;  
  
#(5)查询所有姓名“张”的学生的学号和姓名。  
SELECT 学号,姓名 FROM student_info WHERE 姓名 LIKE '张%';  
  
  
#3. 对student_info表,查询学生的学号、姓名、性别、出生日期及家庭住址,查询结果先按照性别的由小到大排序,性别相同的再按学号由大到小排序。  
SELECT 学号,姓名,性别,出生日期,家庭住址 FROM student_info  
    ORDER BY 性别 ASC,学号 DESC;  
  
#4. 使用GROUP BY子句查询grade表中各个学生的平均成绩。  
SELECT 学号,AVG(分数) 平均成绩 FROM grade GROUP BY 学号;  
  
#5. 使用UNION运算符针student_info表中姓“刘”的学生的学号、姓名与姓“张”的学生的学号、姓名返回在一个表中。  
SELECT 学号,姓名 FROM student_info WHERE 姓名 LIKE '刘%'  
UNION  
SELECT 学号,姓名 FROM student_info WHERE 姓名 LIKE '张%';  
  
#6. 嵌套查询  
#(1)在student_info表中查找与“刘东阳”性别相同的所有学生的姓名、出生日期。  
SELECT 姓名,出生日期 FROM student_info   
    WHERE 性别 = (SELECT 性别 FROM student_info WHERE 姓名 = '刘东阳');  
  
#(2)使用IN子查询查找所修课程编号为00020005的学生学号、姓名、性别。  
SELECT 学号,姓名,性别 FROM student_info  
    WHERE 学号 IN(SELECT 学号 FROM grade  
    WHERE 课程编号 IN('0002','0005'));  
  
#(3)使用ANY子查询查找学号为0001的学生的分数比0002号的学生的最低分数高的课程编号和分数。  
SELECT 课程编号,分数 FROM grade   
    WHERE 学号 = '0001' AND 分数 >ANY(SELECT 分数 FROM grade  
    WHERE 学号 = '0002');  
  
#(4)使用ALL子查询查找学号为0001的学生的分数比学号为0002的学生的最高成绩还要高的课程编号和分数。  
SELECT 课程编号,分数 FROM grade  
    where 学号 = '0001' AND 分数 >ALL(SELECT 分数 FROM grade  
    where 学号 = '0002');  
  
#7. 连接查询  
#(1)查询分数在80-90范围内的学生的学号、姓名、分数。  
SELECT s.学号,姓名,分数 FROM student_info s,grade g  
    WHERE s.学号 = g.学号 AND 分数 BETWEEN 80 AND 90;  
  
#(2)使用INNER JOIN连接方式查询学习“数据库原理及应用”课程的学生学号、姓名、分数。  
SELECT s.学号,姓名,分数 FROM student_info s INNER JOIN grade g  
    ON s.学号 = g.学号 INNER JOIN curriculum c ON g.课程编号 = c.课程编号  
    WHERE 课程名称 = '数据库原理及应用';  
  
#(3)查询每个学生所选课程的最高成绩,要求列出学号、姓名、最高成绩。  
SELECT s.学号,姓名,MAX(分数) 最高成绩   
    FROM student_info s,grade g  
    WHERE s.学号 = g.学号  
    GROUP BY s.学号;  
  
#(4)使用左外连接查询每个学生的总成绩,要求列出学号、姓名、总成绩,没有选修课程的学生的总成绩为空。  
SELECT s.学号,姓名,SUM(分数) 总成绩   
    FROM student_info s LEFT OUTER JOIN grade g  
    ON s.学号 = g.学号  
    GROUP BY s.学号;  
  
#(5)为grade表添加数据行:学号为0004、课程编号为0006、分数为76。  
#使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,curriculum表中没有的课程列值为空。  
INSERT INTO grade VALUES('0004','0006',76);  
    SELECT g.课程编号,课程名称,COUNT(*) 选修人数  
    FROM curriculum c RIGHT OUTER JOIN grade g ON g.课程编号 = c.课程编号  
    GROUP BY g.课程编号;  
实验二 基本数据查询 一、实验目的 1.熟悉大型数据库实验环境,以MS SQL SERVER为例。 2.掌握MS SQL SERVER的查询分析器的用法。 3.能够完成对单表的查询操作。 4.能够完成对多表的联合查询操作。 5.能够完成带数据聚合函数的查询。 二、实验内容 (1)以实验一中创建的数据库abc作为查询对象,完成如下查询要求: 1.查询2001年12月31日之后的销售情况,要求列出销售人员姓名、销售的产品名以及销售日期。 2.查询销售电冰箱的销售人员的最大年龄。 3.统计每个产品的销售总数量,要求只列出销售数量前3名的产品和销售总数量。 4.查询销售人员的销售情况,包括有销售记录的销售人员和没有销售记录的销售人员,要求列出销售人员姓名、销售的产品、销售数量和销售日期。 5.列出2000年1月1日以后销售总量第一的产品的名称和生产厂家。 (2)以MS SQL SERVER的例子数据库pubs为查询对象,完成如下查询: 6.Pubs数据库:没有写过business或者popular_comp类型书籍的作者编姓名 7.Pubs数据库查询出版物价格在20元以上的作者编姓名 8.Pub数据库:版税大于80%且state=ks的作者信息 9.Pub数据库查询作者数量小于5的州 10.Pub数据库查询价格最高的书的作者,和他写的所有书的名称 11.Pub数据库查询销量较少的10本书的作者编写的所有书的书名 12.Pubs数据库查询写了价格PRICE高于平均价的书,而且所在的州STATE=CA的作者名称,图书名称,价格。 注意:如果数据库服务器中的pubs例子数据库被破坏,请用SQL Server 2000 Sample Databases.rar中的instpubs.sql还原
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小昔超厉害

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值