SQL 索引的操作 数据查询(1)数据更新

article/2025/10/9 16:18:34

文章目录

    • 索引的建立与删除
      • 建立索引
      • 修改索引
      • 删除索引
    • 数据更新
      • 插入数据
        • 插入元组
        • 插入子查询结果
      • 修改数据
      • 删除数据
    • 数据查询
      • 单表查询
      • 查询经过计算的值
      • 选择表中的若干元组

索引的建立与删除

建立索引

在SQL语言中,建立索引使用 CREATE INDEX 语句,其一般形式为

CREATE [UNIQUE][CLUSTER] INDEX <索引名>
ON <表名>(<列名> [<次序>][,<列名> [次序]] ...);

次序 可选ASC(升序)*、DESC(降序)
UNIQUE 表明此索引的每一个索引值只对应唯一的数据记录
CLUSTER 表示要建立的索引是聚簇索引

例3.13:为学生–课程数据库中的Student、Course、SC三个表建立索引
Student表按照学号升序建立唯一索引
Course表按课程号升序建立唯一索引
SC表按学号升序和课程号降序建立唯一索引

建立索引前:
在这里插入图片描述

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 索引名 ON 表名(列名 排列方式,…);

修改索引

修改索引使用 ALTER INDEX 语句,一般格式为

ALTER INDEX <旧索引名> RENAME TO <新索引名>;

例3.14:将SC表的SCno索引名改为SCSno
在这里插入图片描述

ALTER INDEX SCno RENAME TO SCSno;

然而…
在这里插入图片描述
通过在网上查询,我们可以使用:

EXEC sp_rename 'SC.SCno','SCSno','INDEX';
//此处不使用EXEC也是可以的
//个人推测EXEC是为创建了另一进程来该索引名,加快运行速度吧

在这里插入图片描述

删除索引

删除索引一般是用 DROP INDEX 语句,一般格式为:

DROP INDEX <索引名>

例3.15:删除Student表的Stusname索引:
运行前:
在这里插入图片描述
放置一个错误做法

DROP INDEX Student.Stusno;

在这里插入图片描述
删除成功!

删除某一索引名,必须要添加对应的表名

数据更新

插入数据

SQL的数据插入语句INSERT通常有两种形式,一种是插入一个元组,另一种是插入子查询结果。后者可以一次插入多个元组

插入元组

插入元组的INSERT语句格式为:

INSERT
INTO <表名> [(<属性列1> [,<属性列2 >)]
VALUES (<常量1> [,<常量2>]);

其功能是将新元组插入指定表中。
其中新元组的属性列1的值为常量1,属性列2的值为常量2…
INTO 子句中没有出现的属性列,新元组在这些列上将取空值

例3.69:将一个新学生组(学号:201215128,姓名:陈冬,性别:男,所在系:IS,年龄:18岁)插入到Student表中:

在这里插入图片描述

INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201215128','陈冬','男','IS','18');

在这里插入图片描述

在这里插入图片描述
例3.70:将学生张成民的信息插入到Student表中:

INSERT
INTO Student
VALUES('201215126','张成民','男','18','CS');

在这里插入图片描述
例3.71:插入一条选课记录((‘201215128’,‘1’):

INSERT
INTO SC(Sno,Cno)
VALUES('201215128','1')

等价于==:

INSERT
INTO SC
VALUES('201215128','1'NULL)

插入子查询结果

子查询不仅可以嵌套在SELECT语句中用以构造父查询的条件,也可以嵌套在INSERT语句中用以生成要插入的批量数据

插入子查询的语句格式为:

INSERT
INTO <表名> [(属性列1) [<属性列2>...]]
子查询;

例3.72:对每一个系,求学生的平均年龄,并把结果存入数据库
首先在数据库中定义一个新表,其中一列存放系名,另一列存放相应的学生平均年龄

CREATE TABLE Dept_age
(Sdept CHAR(15)
Avg_age SMALLINT);

然后对Student表按系分组求平均年龄,再把系名和平均年龄放入新表中

INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;

修改数据

修改数据又称更新操作,一般格式为

UPDATE <表名>
SET <列名>=<表达式> [,<列名>=<表达式>]...
[WHERE <条件>];

eg1:将学生201215121的年龄改为22岁

UPDATE Student
SET Sage=22
WHERE Sno='201215121';

eg2:将所有学生的年龄增加1岁

UPDATE Student
SET Sage=Sage+1;

如果没有修饰条件,可以省略where语句,默认即为全部

eg3:将计算机科学系全体学生的成绩置0

UPDATE SC
SET Grade=0
WHERE Sno IN(SELECT SnoFROM StudentWHERE  Sdept='CS'
);

删除数据

删除语句的一般格式为:

DELETE
FROM <表名>
[WHERE <条件>]

eg1:删除学号201215128的学生记录

DELETE
FROM Student
WHERE Sno='201215128';

eg2:删除所有学生的选课记录

DELETE
FROM SC;

eg3:删除计算机科学系所有学生的选课记录

DELETE
FROM SC
WHERE Sno IN(SELECT SnoFROM StudentWHERE  Sdept='CS'
);

数据查询

单表查询

SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]FROM <表名或视图名>[,<表名或视图名> ]|(SELECT 语句)
[AS]<别名> 
[ WHERE <条件表达式> ] 
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ][ ORDER BY <列名2> [ ASC|DESC ] ]

