《Linux操作系统》课件-子查询与视图应用_第1页
《Linux操作系统》课件-子查询与视图应用_第2页
《Linux操作系统》课件-子查询与视图应用_第3页
《Linux操作系统》课件-子查询与视图应用_第4页
《Linux操作系统》课件-子查询与视图应用_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

子查询与视图应用复杂查询的利器子查询在查询中嵌套另一个查询视图基于查询结果创建的

虚拟表核心价值简化复杂查询逻辑

提高代码复用性实战演练综合应用子查询与视图

编写高效SQL代码提示:视图不仅能简化查询,还能控制数据访问范围,结合子查询使用是进阶SQL开发的必备技能。目录01引言:为什么需要子查询和视图?02子查询:概念与使用场景03子查询类型:WHERE,FROM,SELECT中的子查询04视图:概念与作用05视图操作:创建、使用与管理06实战演练:综合应用引言:为什么需要子查询和视图?复杂查询的挑战逻辑复杂:单查询难表达业务逻辑;代码冗余:相同逻辑重复编写;数据安全:底层表直接访问风险高。核心解决方案子查询:将复杂问题拆解为多个简单查询步骤;视图:封装逻辑提供简化接口,灵活限制数据访问范围。本章学习目标掌握子查询多场景用法,理解视图作用并熟练使用CREATEVIEW进行创建与管理。核心价值与收益01.提升开发效率与可维护性通过子查询拆解复杂逻辑,利用视图封装通用查询,大幅减少重复代码,让SQL语句结构更清晰,后期维护更简单。02.构建更安全的数据访问层利用视图可以隐藏底层复杂的表结构,并严格控制用户能访问的数据列和行,在保证业务需求的同时,有效规避核心数据泄露的风险。提示:子查询和视图是SQL进阶学习中不可或缺的工具,它们不仅解决了复杂查询的痛点,更是构建健壮、安全数据库应用的基础。核心概念:子查询与视图子查询(Subquery)嵌套在SELECT、INSERT、UPDATE或DELETE语句中的查询。通常用括号()括起,将结果作为外层查询的条件或数据源。视图(View)一个由查询定义的虚拟表。视图本身不物理存储数据,数据仍保存在底层的原始表中,访问视图时动态生成结果集。视图的核心价值逻辑封装:将复杂的多表连接或过滤逻辑封装在视图中,简化用户查询操作。数据安全:限制用户只能通过视图访问特定字段或行,保护底层敏感数据不被直接暴露。逻辑独立性:当底层表结构发生改变时,只需调整视图定义,无需修改上层应用的查询语句。实时性:视图的数据始终与原始表保持一致,原始表数据更新后,视图结果随之更新。标准创建语法(SQL)CREATEVIEWview_nameAS

SELECTcolumn1,column2,...FROMtable_name

WHEREcondition;在WHERE子句中使用子查询💡示例:查询高于平均薪水的员工SELECTname,salaryFROMemployeesWHEREsalary>(SELECTAVG(salary)FROMemployees);通过嵌套子查询,将“计算均值”与“条件筛选”结合。⚙️执行逻辑:从内到外Step1执行子查询:先计算括号内的AVG(salary),得到具体数值(如8000)。Step2执行主查询:使用得到的平均值作为筛选条件,查询符合要求的员工记录。🎯核心适用场景与技术优势✅典型适用场景当主查询的筛选条件(如阈值、范围)无法直接确定,必须依赖另一个查询的动态结果时,子查询是最直接的解决方案。💎代码可读性优势将复杂的业务逻辑拆解为“子查询计算值”和“主查询做筛选”两步,逻辑清晰直观,相比多轮查询或临时表方案,代码更加简洁紧凑。示例2:在FROM子句中使用子查询🎯查询目标基于员工薪资表,先计算每个部门的平均薪水,然后在这些结果中筛选出平均薪水最高的部门信息。💻核心SQL实现片段SELECTdept,avg_salFROM(SELECTdept,AVG(sal)avg_salFROMempGROUPBYdept)AStemp_table

