视图是关系数据库中基于SQL查询结果集的虚拟表,本身不存储实际数据,其数据来源于定义视图时所引用的基本表
视图是关系数据库中基于SQL查询结果集的虚拟表本身不存储实际数据其数据来源于定义视图时所引用的基本表。当对视图执行查询操作时数据库系统会自动执行以下转换流程从数据字典中提取视图的定义语句将用户对视图的查询条件与视图定义中的查询条件进行合并生成针对基本表的等价查询语句并执行示例说明-- 定义计算机系学生视图CREATEVIEWCS-STUDENTASSELECTSno,Sname,Sage,SexFROMStudentWHERESDCSWITHCHECKOPTION;-- 用户对视图的查询SELECTSno,Age FORM CS-STUDENTWHERESDCSANDAge20;-- 系统转换后的基本表查询SELECTSno,Age FORM StudentWHERESDCSANDAge20;这种转换机制保证了视图操作的透明性用户可以像操作基本表一样使用视图而无需关心底层数据结构。2. INSERT插入操作语法INSERT语句用于向关系数据库的表中添加新的数据记录支持两种基本使用模式模式1插入指定元组INSERTINTO基本表名(字段名1,字段名2,…)VALUES(常量1,常量2,…);特点字段名列表可选省略时值的顺序必须与表定义的字段顺序完全一致未指定的字段会自动填充默认值或NULL需字段允许为空一次只能插入一条记录示例-- 向选课关系SC中插入成绩记录INSERTINTOSC(Sno,Cno,Grade)VALUES(3002,C4,98);模式2插入查询结果INSERTINTO基本表名(列表名)SELECT查询语句;特点可以批量插入多条记录查询结果的字段数量、类型必须与目标表字段匹配常用于表数据复制、统计结果存储等场景3. 视图插入操作限制虽然视图可以像基本表一样执行插入操作但存在以下关键限制单表视图限制只有基于单个基本表创建的视图才允许插入操作多表连接视图无法插入包含聚合函数/分组的视图包含GROUP BY、DISTINCT、聚合函数SUM、AVG等的视图无法插入WITH CHECK OPTION约束如果视图定义时使用了WITH CHECK OPTION插入的数据必须满足视图定义的WHERE条件否则会被拒绝非空字段约束插入操作必须提供基本表中所有非空且无默认值的字段值示例说明-- 创建基于员工表的视图CREATEVIEWv_employees(number,name,age,sex,salary)ASSELECTnumber,name,age,sex,salaryFROMemployeesWHEREname张三;-- 通过视图插入数据INSERTINTOv_employeesVALUES(E001,张三,28,男,8000);该插入操作会自动转换为对employees基本表的插入且由于视图定义了name‘张三’的条件插入记录的name字段必须为’张三’当使用WITH CHECK OPTION时。二、练习题一单项选择题每题2分共20分在SQL中用于向表中插入新记录的关键字是A. UPDATEB. INSERTC. ADDD. CREATE以下哪种视图允许执行插入操作A. 多表连接视图B. 包含GROUP BY的视图C. 基于单个基本表且不包含聚合函数的视图D. 包含DISTINCT的视图当视图定义中包含以下哪个子句时插入的数据必须满足视图的过滤条件A. ORDER BYB. WITH CHECK OPTIONC. GROUP BYD. HAVING以下INSERT语句语法正确的是A. INSERT INTO table VALUES (value1, value2)B. INSERT table VALUES (value1, value2)C. INSERT INTO table (column1) VALUES value1D. INSERT VALUES (value1, value2) INTO table对于INSERT INTO … SELECT …语句以下说法错误的是A. 可以一次性插入多条记录B. 查询结果的字段类型必须与目标表匹配C. 查询结果的字段数量可以与目标表不同D. 常用于批量数据导入场景当对视图执行查询时数据库系统实际执行的是A. 直接查询视图存储的数据B. 查询视图定义对应的基本表C. 报错视图不能查询D. 先创建临时表再查询以下哪个操作不属于SQL数据更新操作A. INSERTB. UPDATEC. DELETED. SELECT插入操作中如果省略字段列表那么值的顺序需要A. 与表定义的字段顺序一致B. 可以任意顺序C. 只需要包含主键字段D. 只需要包含非空字段基于多表连接创建的视图执行INSERT操作会A. 成功插入到第一个表B. 成功插入到所有相关表C. 报错无法执行D. 只插入公共字段WITH CHECK OPTION的作用是A. 检查视图是否存在B. 检查插入/更新的数据是否满足视图定义的条件C. 检查用户是否有操作权限D. 检查SQL语法是否正确二填空题每题2分共20分插入单个元组的SQL语句基本格式是INSERT INTO 表名(字段列表) ______ (值列表);视图是基于SQL查询结果的______表本身不存储实际数据。批量插入查询结果的语句格式是INSERT INTO 表名 ______ 查询语句;当对视图执行查询时系统会将视图查询转换为对______的查询。只有基于______个基本表创建的视图才允许执行插入操作。如果视图定义时使用了______子句那么插入的数据必须满足视图的WHERE条件。INSERT语句省略字段列表时值的顺序必须与______的字段顺序完全一致。SQL数据更新操作包括插入、______和删除三种基本操作。向视图插入数据最终会转换为对______的插入操作。包含______函数如SUM、AVG的视图无法执行插入操作。三简答题每题5分共20分简述对视图执行查询操作时数据库系统的处理流程。列举INSERT语句的两种基本使用模式并说明各自的适用场景。简述通过视图执行插入操作的主要限制条件。解释WITH CHECK OPTION子句的作用及其使用场景。四编程题每题10分共40分假设存在学生表Student(Sno, Sname, Sage, Ssex, Sdept)请编写SQL语句创建一个只包含计算机系Sdept‘CS’学生的视图CS_Student包含学号、姓名、年龄字段。基于第1题创建的CS_Student视图编写SQL语句插入一条新的学生记录学号2023001姓名张三年龄19岁。假设存在课程表Course(Cno, Cname, Ccredit)请编写SQL语句将课程名包含数据库的所有课程记录插入到新表DB_Course结构与Course相同中。假设存在员工表employees(emp_id, emp_name, age, department, salary)请编写SQL语句创建一个仅包含销售部department‘销售部’员工的视图v_sales_emp包含员工ID、姓名、工资字段并要求通过视图插入或修改的数据必须属于销售部。三、参考答案一单项选择题答案B 2. C 3. B 4. A 5. CB 7. D 8. A 9. C 10. B二填空题答案VALUES虚拟SELECT基本表单一WITH CHECK OPTION表定义更新UPDATE基本表聚合三简答题答案视图查询处理流程当对视图执行查询时数据库系统首先从数据字典中获取该视图的定义语句然后将用户的查询条件与视图定义中的查询条件进行合并生成一个针对基本表的等价查询语句最后执行这个转换后的查询语句并返回结果。整个过程对用户透明用户无需关心底层数据结构。INSERT语句的两种模式及适用场景模式1插入指定元组语法为INSERT INTO 表名(字段列表) VALUES(值列表)适用于插入单条已知数据的场景如用户注册、单条记录添加等。模式2插入查询结果语法为INSERT INTO 表名 SELECT 查询语句适用于批量插入数据的场景如数据迁移、统计结果存储、表数据复制等。视图插入操作的主要限制视图必须基于单个基本表创建多表连接视图无法插入视图定义中不能包含GROUP BY、DISTINCT、聚合函数、UNION等操作如果使用了WITH CHECK OPTION插入数据必须满足视图定义的过滤条件插入操作必须提供基本表中所有非空且无默认值的字段值视图中必须包含所有没有默认值且不允许为空的字段WITH CHECK OPTION的作用WITH CHECK OPTION子句用于限制通过视图进行的插入和更新操作确保操作后的数据仍然满足视图定义的WHERE条件。适用于需要保证视图数据一致性的场景例如定义了部门视图后防止通过视图插入其他部门的数据确保视图中只包含符合条件的记录。四编程题答案创建计算机系学生视图CREATEVIEWCS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdeptCS;通过视图插入学生记录INSERTINTOCS_Student(Sno,Sname,Sage)VALUES(2023001,张三,19);批量插入数据库课程记录INSERTINTODB_Course(Cno,Cname,Ccredit)SELECTCno,Cname,CcreditFROMCourseWHERECnameLIKE%数据库%;创建销售部员工视图带检查约束CREATEVIEWv_sales_empASSELECTemp_id,emp_name,salaryFROMemployeesWHEREdepartment销售部WITHCHECKOPTION;