语句含义是:
根据WHERE子句的条件表达式从FROM子句指定的基本表、视图、派生表中找出满足条件的元组,再按SELECT子句中的目标列表达式选出元组中的属性值形成结果表
如果有GROUP BY子句,则将结果按列表1的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。如果GROUP BY子句带有HAVING短语,则只有满足指定条件的组才予以输出
如果有ORDER BY子句,则结果表还要按列名2的值的升序或降序排序
SELECT语句既可以完成简单的单表查询,也可以完成复杂的链接查询和嵌套查询。

例3.16:查询全体学生的学号与姓名:
在这里插入图片描述

SELECT Sno,Sname
FROM Student;

在这里插入图片描述
例3.17:查询全体学生的姓名、学号、所在系:

SELECT Sname,Sno,Sdept
FROM Student;

在这里插入图片描述

例3.18:查询全体学生的详细信息:
在这里插入图片描述

查询经过计算的值

SELECT 子句的<目标列表达式>不仅可以是表中的属性列,也可以是表达式

例3.19:查询全体学生的姓名及其出生月份:

SELECT Sname,2020-Sage
FROM Student;

在这里插入图片描述
例3.20:查询全体学生的姓名、出生月份和所在院系,要求用小写字母表示系名:

SELECT Sname,"Year of birth:",2021-Sage,LOWER(Sdept)
FROM Student;

在这里插入图片描述

用户可以通过指定别名来改变查询结果的列标题
列名+‘ ’+列标题,…

选择表中的若干元组

例3.21:查询选修了课程的学生学号:
执行下列语句,可能会出现重复的行

SELECT Sno
FROM SC;

而添加一个DISTINCT即可去重

SELECT DISTINCT Sno
FROM SC;

http://chatgpt.dhexx.cn/article/Kkysjmef.shtml

相关文章

Elasticsearch7.8.0版本进阶——动态更新索引

目录 一、如何在保留不变性的前提下实现倒排索引的更新二、按段搜索执行流程三、按段搜索的文档查询四、按段搜索的文档删除五、按段搜索的文档更新 一、如何在保留不变性的前提下实现倒排索引的更新 用更多的索引。通过增加新的补充索引来反映最近的修改&#xff0c;而不是直…

ElasticSearch 动态更新索引

Elasticsearch版本:2.x 1. 不变性 倒排索引被写入磁盘后是 不可改变(immutable):永远不会被修改。不变性有如下几个重要的优势: 不需要锁。如果你没有必要更新索引,你就没有必要担心多进程会同时修改数据。一旦索引被读入内核的文件系统缓存中,由于其不会改变,便会留在那…

MySQL:插入,更新与删除、索引

一、学习目标 掌握如何向表中插入数据掌握更新数据的方法熟悉如何删除数据掌握对数据表基本操作的方法和技巧了解什么是索引掌握创建索引的方法和技巧熟悉如何删除索引熟悉掌握索引的常见问题 二、实验内容 创建表books&#xff0c;对数据表进行插入、更新和删除操作&#x…

搜索引擎索引之如何更新索引

本文节选自《这就是搜索引擎&#xff1a;核心技术详解》第三章 动态索引通过在内存中维护临时索引&#xff0c;可以实现对动态文档和实时搜索的支持。但是服务器内存总是有限的&#xff0c;随着新加入系统的文档越来越多&#xff0c;临时索引消耗的内存也会随之增加。当最初分…

IDEA总是自动更新索引怎么解决

从File进入settings 搜索index_>修改右边的两个即可,点击OK保存即可

项目中如何使用ElasticSearch?变更数据时难道既更新数据库也要更新索引?这篇文章也许对你有点帮助(持续更新)

目录 1. 概述2.ElasticSearch的调试2.1 启动ES2.2 创建搜索的微服务2.3 使用logstash同步数据库数据到es的索引中 3.Linux系统下部署3.1 拉取es容器3.2 让9300端口可用3.3 安装ik分词器3.4 安装head-master3.5 配置logstash&#xff08;耗时最久&#xff09; 四. 出现的bug4.1 …

【Mysql】 sql语句实现update_or_create(唯一索引 ON DUPLICATE KEY UPDATE)

【Mysql】 on duplicate key update用法、优缺点以及使用案例 1. 应用场景&#xff1a; 导入数据功能&#xff0c;需要实现数据不存在时进行新建&#xff0c;有数据修改时则进行更新。在实现时&#xff0c;思路通常为先判断数据是新增还是更新&#xff0c;除了我们在代码层面实…

