当前位置: 首页 > news >正文

数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记7

前言

在前面文章的介绍中,已经介绍了数据定义、数据更新、数据查询,关于SQL语句的标准语言已经基本上介绍完毕,本文接下来将介绍另外两种便于操作的操作模式——视图与索引。其大致的语句代码与前文其实并无大的区别,在了解基本语句之外,还应该了解视图与索引所发挥的作用,这也十分重要。

本文结束之后,关于SQL的基本语言已经全部介绍完毕,大家可以进行简单的系统整理哦

注:本文中所涉及的数据库前文中已经介绍(指路:数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记1)

一、视图的特点

  • 视图是虚表,是从一个或几个基本表(或视图)导出的表。
  • 视图只存放视图的定义,不存放视图对应的数据
  • 基表中的数据发生变化,从视图中查询出的数据也随之改变。

【视图更像是一个数据窗口,仅仅去了解我们需要了解的数据而已】

二、视图的基本操作

1.建立视图

 建立视图需要运用CREATE VIEW语句,同时后面加视图的名字,AS后面增加子查询的相关操作与语句

CREATE VIEW V_Student
AS
SELECT Student.*, Cno, Grade
FROM Student, SC
WHERE Student.Sno = SC.Sno

上述代码建立了一个学生成绩视图,该视图的名字叫作V_Student,AS后面增加子查询子查询中使用了多表连接,将Student表与SC表通过Sno进行了连接。

CREATE VIEW V_AVG_Grade
AS
SELECT Sno, CONVERT(Decimal(5,2),AVG(CONVERT(Decimal(5,2),Grade))) AS AVG_Grade 
FROM SC
GROUP BY Sno

 上述代码建立了一个学生平均成绩视图,该视图的名字叫作V_AVG_Grade,AS后面增加子查询,子查询中较为复杂,利用聚集函数AVG求出了平均成绩,并利用GROUP BY语句将每个学生进行分组,以方便求取每个学生的平均成绩,同时运用了CONVERT函数转换数据类型,将平均成绩保留位两位小数。

【注:组成视图的属性列名必须全部省略或者全部点明,这便是AS AVG_Grade出现的意义】

2.删除视图

删除视图的语句较为简单,直接使用DROP语句即可

DROP VIEW V_AVG_Grade

上述代码即为删除视图V_AVG_Grade

3.查询视图

查询视图的语句与查询表的语句基本上一样,同样使用SELECTWHERE语句

SELECT Grade 
FROM V_Student  
WHERE Sname ='李勇' AND Cname = '数据库'

上述代码即为查找视图V_Student中利用同学的数据库课程的成绩

三、视图的作用

1. 视图能够简化用户的操作

2. 视图使用户能以多种角度看待同一数据,

3. 视图对重构数据库提供了一定程度的逻辑独立性

4. 视图能够对机密数据提供安全保护

5. 适当的利用视图可以更清晰的表达查询

四、索引概述

建立索引的目的其实很简单,就是为了加快查询速度,索引能够快速定位到需要查询的内容。

索引的作用

  • 使用索引可以明显地加快数据查询的速度
  • 使用索引可以保证数据的惟一性
  • 使用索引可以加快连接速度

五、索引的基本操作

1.建立索引

建立索引的基本语句还是CREATE语句,但是在建立索引的过程中,可以分别建立UNIQUE唯一索引(表示此索引的每一个索引值只对应唯一的数据记录)CLUSTER聚簇索引(一个基本表中最多只能建立一个聚簇索引)

CREATE UNIQUE INDEX  Stusno ON Student(Sno)CREATE UNIQUE INDEX  Coucno ON Course(Cno)CREATE UNIQUE INDEX  SCno ON SC(Sno ASC, Cno DESC)

上述三行代码分别建立了三个表的索引:

CREATE UNIQUE INDEX代表着建立唯一索引,后面接索引的名字(如Stusno),ON后面连接表名以及括号内的属性列名

  • Student表按学号升序建立唯一索引
  • Course表按课程号升序建立唯一索引
  • SC表按学号升序和课程号降序建立唯一索引

2.删除索引

删除索引的基本语句还是利用DROP语句

DROP INDEX Student.Stusno

上述代码代表删除Student表中的Stusno索引【注意:编写时一定要注明索引所在的表名】

http://www.xdnf.cn/news/214795.html

相关文章:

  • Unity Audio DSP应用与实现
  • C++多线程与锁机制
  • JavaScript函数声明大比拼
  • yolov8使用
  • 10 基于Gazebo和Rviz实现导航仿真,包括SLAM建图,地图服务,机器人定位,路径规划
  • BIM(建筑信息模型)与GIS(地理信息系统)的融合的技术框架、实现路径与应用场景
  • 【MCP Node.js SDK 全栈进阶指南】高级篇(2):MCP高性能服务优化
  • MCP 协议 ——AI 世界的 “USB-C 接口”:从认知到实践的全面指南
  • 源码角度分析 sync.map
  • Silvaco仿真中victory process的蒙特卡洛(Monte Carlo)离子注入
  • [4-06-09].第10节:自动配置- 分析@SpringBootApplication启动类
  • github使用记录
  • Redis分布式锁使用以及对接支付宝,paypal,strip跨境支付
  • 第十六届蓝桥杯大赛网安组--几道简单题的WP
  • HTTP协议重定向及交互
  • 运放参数汇总
  • mac word接入deepseek
  • LVGL -窗口操作
  • Linux/AndroidOS中进程间的通信线程间的同步 - 管道和FIFO
  • 【C++编程入门】:基本语法
  • Java 多线程基础:Thread 类详解
  • 云数据中心整体规划方案PPT(113页)
  • VIT(ICLR2021)
  • foc控制 - clarke变换和park变换
  • 【后端】【Docker】 Docker 动态代理 取消代理完整脚本合集(Ubuntu)
  • 内网服务器映射到公网上怎么做?网络将内网服务转换到公网上
  • 学习基本宠物美容
  • 零基础实现把知识库接到聆思CSK6大模型开发板上
  • 请简述一下什么是 Kotlin?它有哪些特性?
  • C++ 红黑树