从本章开始,就接触到了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 = '北京女子职业技术学校'

  前面已经提到,在T-SQL表达式中,可以使用列名和数值。如果学员在考试时,有一道题目的标准答案错了,导致评分失误,事后需要在成绩表中更新成绩,所有低于95分的都在原来的基础上加5分,更新的SQL语句如下:

  Update Scores Set Scores = Scores + 5 where Scores <= 95

3.5 使用T-SQL删除数据

  删除数据行也是经常会用到的操作,使用SQL语句来操作相对比较简单。

3.5.1 使用Delete删除数据

  使用T-SQL删除表中的数据,语法格式为:

  Delete From <表名> [Where <删除条件>]

  在学员信息表中删除姓名为“张三”的SQL语句如下:

  Delete from Students where name = '张三'

  还有一种情况是,如果要删除的行的主键值被其他表引用,例如分数表中的StudentID引用了学员信息表中的Scode字段,那么删除被引用的行时:

  Delete from Students where Scode = 22

  SQL Server 将报告与约束冲突的错误信息。

3.5.2 使用Truncate Table删除数据

  Truncate Table 用来删除表中的所有行,功能上它类似于没有Where子句的Delete语句。

  例如,要删除学员信息表中的所有记录行,可以使用:

  Truncate Table Students

  但Truncate Table比Delete 执行速度快,而且使用的系统资源和事务日志资源更少。

  Truncate Table 删除表中的所有行,但是表的结构、列、约束、索引等不会被改动,Truncate Table 不能用于有外键约束引用的表,这种情况下,需要使用Delete语句。

  

转载于:https://www.cnblogs.com/jiazengtao/archive/2013/06/02/3114355.html

第三章 SQL Server 数据管理相关推荐

  1. 了解SQL Server数据管理生命周期

    This is the second article in the "Backup and Restore (or Recovery) in SQL Server" stairwa ...

  2. 第九章 SQL Server的简单应用

    第九章 SQL Server的简单应用 9.1 数据库的创建与管理 一.数据库的创建 CREATE DATABASE 教师库 --逻辑名 ON (NAME ='教师库_Data', --物理名 FIL ...

  3. c井语言和SQL第一章上机1,第一章 SQL Server 数据库基础复习内容(上机)

    上机课程总目标 在本学期中,将模拟开发一套学员信息管理系统,用来管理学员的个人基本资料,老师资料,学生成绩,课程信息等教学相关内容,以实现学校的信息自动化,提高工作效率. 该系统包括学生档案管理.学生 ...

  4. SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型

    原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server ...

  5. 数据库系统概念总结:第三章 SQL

    周末无事水文章,期末备考的总结资料 第三章 SQL 3.1 SQL查询语言概况 3.2 SQL数据定义 3.2.1 基本类型 char(n):固定长度n的字符串(长度不够自动补空格) varchar( ...

  6. 第三章 SQL命令 ALTER USER

    文章目录 第三章 SQL命令 ALTER USER 大纲 参数 描述 权限 示例 第三章 SQL命令 ALTER USER 修改用户密码. 大纲 ALTER USER user-name IDENTI ...

  7. 第三章 SQL错误信息

    文章目录 第三章 SQL错误信息 `SQLCODE` `0`和`100` `SQLCODE -400` 检索`SQL`消息文本 第三章 SQL错误信息 下表列出了SQL数字错误代码及其错误消息.这些代 ...

  8. 【学习笔记】数据库系统原理 第三章 SQL语言

    以下内容为参考课件和<数据库系统概论>(第5版,王珊等著)的个人整理,若有错误欢迎指出 第三章 SQL语言 文章目录 第三章 SQL语言 一.概述 二.数据查询功能 1.查询语句 2.连接 ...

  9. 第三章 SQL聚合函数 COUNT(一)

    文章目录 第三章 SQL聚合函数 COUNT(一) 大纲 参数 描述 没有行返回 流字段 第三章 SQL聚合函数 COUNT(一) 返回表或指定列中的行数的聚合函数. 大纲 COUNT(*)COUNT ...

最新文章

  1. mysql关于访问权限以及root密码修改
  2. ASP.NET缓存之 没有为 SQL 缓存通知启用数据库“ReplaceShop”。
  3. 自定义v-drag指令(横向拖拽滚动)
  4. Codeforces Round #700 (Div. 2) C. Searching Local Minimum 交互二分
  5. 2Do for Mac(任务管理GTD工具)
  6. button按钮的四种监听及实例
  7. 汉字区位码查询与算法
  8. Fisker大师用ZBrush制作兽人萨尔全过程
  9. 永续公债(or统一公债)的麦考利久期(Macaulay Duration)的计算
  10. js生成[n,m]的随机数公式,存入一个数组中,并排序
  11. moment获取几小时前_moment.js 常用(几天前、相差几天、自然周、自然月)
  12. 自己构建iSCSI磁盘阵列
  13. android 语音识别文字
  14. Python线程和进程的了解,多线程多进程
  15. Alphapose - 在Alphapose中使用yolov3-tiny检测器大幅提升检测性能
  16. Studio 3T for MongoDB脚本-----两种方法
  17. 25G vs 40G以太网之争的五点思考
  18. (转)源于魔兽!《植物大战僵尸》成功奥秘
  19. 房地产360全景的制作方法
  20. Android之——应用更新功能

热门文章

  1. 百度启动干部轮岗 涉及三位副总裁
  2. AndroidStudio选择及裁剪图片
  3. 习题4-8 高空坠球 (20分) 皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?
  4. VSCode插件之实时字数统计与选中词英汉互译
  5. 数据结构与算法之一(书籍篇)
  6. 切,老掉牙的TCP知识
  7. 一篇文章教你如何快速在Linux上 安装JDK
  8. 低成本,大用处——极弱监督的海量文本知识挖掘 | 加州大学圣地亚哥分校商静波...
  9. java中mdc是什么_MDC是什么鬼?用法、源码一锅端
  10. 月销售额224万美金的Shopify独立站卖家实操详解