mysql-索引

1.索引的定义&#xff1a; 索引是帮助MySql高效获取数据的数据结构。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用数据&#xff0c;这样就可以在这些数据结构上实现高级查找算法&#xff0c;这种数据结构就是索…

mysql中的各种索引大总结

文章目录 为啥不用二叉搜索树&#xff1f;为啥不用平衡二叉&#xff08;avl&#xff09;树&#xff1f;为啥不用b-树&#xff1f;为啥用b树&#xff1f;&#xff08;重点&#xff09;索引聚簇索引聚簇索引的局限聚集的数据的优点非聚簇索引介绍组合索引覆盖索引前缀索引前缀索引…

MySQL索引的更新策略

对于数据的每一次更新&#xff0c;MySQL并不会每次都会更新索引(针对非唯一性索引而言)&#xff0c;索引的更新策略是这样的&#xff1a; 在InnoDB中&#xff0c;增删改都会立刻修改主键or唯一索引&#xff0c;但是不会rebuild全局索引&#xff0c;而是对这些索引增加值(或移除…

苹果各机型尺寸大小

//6.5英寸 #define iPhoneXSMax ([UIScreen instancesRespondToSelector:selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) : NO) //6.1英寸 #define iPhoneXR ([UIScreen instancesRespondToSelector:selec…

iOS 手机尺寸

iPhone设备 物理分辨率是硬件所支持的&#xff0c;逻辑分辨率是软件可以达到的。 代数设备操作系统逻辑分辨率(point)物理分辨率(pixel)屏幕尺寸(对角线长度)缩放因子 iPhone 第一代iPhone 2GiOS 1320 x 480480 x 3203.5寸1x第二代iPhone 3iOS 2320 x 480480 x 3203.5寸1…

jQuery weui 时间选择器datetimepicker年月日最简单解决方案

使用jqweui的时候发现&#xff0c;datetimePicker&#xff08;时间日期选择器&#xff09;竟然不提供只有年月日这种模式&#xff0c;真是牛逼&#xff08;垃圾&#xff09;&#xff0c;跟着我&#xff0c;只需要很简单的修改就好了&#xff0c;上图 下面是js $("#datati…

jquery weui 显示loading

jQuery weui 显示loading按钮官方文档并没有给出demo&#xff0c;经过调试&#xff0c;把代码给拷贝了出来。 实现显示loading的代码如下&#xff1a; <div id"loadDiv" style"display: none;" class"weui-toast weui_loading_toast weui-toast--…

$ppclass php,jquery weui

"weui-tab"!----"weui-"!--二级页积分详情--"""weui--itemweui-tab__bd-item--active"divclass"details"divclass"page-header"?Html::img($this-theme-getAssetUrl(images/logo.png),[classlogo])?/divahref&q…

移动端框架之JQuery WeUI

和JQuery WeUI 配合使用的WeUI&#xff0c;是移动端快速开发的利器。 在初步使用的过程中&#xff0c;发现JQuery WeUI扩展的几个功能特别实用&#xff1a; 1.通知&#xff1a;模仿iOS风格的通知。你可以自定义标题&#xff0c;文案和图标。通过滑动手势可以关闭。 这种通知形…

基于Jquery WeUI的微信开发H5页面控件的经验总结(2)

在微信开发H5页面的时候&#xff0c;往往借助于WeUI或者Jquery WeUI等基础上进行界面效果的开发&#xff0c;由于本人喜欢在Asp.net的Web界面上使用JQuery&#xff0c;因此比较倾向于使用 jQuery WeUI&#xff0c;本篇随笔结合官方案例和自己的项目实际开发过程的经验总结&…

jquery weui 图片浏览器Photo Browser 如何使用?

对应组件地址&#xff1a;http://jqweui.com/extends#swiper 先说说业务场景&#xff1a;类似朋友圈这样的布局效果&#xff0c;点击小图可以浏览大图&#xff0c;并支持大图左右切换&#xff0c;效果图如下&#xff08;加了滚动加载更多的操作在里面&#xff09;&#xff1a;…

jQuery WeUI日历calendar时间段(开始日期默认选中日期是今天,结束日期设置最小日期),显示日期格式是yyyy年mm月dd日

jQuery WeUI官网&#xff1a; https://jqweui.cn(国内) 说明 日历calendar时间段为两段&#xff0c;开始日期和结束日期。 开始日期&#xff1a;打开后&#xff0c;默认选中日期是今天。 结束日期&#xff1a;打开后&#xff0c;默认选中和最小日期是开始日期。 html <d…

【WeUI】关于jQuery WeUI和WeUI版本兼容的问题

最近做的一个小demo&#xff0c;在添加Dialog的时候出现了对话框显示的问题&#xff0c;如下左图所示。 一开始以为自己的写的CSS文件影响了&#xff0c;注释掉还是这个问题&#xff0c;所以问题指向很明确了&#xff0c;是官方weui.css的问题。但是官方demo里的运行是正常显示…