WHEREavg_sal=(SELECTMAX(avg_sal)FROMtemp_table);⚙️核心机制将子查询的执行结果转化为“派生表”,让主查询能够像操作普通物理表一样对其进行二次查询。🔍执行逻辑深度解析Step1:生成派生表数据库引擎会优先执行FROM子句中的子查询,计算出所有部门的平均薪水,并将其封装为一个临时的“派生表”(dept_avg_salary),供后续逻辑使用。💡关键技术要点Step2:主查询筛选主查询对“派生表”进行二次筛选,通过另一个子查询找到平均薪水的最大值,从而定位到最终的目标部门。FROM子句中的子查询是处理多层级、多步骤统计分析的标准范式,充分体现了SQL“面向集合”的查询思想。示例3:创建与使用视图创建视图(CREATE)CREATEVIEWdev_empAS

SELECTid,name,salary

FROMemployees

WHEREdept='研发部';使用视图(SELECT)--1.像查普通表一样查询

SELECT*FROMdev_emp;

--2.基于视图做过滤

SELECTnameFROMdev_emp

WHEREsalary>9000;视图的三大核心价值📦简化查询将复杂的多表关联或过滤逻辑封装,调用时无需重复编写SQL。🛡️数据安全限制用户仅能访问视图中定义的特定行和列,保护底层敏感数据。🧩逻辑集中业务逻辑变更时,只需修改视图定义,所有引用该视图的查询自动生效。核心总结视图本质上是一张“虚拟表”,它存储的不是数据,而是查询逻辑。在实际开发中,合理使用视图可以显著降低系统耦合度,提升开发效率与数据安全性,是数据库设计中不可或缺的工具。示例4:更新与删除视图更新视图(UpdateView)SQL示例:UPDATEdev_employeesSETsalary=9000WHEREid=3;注:此操作会直接修改基表(employees)中的对应记录。删除视图(DropView)SQL示例:DROPVIEWIFEXISTSdev_employees;说明:仅删除视图定义,不会影响底层基表数据。可更新视图的核心条件📌单表依赖视图的定义必须基于单个物理表,不可是多表关联查询的结果。🚫无聚合/分组SELECT语句中禁止包含DISTINCT、GROUPBY、HAVING及聚合函数。🔑必须含主键查询字段中必须包含基表的主键列,以确保数据库能定位到具体行。💡核心总结只有满足上述条件的“简单视图”才可更新,复杂视图通常为只读状态。⚙️操作本质:对视图的更新/删除,本质上是数据库引擎将其转换为对底层基表的DML操作。📋最佳实践:生产环境中,建议使用视图作为查询窗口,通过存储过程执行复杂的更新逻辑。子查询vs视图子查询(Subquery)•一次性使用:作为复杂查询的一部分,用完即弃。•灵活高效:随时编写,数据库会对整体语句进行优化。视图(View)创建一次可多次复用,隐藏复杂逻辑实现封装,便于后期维护管理。如何选择?逻辑简单且单次使用选子查询;逻辑复杂且多处复用选视图。核心差异对比子查询:灵活的“一次性工具”无需预定义,随写随用。适合处理临时性、简单的嵌套查询需求,完全依赖外部主查询存在。视图:封装好的“公共接口”•稳定性:逻辑固化,全局统一调用•安全性:可隐藏底层表结构与敏感字段•效率:复杂逻辑预封装,避免重复编写提示:合理利用视图可以显著提升团队协作开发的效率,而子查询则是处理特定业务逻辑时的灵活选择。实战演练:子查询与视图今日实战任务请编写SQL语句,完成以下数据库操作挑战:使用子查询找出所有没有下过订单的客户信息。创建名为high_value_orders的视图,包含金额>1000的订单及对应客户姓名。基于上述视图,筛选出地区为“北京”的客户的高价值订单。SQLWorkbench—Query--1.子查询:查找无订单客户(NOTIN)SELECT*FROMcustomersWHEREidNOTIN(SELECTcust_idFROMorders);--2.创建高价值订单视图CREATEVIEWhigh_value_ordersASSELECTo.*,FROMordersoJOINcustomerscONo.cust_id=c.idWHEREo.amount>1000;--3.通过视图查询特定地区订单SELECT*FROMhigh_value_ordersWHEREc.city='北京';💡核心提示:使用NOTIN子查询可高效实现“排除”逻辑;视图本质是虚拟表,使用CREATEVIEW创建后可像普通表一样查询,能有效简化复杂的多表关联逻辑。总结与回顾子查询提供了强大的查询嵌套能力,允许分步拆解并解决复杂的业务逻辑问题。视图提供了封装复杂查询、简化数据访问接口和增强数据操作安全性的有效机制。核心价

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论