4. 数据更新

1)增

对应INSERT语句。格式为INSERT INTO T[(A1,…,Ak)]  VALUES (C1,…,Ck),其中A代表表T的属性,C代表常量,A可以缺省,此时C必须严格按照基本表T定义的属性顺序提供相应的值,否则A可以是任何顺序,并且也可以是不完整的,即可以只列举基本表的若干属性。例如插入一个选课记录,学号为20142480135的学生选修了课程号为MA302的课程,

INSERT INTO SC (Sno,Cno)

VALUES ('20142480135','MA302');

基本用法较为简单,但是插入有跟=更高级的用法,即插入查询结果,即上面VALUES语句改为SELECT语句,只是SELECT选择的属性要和要插入的属性保持一致。

注:当SELECT语句中出现常量时,会将查询结果中的每个元组的值均取该值。

2)删

对应DELETE语句。基本格式为DELETE FROM T [ WHERE <删除条件> ],整体比较简单,例如删除学号为20142480135的学生信息

DELETE FROM Student

WHERE Sno = '20142480135';

没有WHERE时,代表删除一个表中所有的记录(不是删除表,而是清空表)

DELETE FROM Student

同样的,这里也能使用SELECT代替WHERE语句,例如删除所有软件工程学生的选课记录

DELETE FROM SC

WHERE Sno IN

  (SELECT Sno

  FROM Student

  WHERE Speciality = '软件工程');

 

3)改

对应UPDATE语句。基本格式:UPDATE T SET A1 = C1,…,Ak = Ck [WHERE <查询条件> ]

基本用法很好理解,直接上例子,修改学号为20142480135学号的学生MA302课程成绩为90:

UPDATE SC

SET Grade = 90

WHERE Cno = 'MA302' AND Sno = '20142480135';

再来,修改姓名武一鸣,课程名称微积分的课程分数为90

UPDATE SC

SET Grade = 90

WHERE Cno IN (

SELECT Cno

FROM Course

WHERE Cname = '微积分'

AND Sno IN (

SELECT Sno

FROM Student

WHERE Sname = '武一鸣'); 

5. 视图

视图是一种命名的导出表,并不物理的存储在数据库中。

1)视图创建和删除

CREATE VIEW <视图名> [ (<列名>,…,<列名>) ]

AS <查询表达式>

[WITH CHECK OPTION]

查询表达式通常不带DISTINCT和ORDER BY的SELECT语句,其中列名可以缺省,不过只能是SELECT语句选择的结果时属性时,(你问还有什么?还有聚集函数、常数等等啊),WITH CHECK OPTION这句短语代表视图是可更新的。(你为什么不起名updatable啊??)

视图到底有什么用呢?我直接创建一个这样表不就行了?接下俩有时间我可能会介绍数据库设计理论,数据库必须要符合相应的范式,切不可随意设计,因为数据库设计不好会导致后面开发工作寸步难行。所以视图是有必要的。这是我理解的视图作用,而不是教科书中的那样几点,包括查询简洁、逻辑独立、安全保护和提供不同角度看待相同数据。

创建软件工程学生成绩视图:

CREATE VIEW STU_GRADE

AS SELECT Sno,Cno,Cname,Sname,Grade

FROM SC,Student,Course

WHERE SC.Cno = Course.Cno AND 

SC.Sno = Student.Sno AND 

Speciality = '软件工程';

删除和基本表相同:DROP VIEW <视图名> { CASCADE | RESTRICT }

2)基于视图的查询和更新

事实上与基本表并无任何区别,就是FROM后面紧跟的基本表名改为视图名即可;但是除了视图还可以使用不命名的导出表,除了能改成视图名之外,还可以进一步改为视图的定义,例如:

SELECT * 

FROM ( SELECT Sno,Cno,Cname,Sname,Grade

FROM SC,Student,Course

WHERE SC.Cno = Course.Cno AND 

SC.Sno = Student.Sno AND 

Speciality = '软件工程') AS STU_GRADE

WHERE Sname = '武一鸣'; (不知道AS STU_GRADE是不是必须的?)

6. 模式Schema和索引Index

之前刚开始看到模式是还是有点懵的,不知道这有什么用,只是看到定义说是“支持SQL的DBMS环境”,囊括所有SQL对象,包括关系、视图、索引和函数等。我认为,注意是我认为,这里的模式SCHEMA应该同MySQL中的DataBase是同一个概念,有删除和创建的用法:

CREATE SCHEMA (DATABASE) MY_SCHEMA AUTHORIZATION WuYiming;

即为用户Wuyiming创建一个MY_SCHEMA 的模式(数据库),后面的AUTHORIZATION WuYiming是可以省略的,代表不想任何用户授权。还可以不写名字,

CREATE SCHEMA (DATABASE) AUTHORIZATION WuYiming;

这样模式(数据库)的名字就和用户名一样了。

删除模式则是和视图基本表等同样的操作

DROP SCHEMA MY_SCHEMA CASCADE;

至于索引,是为了优化查找速度而对某些属性建立的,通常DBMS会为主码建立索引。建立索引的语句格式为:

CREATE [ UNIQUE ] [ CLUSTER ] INDEX <索引名>

