CH03_数据操作

本章目标

  • 使用T-SQL向表中插入数据
  • 使用T-SQL更新表中数据
  • 使用T-SQL删除表中数据
  • 数据的导入和导出

SQL 简介

SQL 是什么

SQL 是一种操作数据库的语言,包括创建数据库、删除数据库、查询记录、修改记录、添加字段等。SQL 虽然是一种被 ANSI 标准化的语言,但是它有很多不同的实现版本。

​ ANSI 是 American National Standards Institute 的缩写,中文译为“美国国家标准协会”。

SQL 是 Structured Query Language 的缩写,中文译为“结构化查询语言”。SQL 是一种计算机语言,用来存储、检索和修改关系型数据库中存储的数据。

SQL 是关系型数据库的标准语言,所有的关系型数据库管理系统(RDBMS),比如 MySQL、Oracle、SQL Server、MS Access、Sybase、Informix、Postgres 等,都将 SQL 作为其标准处理语言。

此外,SQL 也有一些变种,就像中文有很多方言,比如:

  • 微软的 SQL Server 使用 T-SQL;
  • Oracle 使用 PL/SQL;
  • 微软 Access 版本的 SQL 被称为 JET SQL(本地格式)。

SQL 的用途

SQL 之所以广受欢迎,是因为它具有以下用途:

  • 允许用户访问关系型数据库系统中的数据;
  • 允许用户描述数据;
  • 允许用户定义数据库中的数据,并处理该数据;
  • 允许将 SQL 模块、库或者预处理器嵌入到其它编程语言中;
  • 允许用户创建和删除数据库、表、数据项(记录);
  • 允许用户在数据库中创建视图、存储过程、函数;
  • 允许用户设置对表、存储过程和视图的权限。

###SQL 简史

1970 年,IBM 的 Edgar Frank “Ted” Codd(埃德加·弗兰克·科德)博士描述了关系型数据库的模型,他因此被称为“关系型数据库之父”。

1974 年,IBM 希望把 Codd 的想法变成现实,着手开发一款名为 System R 的数据库,并研发出一套结构化查询语句 SEQUEL,这就是 SQL 的雏形。System R 数据库于 1978 年第一次发布,用于科研和实验。

1979 年,Oracle 公司首先提供商用的 SQL,随后 IBM 公司也在 DB2 数据库中实现了 SQL。

1986 年 10 月,美国 ANSI 采用 SQL 作为关系型数据库管理系统的标准语言,紧接着国际标准组织(ISO)也将 SQL 采纳为国际标准。

1989 年,ANSI 发布了 SQL 标准的重大更新版本,以弥补旧版的不足,称为 ANSI SQL 89,该版本也被 ISO 采纳。

目前,市场上主要的关系型数据库都有自己的 SQL 变种, 但是它们都遵守 ANSI SQL 89 标准。

SQL 执行过程

当你在任何一款 RDBMS 中执行 SQL 命令时,系统首先确定执行请求的最佳方式,然后 SQL 引擎将会翻译 SQL 语句,并处理请求任务。

整个执行过程包含了多种组件,比如:

  • 查询调度程序;
  • 优化引擎;
  • 传统的查询引擎;
  • SQL 查询引擎。

传统查询引擎能够处理所有的非 SQL 命令,但是 SQL 引擎并不能处理逻辑文件。

下图展示了 SQL 的体系结构:

SQL 命令

与关系型数据库有关的 SQL 命令包括 CREATE、SELECT、INSERT、UPDATE、DELETE、DROP 等,根据其特性,可以将它们分为以下几个类别。

1.数据定义语言

DDL - Data Definition Language,数据定义语言。对数据的结构和形式进行定义,一般用于数据库和表的创建、删除、修改等。

2.数据处理语言

DML - Data Manipulation Language,数据处理语言。对数据库中的数据进行处理,一般用于数据项(记录)的插入、删除、修改和查询。

3.数据控制语言

DCL - Data Control Language,数据控制语言。控制数据的访问权限,只有被授权的用户才能进行操作。

T-SQL

  1. T-SQL :Transact-SQL
  2. T-SQL是SQL的增强版
  3. 对功能进行了扩充:如变量说明、流程控制、功能函数

运算符

赋值运算符

算术运算符

比较运算符

逻辑运算发怒

查询窗口

插入数据

插入单行:

1
INSERT  [INTO]  表名  [(列名)] VALUES  (值列表)

插入多行:

1
2
3
4
-- 查询现有数据,插入到目标表中(目标表已存在)
INSERT INTO <表名>(列名)
SELECT <列名>
FROM <源表名>
1
2
3
4
-- 查询现有数据,插入到目标表中(目标表自动创建)
SELECT (列名)
INTO <表名>
FROM <源表名>
1
2
3
4
5
-- 通过UNION关键字合并数据进行插入
INSERT INTO <表名>(列名)
SELECT <列名> UNION
SELECT <列名> UNION
……

案例:插入单行数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- 中括号可省略
INSERT INTO [Student]
([StudentNo]
,[LoginPwd]
,[StudentName]
,[Sex]
,[GradeId]
,[Phone]
,[Address]
,[Birthday]
,[Email])
VALUES
('S101'
,'yyds2021'
,'鸡你太美'
,'男'
,1
,'13688459921'
,'北京市朝阳区'
,'2000-1-1'
,'8888888@qq.com')

案例:插入多行数据(自动建新表)

1
2
3
SELECT StudentNo,StudentName,Sex
INTO stuinfo
FROM Student

案例:插入多行数据(联合多条数据)

1
2
3
4
5
6
7
8
9
10
11
12
13
INSERT INTO [Student]
([StudentNo]
,[LoginPwd]
,[StudentName]
,[Sex]
,[GradeId]
,[Phone]
,[Address]
,[Birthday])
SELECT
'S101','yyds2021','鸡你太美','男',1,'13688459921','北京市朝阳区','2000-1-1' UNION
'S102','yyds2021','东北大麻花','女',1,'13688459921','北京市朝阳区','2000-1-1' UNION
'S103','yyds2021','草原狼','男',1,'13688459921','北京市朝阳区','2000-1-1'

注意事项1:每次插入一行数据,不能只插入半行或者几列数据插入的数据是否有效将按照整行的完整性的要求来检验。

注意事项2:每个数据值的数据类型、精度和小数位数必须与相应的列匹配。

注意事项3:不能为标识列指定值。

注意事项4:如果在设计表的时候就指定了某列不允许为空,则必须插入数据。

注意事项5:插入的数据项,要求符合检查约束的要求。

注意事项6:具有缺省值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值。

修改数据

1
2
UPDATE 表名 SET 列名 = 更新值 
[WHERE 更新条件]

案例:

1
2
3
4
-- 修改地址
UPDATE Student
SET Address ='北京女子职业技术学校家政班'
WHERE Address = '北京女子职业技术学校刺绣班'
1
2
3
4
-- 修改成绩
UPDATE Result
SET StudentResult = StudentResult + 5
WHERE StudentResult <= 95

删除数据

使用DELETE删除

1
DELETE [FROM]  表名 [WHERE <删除条件>]

使用TRUNCATE TABLE删除

1
TRUNCATE  TABLE  表名

1.不能用于有外键引用约束的表。

2.标识列会重新开始编号。

3.类似与DELETE语句不加WHERE表达式。

案例:删除不及格的成绩记录

1
2
DELETE FROM Result
WHERE StudentResult<60

案例:清空成绩表

1
TRUNCATE  TABLE Result

导出数据

导入数据

课后作业

1.略