Home  >  Article  >  Database  >  第三章 SQL Server 数据管理

第三章 SQL Server 数据管理

WBOY
WBOYOriginal
2016-06-07 17:44:591221browse

从本章开始,就接触到了SQL语句的使用,首先介绍使用SQL语句进行数据插入、修改和删除操作。 3.1 SQL简介 在进行数据管理时,如果每次创建数据库、表或者从数据库中读取数据,都需要手动在SQL Server Management Studio中进行的话,不但管理不方便,而且存储

  从本章开始,就接触到了SQL语句的使用,首先介绍使用SQL语句进行数据插入、修改和删除操作。

3.1 SQL简介

  在进行数据管理时,如果每次创建数据库、表或者从数据库中读取数据,都需要手动在SQL Server Management Studio中进行的话,不但管理不方便,而且存储在数据库中的数据也根本无法提供给程序使用。所以,数据库也需要一套指令集,能够识别指令、执行相应的操作并为程序提供数据。

  目前标准的指令集就是SQL。

3.1.1 SQL和T-SQL

  SQL语言是1974年由Boyce和Chamberlin提出来的,1975-1979年IBM公司研制的关系数据库管理系统原形系统SystemR实现了这种语言,经过多年的发展,SQL语言已成为关系数据库的标准语言。

  SQL语言不同于Java、C#这样的程序设计语言,它只是数据库能够识别的指令;但是在程序中,可以组织SQL语句发送给数据库,数据库再执行相应的操作,例如:在C#程序中要得到SQL Server数据库表中的记录,可以在C#程序中编写SQL查询语句,然后发送到数据库,网站空间,数据库根据查询的SQL语句进行查询,再把查询的结果返回给C#程序。

  T-SQL(Transact-SQL)是标准SQL的加强版,除了标准的SQL命令之外,还对SQL命令做了许多扩充,提供类似于Java语言的基本功能,如变量说明、流程控制、功能函数等。

3.1.2 T-SQL的组成

  T-SQL语言主要由以下几个部分组成。

    DML(数据操作语言):用来查询、插入、删除和修改数据库中的数据,如 SELECT、Insert、Update及Delete等。

    DCL(数据控制语言):用来控制数据库组件的存取许可、存取权限等,如Grant、Revoke等。

    DDL(数据定义语言):用来建立数据库、数据库对象和定义其列,大部分是以Create开头的命令,如Create Table、Create View及Drop Table等。

  除此之外,T-SQL还包括变量说明、内嵌函数以及其他的命令等。

3.2 T-SQL中的条件表达式和逻辑运算符

  与Java语言一样,表达式是符号和运算符的组合,并且可以对它求值得到单个数据值。简单表达式可以是一个常数、变量、列或标量函数,可以用运算符把两个或多个简单表达式连接成一个复杂表达式。