ON <表名> ( <列名> [ <次序> ],…,<列名> [ <次序> ]

其中次序包括ASC和DESC两种情况,缺省为ASC,UNIQUE 表示唯一性索引,CLUSTER表示聚簇索引。

聚簇索引查询效率比非聚簇索引高,但是维护代价高,且一个基本表上只能有一个聚簇索引。

删除索引,DROP INDEX <索引名>

(五) 结构化查询语言SQL——3的更多相关文章

  1. 数据库入门4 结构化查询语言SQL

    知识内容: 1.了解SQL 2.库.表操作及索引 3.select语句及insert语句 4.update语句与delete语句 5.SQL常用函数 6.多表连接及组合查询 7.视图操作及数据控制 参 ...

  2. 结构化查询语言-SQL

    结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程 ...

  3. (三) 结构化查询语言SQL——1

    1. SQL概述 SQL,结构化查询语言,重要性不必在赘述了,基本上开发软件没有不用到的,此外在一些大数据也有广泛的应用.SQL主要包含数据定义语言(DDL).数据操纵语言(DML)以及数据控制语言( ...

  4. 结构化查询语言(SQL)数据类型

    简要描述一下结构化查询语言中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型. 字符型 VARCHARVS CHAR VARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要.他们都是用 ...

  5. Oracle数据库语言——结构化查询语言SQL

    一.数据定义语言DDL 1.创建表空间:CREAT TABLESPACE lyy DATAFILE 'C:/app/lyy.dbf' SIZE 10M;(创建一个10M的表空间,存放在C盘app文件夹 ...

  6. (四) 结构化查询语言SQL——2

    3)ORDER BY排序语句 通常,查询的结果是以无序的方式显示的,有时需要将查询结果按照一定次序来进行排序.ORDER BY就可以用上了,例如查询课程号为202的课程成绩的所有信息,并按照成绩降序排 ...

  7. SQL 数据库结构化查询语言

    1.数据库 常见数据库 MySQL:开源免费的数据库,小型的数据库. Oracle:收费的大型数据库,Oracle 公司的产品 DB2:IBM 公司收费的数据库,常应用在银行系统中 SQLServer ...

  8. SQL结构化查询语言

    一.SQL 结构化查询语言 1.T-SQL 和 SQL的关系 T-SQL是SQL的增强版 2.SQL的组成 2.1 DML (数据操作语言) 增加,修改,删除等数据操作 2.2 DCL (数据控制语言 ...

  9. SQL 结构化查询语言

    SQL 结构化查询语言 一.数据库的必要性: >>作用:存储数据.检索数据.生成新的数据 1)可以有效结构化存储大量的数据信息,方便用户进行有效的检索和访问. 2)可以有效地保持数据信息的 ...

随机推荐

  1. ubuntu下不能访问docker中的rabbitmq服务端口

    主要原因是防火墙屏蔽了15672端口,宿主机就不能直接通过 ip:port的形式访问rabbitmq的管理界面了. 解决方法很简单: 设置防火墙规则,使外部主机能够访问虚拟机的15672端口. 启动i ...

  2. 前端H5中JS用FileReader对象读取blob对象二进制数据,文件传输

    HTML5中的Blob对象只是二进制数据的容器,本身并不能操作二进制,故本篇将对其操作对象FileReader进行介绍. FileReader FileReader主要用于将文件内容读入内存,通过一系 ...

  3. PYTHON 100days学习笔记002:语言元素-数字变量与运算符

    参考文章: Python 变量类型 Python 运算符 Day02 - 语言元素 1. 指令和程序 计算机的硬件系统通常由五大部件构成,包括:运算器.控制器.存储器.输入设备和输出设备.其中,运算器 ...

  4. c++面向对象程序设计第四章课后习题

    这是书上的习题,我使用的是VS2010运行编译的 原习题: 4.有两个矩阵a和b,均为两行三列.求两个矩阵之和.重载运算符“+”,使之能用于矩阵相加.如c=a+b. #include<iostr ...

  5. sql 循环转移备份数据

    --创建表结构 select top 1 * into ATable_20190710 from ATable --转移表数据 insert into ATable_20190710 select t ...

  6. bootstrap-table服务端分页操作

    由于数据库查询的数据过多,所以采取服务端分页的操作,避免一次性加载的数据量过多,导致页面加载缓慢. 后端数据的封装格式json数据 rows里的数据是当前页的数据,total是总条数: { " ...

  7. 后缀数组练习4:Life Forms

    有一个细节不是特别懂,然后的话细节有点多,就是挺难发现的那一种,感谢大佬的博客 1470: 后缀数组4:Life Forms poj3294 时间限制: 1 Sec  内存限制: 128 MB提交: ...

  8. python 文件写入

    def write_file(): """ 文件写入""" file_name = "wri2te_test.txt" ...

  9. python2.7学习笔记——菜鸟教程

    标准数据类型 Numbers(数字) String(字符串) List(列表) Tuple(元组) Dictionary(字典) list = [ 'runoob', 786 , 2.23, 'joh ...

  10. 怎样理解 Vue 组件中 data 必须为函数 ?

    组件意在 复用 , 若为 对象, 则会相互干扰. 且 Vue 不允许此事发生, 规定必须为函数, 否则报错. 原理如下 对象 // 模拟创建组件 var Component= function() { ...