数据库原理及应用——数据库的基本查询和高级查询

简介: (一)简单查询操作该实验包括投影、选择条件表达,数据排序,使用临时表等。具体完成以下题目,将它们转换为SQL语句表示,在学生课程数据库中实现其数据查询操作。(二)连接查询操作该实验包括等值连接、自然连接、求笛卡儿积、一般连接、外连接、内连接、左连接、右连接和自连接等(三)嵌套查询操作该实验包括在SQL Server查询分析器中使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。具体完成以下各题。将它们用SQL语句表示,在学生选课中实现其数据嵌套查询操作(四)集合查询和统计查询

 实验二  数据库的基本查询和高级查询

一、实验目的:

    1. 掌握SQL程序设计基本规范,熟练运用SQL语言实现数据基本查询,包括单表查询、分组统计查询和连接查询。
    2. 掌握SQL嵌套查询和集合查询等各种高级查询的设计方法等,加深SQL语言的嵌套查询语句的理解,熟练掌握数据查询中的分组、统计、计算和集合的操作方法。

    二、实验要求:

      1. 针对实验一设计的“学生课程”数据库设计各种单表查询SQL语句、分组统计查询语句;设计单个表针对自身的连接查询,设计多个表的连接查询。理解和掌握SQL查询语句各个子句的特点和作用,按照SQL程序设计规范写出具体的SQL查询语句,并调试通过。
      2. 正确分析用户查询要求,设计各种嵌套查询和集合查询。
      3. SQL程序设计规范包含SQL关键字大写、表名、属性名、存储过程名等标示符大小写混合、SQL程序书写缩进排列等编程规范。

      三、实验重点和难点:

      实验重点:

      1)分组统计查询、单表自身连接查询、多表连接查询、嵌套查询。

      实验难点:

        1. 区分元组过滤条件和分组过滤条件;确定连接属性,正确设计连接条件。
        2. 相关子查询、多层EXIST嵌套查询。

        四、实验内容:(P87-P113)

        (一)简单查询操作

        该实验包括投影、选择条件表达,数据排序,使用临时表等。

        具体完成以下题目,将它们转换为SQL语句表示,在学生课程数据库中实现其数据查询操作。

        例:(1)查询描述:查询所有学生的姓名与学号

              SQL语句:select sno,sname from student

              查询结果:截图或文本

        题目:

        1.求数学系学生的学号和姓名。

        select Sno,Sname

           from student

        where Sdept='MA';

        image.gif编辑

        2.求选修了课程的学生学号。

        select distinct Sno

        from sc;(可将重复的合并成一行)

        或者

        select Sno

        from sc;

        image.gif编辑

        3.求选修课程号为‘1’的学生号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同按学号的升序排列。

        select Sno,Grade

           from sc

           where Cno='1'

        order by Grade desc,Sno;

        image.gif编辑

        4.求选修课程号为‘1’且成绩在80~90之间的学生学号和成绩,并将成绩乘以0.8输出。

        select Sno,Grade*0.8

           from sc

        where Cno='1'and Grade between 80 and 90;

        image.gif编辑

        5.求数学系或计算机系姓“张”的学生的信息。

        select *

           from student

        where Sdept in('MA','CS') and Sname like '张%';

        查询计算机科学系;

             

        select *

           from student

        where Sdept in('MA','IS') and Sname like '张%';

        查询信息系;

        image.gif编辑

        6.求缺少了成绩的学生的学号和课程号。

        select Sno,Cno

           from sc

        where grade is null;

        image.gif编辑

        (二)连接查询操作。

        该实验包括等值连接、自然连接、求笛卡儿积、一般连接、外连接、内连接、左连接、右连接和自连接等。

        题目:

        1.查询每个学生的情况以及他所选修的课程。

        select student.*,Cname

           from student,sc,course

           where student.Sno=sc.Sno

        and sc.Cno=course.Cno;

        image.gif编辑

        2.求学生的学号、姓名、选修的课程及成绩。

        select student.Sno,Sname,Cname,Grade

           from student,sc,course

           where student.Sno=sc.Sno

        and sc.Cno=course.Cno;

        image.gif编辑

        3.求选修课程号为‘1’且成绩在90以上的学生学号、姓名和成绩。

        select student.Sno,Sname,Grade

           from student,sc

           where student.Sno=sc.Sno

        and sc.Cno='1' and sc.Grade>90;

        image.gif编辑

        4.查询每一门课程的间接先行课(即先行课的先行课)。

        select first.Cno,second.Cpno

           from course first,course second

        where first.Cpno=second.Cno;

        image.gif编辑

        (三)嵌套查询操作:

        该实验包括在SQL Server查询分析器中使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。具体完成以下各题。将它们用SQL语句表示,在学生选课中实现其数据嵌套查询操作。

        题目:

        1.求选修了高等数学的学号和姓名。

        select Sno,Sname

           from student

           where Sno in

                  (select Sno

                  from sc

                  where Cno in

                         (select Cno

                         from course

                         where Cname='数学'

        )

                  );

        或者

        select student.Sno,Sname

           from student,sc,course

           where student.Sno=sc.Sno

           and sc.Cno=course.Cno

           and Cname='数学';

        image.gif编辑

        2.求‘2’课程的成绩高于刘晨的学生学号和成绩。

        select Sno,Grade

            from sc

            where Grade>

                 (select Grade

               from sc

               where Sno=

                        (select Sno

                         from student

                         where Sname='刘晨')

               and Cno='2'

               )

            and Cno='2';

        image.gif编辑

        3.求其他系中比计算机系某一学生年龄小的学生(即年龄小于计算机系年龄最大者的学生)。

        select *

            from student

            where Sage<any(

                        select Sage

                        from student

                        where Sdept='CS'

                        )

            and Sdept<>'CS';

        image.gif编辑

        4.求其他系中比计算机系学生年龄都小的学生。

        select *

            from student

            where Sage<all(

                        select Sage

                        from student

                        where Sdept='CS'

                        )

            and Sdept<>'CS';

        image.gif编辑

        5.求选修了‘2’课程的学生姓名。

        select Sname

            from student

            where Sno in

            (select Sno

            from sc

            where Cno='2'

            );

        或者

        select Sname

            from student

            where exists

                 (select *

                  from sc

                  where Sno=student.Sno

                        and Cno='2');

        image.gif编辑

        6.求没有选修‘2’课程的学生姓名。

        select Sname

            from student

            where not exists

                 (select *

                  from sc

                  where Sno=student.Sno

                        and Cno='2');

        image.gif编辑

        7.查询选修了全部课程的学生姓名。

        select Sname

            from student

            where not exists

                 (select *

                  from course

                  where not exists

                        (select *

                         from sc

                         where Sno=student.Sno

                           and Cno=course.Cno

                         )

               );

        image.gif编辑

        8.求至少选修了学号为“95002”的学生所选修全部课程的学生学号和姓名。

        select distinct Sno

            from sc scx

            where not exists

                 (select *

                  from sc scy

                  where scy.Sno='95002'and

                        not exists

                        (select *

                         from sc scz

                         where scz.Sno=scx.Sno and

                               scz.Cno=scy.Cno

                        )

                 );

        image.gif编辑

        (四)集合查询和统计查询:

          1. 分组查询实验。该实验包括分组条件表达、选择组条件表达的方法。
          2. 使用函数查询的实验。该实验包括统计函数和分组统计函数的使用方法。
          3. 集合查询实验。该实验并操作UNION、交操作INTERSECT和差操作MINUS的实现方法。

          具体完成以下例题,将它们用SQL语句表示,在学生选课中实现其数据查询操作。

          题目:

          1.求学生的总人数。

          select count(*)

              from student;

          image.gif编辑

          2.求选修了课程的学生人数。

          select count(distinct Sno)

              from sc;

          image.gif编辑

          3.求课程和选修了该课程的学生人数。

          select Cno,count(Sno)

              from sc

              group by Cno;

          image.gif编辑

          4.求选修超过3门课的学生学号。

          select Sno

              from sc

              group by Sno

              having count(*)>3;(更改条件>=确认结果是否正确)

          image.gif编辑

          5.查询计算机科学系的学生及年龄不大于19岁的学生。

          select *

              from student

              where Sdept='CS'

              union

              select *

              from student

              where Sage<=19;

          image.gif编辑

          6.查询计算机科学系的学生与年龄不大于19岁的学生的交集。

          select *

              from student

              where Sdept='CS'

              intersect

              select *

              from student

              where Sage<=19;(navicat中mysql没有intersect关键词)

          或者

          select *

             from student

             where Sdept='CS' and

                          Sage<=19;

          image.gif编辑

          7.查询计算机科学系的学生与年龄不大于19岁的学生的差集。

          select *

              from student

              where Sdept='CS'

              except

              select *

              from student

              where Sage<=19; (navicat中mysql没有excep关键词)

          或者

          select *

          from student

          where Sdept='CS'and Sage>19;

          image.gif编辑

          8.查询选修课程‘1’的学生集合与选修课程‘2’的学生集合的交集。

          select Sno

              from sc

              where Cno='1' and Sno in

                                 (select Sno

                                  from sc

                                  where Cno='2');

          image.gif编辑

          9.查询选修课程‘1’的学生集合与选修课程‘2’的学生集合的差集。

          select Sno

              from sc

              where Cno='1' and Sno in

                                 (select Sno

                                  from sc

                                  where Cno<>'2');

          image.gif编辑

          五、实验方法:

          将查询需求用SQL语言表示;在SQL Server查询编辑器的输入区中输入SQL查询语句;设置查询分析器的结果区为Standard Execute(标准执行)或Execute to Grid(网格执行)方式;发布执行命令,并在结果区中查看查询结果;如果结果不正确,要进行修改,直到正确为止。所使用的学生管理库中的三张表为:

          1.STUDENT(学生信息表)

          SNO(学号)

          SNAME(姓名)

          SEX(性别)

          SAGE(年龄)

          SDEPT(所在系)

          95001

          李勇

          男

          20

          CS

          95002

          刘晨

          女

          19

          IS

          95003

          王名

          女

          18

          MA

          95004

          张立

          男

          19

          IS

          95005

          李明

          男

          22

          CS

          95006

          张小梅

          女

          23

          IS

          95007

          封晓文

          女

           20

          MA

          2.COURSE(课程表)

          CNO(课程号)

          CNAME(课程名)

          CPNO(先行课)

          CCREDIT(学分)

          1

          数据库

          5

          4

          2

          数学

          2

          3

          信息系统

          1

          4

          4

          操作系统

          6

          3

          5

          数据结构

          7

          4

          6

          数据处理

          2

          7

          PASCAL语言

          6

          4

          3.SC(选修表)

          SNO(学号)

          CNO(课程号)

          Grade(成绩)

          95001

          1

          92

          95001

          2

          85

          95001

          3

          88

          95002

          2

          90

          95002

          3

          80

          95003

          1

          78

          95003

          2

          80

          95004

          1

          90

          95004

          4

          60

          95005

          1

          80

          95005

          3

          89

          95006

          3

          80

          95007

          4

          65

          六、实验结果与分析(概括、分析与总结):

          有些题有多种解法,上述结果中,部分题写出了两种方法,在两种方法中可以运用到不同的查询,其中运用到了and、distinct(可以把重复的行合并成一行)、order by(排序)等关键词,可以轻松的解决题目。

          七、实验心得:

          本次实验,将本节的数据查询进行实践。通过实践,可以加强对查询语句的记忆以及其他关键词的用法,使得mysql语句有了更深的记忆。对本次实验,收获颇多,对于今后的学习有了更好的理解和帮助。

          相关文章
          |
          11月前
          |
          存储 人工智能 NoSQL
          AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
          RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
          |
          存储 关系型数据库 数据库
          附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
          本文通过一个 Agentic RAG 应用的完整构建流程,展示了如何借助 RDS Supabase 快速搭建具备知识处理与智能决策能力的 AI 应用,展示从数据准备到应用部署的全流程,相较于传统开发模式效率大幅提升。
          附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
          |
          人工智能 安全 机器人
          无代码革命:10分钟打造企业专属数据库查询AI机器人
          随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
          1242 12
          无代码革命:10分钟打造企业专属数据库查询AI机器人
          |
          安全 druid Nacos
          0 代码改造实现应用运行时数据库密码无损轮转
          本文探讨了敏感数据的安全风险及降低账密泄漏风险的策略。国家颁布的《网络安全二级等保2.0标准》强调了企业数据安全的重要性。文章介绍了Nacos作为配置中心在提升数据库访问安全性方面的应用,并结合阿里云KMS、Druid连接池和Spring Cloud Alibaba社区推出的数据源动态轮转方案。该方案实现了加密配置统一托管、帐密全托管、双层权限管控等功能,将帐密切换时间从数小时优化到一秒,显著提升了安全性和效率。未来,MSE Nacos和KMS将扩展至更多组件如NoSQL、MQ等,提供一站式安全服务,助力AI时代的应用安全。
          743 14
          |
          存储 弹性计算 Cloud Native
          云原生数据库的演进与应用实践
          随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
          594 8
          |
          存储 弹性计算 安全
          现有数据库系统中应用加密技术的不同之处
          本文介绍了数据库加密技术的种类及其在不同应用场景下的安全防护能力,包括云盘加密、透明数据加密(TDE)和选择列加密。分析了数据库面临的安全威胁,如管理员攻击、网络监听、绕过数据库访问等,并通过能力矩阵对比了各类加密技术的安全防护范围、加密粒度、业务影响及性能损耗。帮助用户根据安全需求、业务改造成本和性能要求,选择合适的加密方案,保障数据存储与传输安全。
          |
          安全 Java Nacos
          0代码改动实现Spring应用数据库帐密自动轮转
          Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
          |
          存储 人工智能 数据库
          视图是什么?为什么要用视图呢?数据库视图:定义、特点与应用
          本文三桥君深入探讨数据库视图的概念与应用,从定义特点到实际价值全面解析。视图作为虚拟表具备动态更新、简化查询、数据安全等优势,能实现多角度数据展示并保持数据库重构的灵活性。产品专家三桥君还分析了视图与基表关系、创建维护要点及性能影响,强调视图是提升数据库管理效率的重要工具。三桥君通过系统讲解,帮助读者掌握这一常被忽视却功能强大的数据库特性。
          2853 0
          |
          SQL 数据库
          软考软件评测师——数据库系统应用
          本文介绍了关系数据库的基础知识与应用,涵盖候选码定义、自然连接特点、实体间关系(如1:n和m:n)、属性分类(复合、多值与派生属性)以及数据库设计规范。同时详细解析了E-R图转换原则、范式应用(如4NF)及Armstrong公理体系。通过历年真题分析,结合具体场景(如银行信用卡额度、教学管理等),深入探讨了候选键求解、视图操作规范及SQL语句编写技巧。内容旨在帮助读者全面掌握关系数据库理论与实践技能。

          热门文章

          最新文章