3.2.1 条件表达式

  SQL Server中的表达式可以包含下列一个或多个参数。

    常量:表示单个指定数据值的符号。一个常量由一个或多个字母、数字字符(字母a~z、A~Z、数字0~9)或符号(!、@、#等)组成。字母和DateTime需要用引号括起来,而二进制字符串和数字常量则不需要。

    列名:表中列的名称,表达式中仅允许使用列的名称。

    {一元运算符}:仅有一个操作数的运算符,其中“+”表示正数,“-”表示负数,“~”表示补数运算符。

    {二元运算符}:将两个操作数组合执行操作的运算符。二元运算符可以是算术运算符、赋值运算符(=)、位运算符、比较运算符、逻辑运算符、字符串串联(或连接)运算符(+)或一元运算符。比较运算符及其含义如图。

运算符 含义

= 等于

> 大于

>= 大于或等于

不等于

! 非

  可以用这些运算符组成条件表达式。例如:我们可以编写以下代码:

  PRICE > 100

  Name Like '李%'

  GRADE '3'

  某些T-SQL语句中还可以使用图中的通配符运算符。

通配符 解释 示例

'_' 一个字符 A Like 'C_'

% 任意长度的字符串 B Like 'CO_%'

[] 括号中所指定范围内的一个字符 C Like '9W0[1-2]'

[^] 不再括号中所指定范围内的任意一个字符 D LIKE like '9W0[^1-2]'

  通配符经常与Like关键字一起配合使用,例如可以使用Like和通配符来完成对表的一些特殊约束,例如,要求表中的电话号码列输入的格式为11位手机号、可以编写以下的约束:

  TelCode Like '13[5-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

  在查询中也经常会用到Like语句。

3.2.2 逻辑表达式

  T-SQL支持的逻辑运算符有And、OR和Not。

  And和Or运算符连接条件,Not否定条件。And连接条件,并且仅当两个条件都为真时才返回True。OR也连接两个条件,但只要其中任意一个为真就返回True。

  当一个语句中使用了多个逻辑运算符时,首先求Not的值,然后求And的值,最后再求Or的值。

  例如采购订单表中的付款方式是信用卡,约束要求只能是牡丹卡、金穗卡、龙卡或者阳光卡,可以编写如下的约束表达式:

  Not (付款方式 = '信用卡') OR (信用卡 IN ('牡丹卡','金穗卡','龙卡','阳光卡'))

  IN关键字用来限制范围。在查询中也经常会用到逻辑表达式。

3.3 使用T-SQL插入数据

  已经了解了如何创建表,修改表的结构和添加约束,现在需要了解一下如何向表中添加数据。

  在SQL Server Management中插入数据比较简单,只要选择表,然后在快捷菜单中选择“打开表”选项,就可以向表中直接输入数据行。

  使用T-SQL可以想表中添加新数据,也可以将现有表中的数据添加到新创建的表中。

3.3.1 使用Insert插入数据行

  使用Insert语句一行一行地插入数据是最常用的方法,其语法格式如下:

  Insert [Into] [列名] Values

  其中:

    [Into] 是可选的,可以省略。

    表名是必需的,表的列名是可选的,如果省略,将依次插入。

    多个列名和多个值列表用逗号分隔。

  例如以下的语句,向学员表中插入一行数据

  Insert into Students (Name, Address, Grade, Email, Sex) Values ('张三', '上海', 6, '123@163.com', 0)

  SQL语句的执行一般在查询窗口中进行。

  检验SQL语句是否正确执行,可以再打开表查看数据项是否正确添加。

  在插入数据的时候,需要注意以下事项。

    每次插入一整行数据,不可能只插入半行或者几列数据,如果违反字段的非空约束,那么插入语句会检验失败。

    数据值的数目必须与列数相同,每个数据值的数据类型、精度和小数位数也必须与相应的列匹配。

    Insert语句不能为标识列指定值,因为它的数字是自动增长的。

    对于字符类型的列,当插入数据的时候,最好用单引号将其引起来,因为字符中包含了数字的时候特别容易出错。

    尽管可以不指定列名,但是最好明确指定插入的列和对应的值,以做到“心中有数”。

    如果在设计表的时候指定某列不允许为空,则该列必须插入数据,香港虚拟主机,否则将报告错误信息。

    插入的数据项,要求符合检查约束的要求,例如我们在前面设置了Email字段必须包含一个字符@,如果插入的语句修改为:

  Insert into Students (Name, Address, Grade, Email, Sex) Values ('张三', '上海', 6, '123', 0)

  执行该语句后,将提示与表的约束相冲突,插入失败。

  还有一个问题就是如果指定了列名,如何为具有默认值的列插入数据? 例如以上学员信息表中的地址信息是具有默认值的。这个时候可以使用Default(默认)关键字来代替插入的数值,插入语句如下:

  Insert into Students (Name, Address, Grade, Email, Sex) Values ('张三', Default, 6, '123', 0)

3.3.2 一次插入多行数据

  一次插入多行数据有三种方法,下面分别讲解。

  1. 通过Insert Selete语句将现有表中的数据添加到新表中。

  例如,如果创建一张新表来存储本班的通讯录信息,则可以从学员表中提取相关的数据,SQL语句如下:

  Insert into TongXunLu (姓名,地址,电子邮件) Select Name, Address, Email From Students

  Select语句用于查询,上面的SQL用来把学员信息表中已经存在的姓名、地址和E-mail信息插入到新的TongXunLu表,避免了录入大量重复的数据项。

  需要注意以下两点。

  (1)查询得到的数据个数、顺序、数据类型等,必须与插入的项保持一致。

  (2)TongXunLu表必须预先创建好,并且具有姓名、地址和电子邮件三个字段。

  2. 通过Select Into语句将现有表中的数据添加到新表中。

  与上面的Insert into 类似,Select Into语句也是从一个表中选择一些数据插入到新表中,香港空间,所不同的是,这个新表是执行查询语句的时候创建的,不能够预先存在。

  例如,以下的T-SQL语句:

  Select Students.Name, Students.Address, Student.Email Into TongXunLu From Students

  将创建新表TongXunLu,把Students表中的Name、Address、Email作为TongXunLu表的新列,并且把查询到的数据全部插入到新表中。

  在向一个新表插入数据的时候,又会牵涉到一个新的问题:如何插入标识列?

  因为标识列的数据是不允许指定的,因此我们可以创建一个新的标识列,语法如下。

  Select IDENTITY (数据类型,标识种子,标识增长量) AS 列名 Into 新表 From 原始表

  上面的语句可以修改为:

  Select Students.Name, Students.Address, Students.Email, IDENTITY(int, 1, 1) AS StudentID Into TongXunLu From Students

  3. 通过Union 关键字合并数据进行插入

  Union 语句用于将两个不同的数据或查询结果组合成一个新的结果集。

  当然,不同的数据或查询结果,也要求数据个数、顺序、数据类型都一致,因此,当向表中重复插入多次数据的时候,可以使用Select···Union来简化操作。

  例如,以下的T-SQL语句。

  Insert Students (Name, Grade, Sex) Select '张三', 7, 1 Union Select '李四', 3, 2 Union Select '王五', 5, 5 Union Select '刘六', 6, 6

  这样的效果其实与上面Insert···Select的效果是一样的,只不过多行数据是手写的,然后用Union合并组合成多行,最后把这些多行数据一起插入。

3.4 使用T-SQL更新数据

  数据更新是经常发生的事情,使用T-SQL可以进行数据更新。

  使用T-SQL更新表中某行的语法如下:

  UPDATE Set [WHERE ]

  其中:

    Set 后面可以紧随多个数据列的更新值,不限一个。

    Where 子句是可选的,用来限制条件。如果不限制,则整个表的所有数据行将被更新。

  需要注意的是,使用Update语句,可能更新一行数据,也可能更新多行数据,也可能不会更新任何数据。

  例如,在学员信息表中,要把所有学员的性别都改为0(女性)。

  Update Students Set Sex = 0

  学员的地址如果不输入默认值都为“北京女子职业技术学校”,如果这个班级改为学院,则需要按照条件进行更新。

  Update Students Set Address = '北京女子职业技术学院' where Address = '北京女子职业技术学校'

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn