数据查询和更新_第1页
数据查询和更新_第2页
数据查询和更新_第3页
数据查询和更新_第4页
数据查询和更新_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关于数据查询与更新第一张,PPT共七十九页,创作于2022年6月5.1 简单数据查询SELECT语句的组成子句解释SELECT后跟一组列的列表,或者一个星号表示想要返回所有的列FROM后跟一个表或者视图的名字,或者带有连接表达式的多个表WHERE后跟过滤规则ORDER BY后跟一组列的列表进行排序第二张,PPT共七十九页,创作于2022年6月5.1.1 SELECT和FROM子句1、指定返回列名【例 5.1】返回XS表中所有的记录的XH(学号)、XM(姓名)、CSRQ(出生日期)列。SELECT XH, XM, CSRQ FROM XS第三张,PPT共七十九页,创作于2022年6月5.1.1

2、SELECT和FROM子句2、返回所有列SELECT * FROM XS第四张,PPT共七十九页,创作于2022年6月5.1.1 SELECT和FROM子句3、在SELECT子句后加入计算列(1)SELECT XH, XM+ (+XB+) , CSRQ FROM XS(2)SELECT XH, XM,GETDATE(),10, CSRQ FROM XS第五张,PPT共七十九页,创作于2022年6月5.1.2 列别名和表别名1、 原始列名 AS 别名。SELECT XH AS 学号, XM+(+XB+) AS 姓名性别,CSRQ AS 出生日期FROM XS第六张,PPT共七十九页,创作于202

3、2年6月5.1.2 列别名和表别名2、 原始列名 别名 SELECT XH 学号, XM 姓名, CSRQ 出生日期 FROM XS3、 别名=原始列名SELECT学号=XH, 姓名= XM, 出生日期= CSRQ FROM XS第七张,PPT共七十九页,创作于2022年6月5.1.2 列别名和表别名表别名:1、“始表名 AS 别名” SELECT XH, XM, CSRQFROM XS a 2、 “原始表名 别名” SELECT XH, XM, CSRQ FROM XS AS a第八张,PPT共七十九页,创作于2022年6月5.1.3 WHERE子句例:从XS表中查找姓名为“曹敏”的同学的学

4、号,姓名,性别。SELECT XH,XM,XB FROM XS WHERE XM=曹敏第九张,PPT共七十九页,创作于2022年6月5.1.3 WHERE子句NULL值参与的比较:当字段未设置值或变量未设值时,其值为NULL,即不包含任何值(1)、当ANSI_NULLS为OFF时(默认),任何与NULL值的运算结果都为NULL,任何与NULL的比较结果都为UNKNOW(不确定)。(2)当ANSI_NULLS为ON时,除了=和!=或者比较运算符外,其他比较运算符和NULL比较也会得到UNKNOWN值。第十张,PPT共七十九页,创作于2022年6月5.1.3 WHERE子句例1:SELECT *

5、FROM XS WHERE SFZ=NULL OR SFZ !=NULL结果:空例2: SELECT * FROM XS WHERE SFZ is NULL第十一张,PPT共七十九页,创作于2022年6月5.1.3 WHERE子句例3:SET ANSI_NULLS OFFSELECT * FROM XS WHERE SFZ=NULL第十二张,PPT共七十九页,创作于2022年6月5.1.4 ORDER BY子句1、单个字段排序SELECT * FROM XS ORDER BY XH -按学号进行排序NULL排最前面第十三张,PPT共七十九页,创作于2022年6月5.1.4 ORDER BY子句

6、2、多字段排序ORDER BY后面可以指定多个排序字段,字段之间以“,”分隔。在指定了多列情况下,首先按第一列排序,在第一列相同的情况下按第二列排序,以此类推。第十四张,PPT共七十九页,创作于2022年6月5.1.4 ORDER BY子句例:SELECT XH,XM,XB,DATEDIFF(DAY,CSRQ,GETDATE()/365 AS NL FROM XS ORDER BY XM, NL注意:汉字按拼音首字母排序此处有空格第十五张,PPT共七十九页,创作于2022年6月5.1.4 ORDER BY子句降序排序:如果没有特别说明,值是以升序序列进行排序的。你也可以选择使用ASC关键字指定

7、升序排序。如果你希望以降序排列,则在ORDER BY后面使用DESC关键字。例:SELECT * FROM XS ORDER BY CSRQ DESC 第十六张,PPT共七十九页,创作于2022年6月5.1.5 TOP子句TOP子句用来返回排在前面特定数量的记录,而不管符合条件的行是多少。有两种方式用来指定返回的行:指定排在前面的绝对记录数,如:SELECT TOP (5)* FROM XS ORDER BY CSRQ DESC指定排在前面的记录数占总行数的百分比SELECT TOP(0.1) PERCENT * FROM XS ORDER BY CSRQ DESC第十七张,PPT共七十九页,

8、创作于2022年6月5.1.5 TOP子句WITH TIES子句WITH TIES子句用来解决在使用TOP子句按百分比返回后,与最后一名数据相同的记录不能出现在结果集中的问题。例:SELECT TOP(5) WITH TIES * FROM XS ORDER BY CSRQ DESC第十八张,PPT共七十九页,创作于2022年6月5.1.6 DISTINCT关键字DISTINCT用来从结果集中去除重复的记录。例:统计学生共来自于哪些民族。语句1:SELCET MZ FROM XS语句2:SELCET DISTINCT MZ FROM XS第十九张,PPT共七十九页,创作于2022年6月5.2

9、分组查询5.2.1 聚合函数特点:作用在多条记录上。换句话说,函数的返回值建立在对多条记录进行统计的基础上。常用聚合函数:SUM, COUNT, MAX, MIN, AVG1、计算总分SELECT SUM(FS) FROM CJ WHERE XQDM=21 AND XSDM=20第二十张,PPT共七十九页,创作于2022年6月5.2.1 聚合函数2、计算最高分、最低分和平均分:SELECT MAX(FS) 最高分,MIN(FS) 最低分,AVG(FS) 平均分 FROM CJ WHERE XQDM=5 AND XSDM=163483、统计班级人数SELECT COUNT(*) FROM XS

10、WHERE BJDM=30第二十一张,PPT共七十九页,创作于2022年6月5.2.2 GROUP BY 子句GROUP BY 子句将查询结果按某一列或多列值分组输出,值相等的为一组。对查询结果分组的目的是使集函数作用于每一个组,即每一个组都有一个函数值。第二十二张,PPT共七十九页,创作于2022年6月5.2.2 GROUP BY 子句例:查询每个同学的最高分、最低分和平均分。SELECT XSDM,MAX(FS) 最高分,MIN(FS) 最低分,AVG(FS) 平均分 FROM CJ GROUP BY XSDM第二十三张,PPT共七十九页,创作于2022年6月5.2.2 GROUP BY

11、子句例:每个同学在不同学期的最高分、最低分、平均分:SELECT XSDM,XQDM,MAX(FS) 最高分,MIN(FS) 最低分,AVG(FS) 平均分FROM CJ GROUP BY XSDM,XQDM第二十四张,PPT共七十九页,创作于2022年6月5.2.2 GROUP BY 子句注意:出现在GROUP BY 子句后面的字段列表应该也出现在SELECT子句中,否则获得的数据可能没有意义。如:SELECT MAX(FS) 最高分,MIN(FS) 最低分,AVG(FS) 平均分 FROM CJ GROUP BY XSDM上述语句执行后的结果集中你将无法确定成绩属于哪位学生第二十五张,PP

12、T共七十九页,创作于2022年6月5.2.2 GROUP BY 子句出现在SELECT子句中的字段列表除了聚合函数外,都必须出现在GROUP BY 子句后面。例如,下面的语句将会报错:SELECT XSDM,XQDM,MAX(FS) 最高分,MIN(FS) 最低分,AVG(FS) 平均分FROM CJ GROUP BY XSDM第二十六张,PPT共七十九页,创作于2022年6月5.2.3 HAVING子句HAVING子句用来对分组后的数据进行筛选例: 查询平均成绩大于65分的学生的最高分、最低分和平均成绩。SELECT XSDM,MAX(FS) 最高分,MIN(FS) 最低分,AVG(FS)

13、平均分FROM CJ GROUP BY XSDM HAVING AVG(FS)65第二十七张,PPT共七十九页,创作于2022年6月5.2.3 HAVING子句HAVING子句和WHERE子句很相似,均用于设置数据筛选条件。WHERE子句对分组前的数据进行筛选,条件中不能包含聚合函数;HAVING子句对分组过后的数据进行筛选,条件中经常包含聚合函数。 HAVING子句必须和GROUP BY子句联合使用第二十八张,PPT共七十九页,创作于2022年6月5.3 联接查询当返回的数据集中需要包含位于多个表中的数据时,需要用到联接查询。及联接查询用于在一个查询语句中同时返回多个表中的数据第二十九张,P

14、PT共七十九页,创作于2022年6月5.3.1 交叉联接(CROSS JOIN)交叉联接返回两个表的笛卡尔积。即:返回的数据集为一个表中的每一行与另一个表中每一行的组合。例:简单交叉联接SELECT * FROM KC CROSS JOIN XQ返回的记录数量为两个表记录数的乘积上面语句可以省略CROSS JOIN关键字,用“,”将两个表连接起来,即:SELECT * FROM KC , XQ该返回结果和交叉联接是基本是一致的,只是没有重复的字段。第三十张,PPT共七十九页,创作于2022年6月5.3.2 内联接(INNER JOIN)内联接是联接两个表最常用的方法,使用比较运算符进行表间某(

15、些)列数据的比较操作,并列出这些表中与联接条件相匹配的数据行。内联接可以理解为从两个表的笛卡尔积中筛选出完全符合联接条件的记录例: 显示成绩表中的所有数据,要求包含学生学号和姓名。SELECT XS.XH 学号,XS.XM 姓名,KCDM 课程代码,FS 分数,CJ.XSDM,XS.XSDM FROM XS INNER JOIN CJ ON CJ.XSDM=XS.XSDM 第三十一张,PPT共七十九页,创作于2022年6月5.3.3 外联接外联接分为三种:左外联接(LEFT OUTER JOIN或LEFT JOIN)右外联接(RIGHT OUTER JOIN或RIGHT JOIN)全外联接(F

16、ULL OUTER JOIN或FULL JOIN) 与内联接不同,外联接不仅列出与联接条件相匹配的行,还会显示左表(左外联接时)、右表(右外联接时)或两个表(全外联接时)中所有符合搜索条件的记录。第三十二张,PPT共七十九页,创作于2022年6月5.3.3 外联接1、左外联接左边表中的行都会出现在结果数据集中,如果左边表中的某一行在右边表中没有匹配的行(不满足联接条件),则以空值取代右边表中的值。例:查看每个专业有哪些班级。使用外联接:SELECT a.ZYDM, a.ZYMC, b.BJDM, b.ZYDM AS Expr1, b.BJMCFROM ZY AS a LEFT JOIN BJ

17、AS b ON a.ZYDM = b.ZYDM使用内联接:SELECT a.ZYDM, a.ZYMC, b.BJDM, b.ZYDM AS Expr1, b.BJMCFROM ZY AS a JOIN BJ AS b ON a.ZYDM = b.ZYDM第三十三张,PPT共七十九页,创作于2022年6月5.3.3 外联接2、右外联接右外联接和左外联接类似,不同的是把右边的表作为外部表(所有右边表中的行包含在结果数据集中)。例:查看每个专业有哪些班级。SELECT a.ZYDM, a.ZYMC, b.BJDM, b.ZYDM AS Expr1, b.BJMCFROM ZY AS a RIGHT

18、JOIN BJ AS b ON a.ZYDM = b.ZYDM第三十四张,PPT共七十九页,创作于2022年6月5.3.3 外联接3、全外联接在全外联接中,位于FULL JOIN两边的表中的行都会包含在结果数据集中。第三十五张,PPT共七十九页,创作于2022年6月5.3.4 自联接列名说明YGDM员工代码YGXM员工姓名SJLD该员工上级领导代码员工表自联接所联接的两个表在物理上为同一张表,但在逻辑上可看作两个表,用不同的表别名加以区分第三十六张,PPT共七十九页,创作于2022年6月5.3.4 自联接例:查询每位员工上级领导SELECT A.*,B.YGXM FROM YG A LEFT

19、JOIN YG B ON A.SJLD=B.YGDM第三十七张,PPT共七十九页,创作于2022年6月5.3.5 多表联接例 :显示学生信息,包括学生所在班级名称、专业名称和和系部名称SELECT XB.XBMC, ZY.ZYMC, BJ.BJMC, XS.*FROM XS INNER JOIN BJ ON BJ.BJDM = XS.BJDM INNER JOIN ZY ON BJ.ZYDM = ZY.ZYDM INNER JOIN XB ON ZY.XBDM = XB.XBDM第三十八张,PPT共七十九页,创作于2022年6月5.4 子查询 有两种子查询类型:标准子查询和相关子查询。标准子查

20、询执行一次,结果反馈给外层查询,它的返回值跟其外层查询没有联系(不相关)。相关子查询在子查询中引用了外层查询中的表,因此它的执行次数取决于其外层查询的查询次数。第三十九张,PPT共七十九页,创作于2022年6月5.4.1 标准子查询与相关子查询1、标准子查询 例 : 查询与学号为“0630160219”的同学同班的学生信息。步骤1:我们先求这个同学所在班级的班级代码:SELECT BJDMFROM XSWHERE XH = 0630160219步骤2:面语句查询结果为23。从XS表中查询BJDM为23的学生信息:SELECT *FROM XSWHERE BJDM=23第四十张,PPT共七十九页

21、,创作于2022年6月5.4.1 标准子查询与相关子查询步骤3:将前两个语句整合:SELECT *FROM XSWHERE BJDM = (SELECT BJDM FROM XS WHERE XH = 0630160219)注意事项:1、必须用“(”和“)”将子查询扩起来。2、处于比较运算符其中一边的子查询,其返回值应该只能有一行、一列,其返回值的数据类型应该和运算符另一边的值(列)是一致或可以被系统自动转换的。3、子查询中不能检索包含数据类型为text和image的列。第四十一张,PPT共七十九页,创作于2022年6月5.4.1 标准子查询与相关子查询2、相关子查询例 : 查询存在同名的学生

22、信息1):语句基本形式:SELECT * FROM XS WHERE 该同学存在同名2)判断指定学生是否重名:(SELECT COUNT(*) FROM XS WHERE XM=XXX)13)将2)代入1),并给xs表别名SELECT *FROM XS aWHERE (SELECT COUNT(*) FROM XS b WHERE (b.XM = XXX) 1)第四十二张,PPT共七十九页,创作于2022年6月5.4.1 标准子查询与相关子查询4)将指定学生xxx替换为外层被查询的学生SELECT *FROM XS aWHERE (SELECT COUNT(*) FROM XS b WHERE

23、 (b.XM = a.XM) 1)第四十三张,PPT共七十九页,创作于2022年6月5.4.2 使用ALL、ANY、SOME关键字ALL 在条件语句中,表示必须满足每一个条件项例: 查询XS表中年龄最大的学生。SELECT *FROM XSWHERE CSRQ = ALL (SELECT CSRQ FROM XS )第四十四张,PPT共七十九页,创作于2022年6月5.4.2 使用ALL、ANY、SOME关键字ANY(SOME) 在条件语句中,表示满足其中任何一个条件项例:取要出生日期不是最小的学生信息SELECT *FROM XSWHERE CSRQ ANY (SELECT CSRQ FRO

24、M XS )第四十五张,PPT共七十九页,创作于2022年6月5.4.3 EXISTS 和IN子查询EXISTS 子查询被称为“存在子查询”,它用来判断子查询相关表中是否存在满足子查询条件的行,而对于这些行的具体数据,子查询并不关心也不会被返回。当内层查询结果为“存在”满足子查询条件的行,则外层的WHERR子句返回真值,否则返回假值。由于EXISTS 子查询并不返回满足条件的数据,因此SELECT子句后的字段列表并无多大意义,通常将通过EXISTS引入的子查询的字段列表设为“*”,而不使用具体列名。EXISTS 子查询语法如下:NOT EXISTS (子查询)第四十六张,PPT共七十九页,创作

25、于2022年6月5.4.3 EXISTS 和IN子查询例:查询XS表中曾参加过考试的学生信息。SELECT *FROM XSWHERE EXISTS (SELECT * FROM CJ WHERE XSDM = XS.XSDM)第四十七张,PPT共七十九页,创作于2022年6月5.4.3 EXISTS 和IN子查询IN关键字用来确定给定的值(测试表达式)是否与子查询或列表中的值相匹配,它的作用相当于 “=ANY”。IN子查询语法如下:测试表达式 NOT IN ( 子查询 或者 表达式列表 ) 第四十八张,PPT共七十九页,创作于2022年6月5.4.3 EXISTS 和IN子查询例 :查询位于

26、班级代码为22、23或24的班级中所有学生的信息。SELECT *FROM XSWHERE BJDM IN (22,23,24)例:查询属于计算机信息管理专业(专业代码为6)所有学生的信息。SELECT *FROM XSWHERE BJDM IN (SELECT BJDM FROM BJ WHERE ZYDM=6)第四十九张,PPT共七十九页,创作于2022年6月5.4.4 派生表一个子查询能够返回一个由行和列构成的数据集,我们可以将这个数据集再看作一个表来处理,这个由子查询得出的新表就是我们说的“派生表”派生表有利于提高查询速度、简化操作派生表不是存储在数据库中的对象,它只在查询期间有效。第

27、五十张,PPT共七十九页,创作于2022年6月5.4.4 派生表例 查询班级代码为22的班级(06级商务英语1班)在学期代码为5的学期(20062007学年第1期)所有学生的考试成绩,包含学号,姓名,课程名称和分数。步骤1:我们从CJ表中取出符合条件的记录SELECT *FROM CJWHERE XQDM = 5 AND XSDM IN (SELECT XSDM FROM XS WHERE BJDM = 22)第五十一张,PPT共七十九页,创作于2022年6月5.4.4 派生表步骤2:将上步结果集当作虚拟表a使用,并与KC、XS表联接以获取姓名、课程名称等信息SELECT XS.XH, XS.

28、XM, KC.KCMC, a.FSFROM a JOIN XS ON XS.XSDM = a.XSDM JOIN KC ON a.KCDM = KC.KCDM第五十二张,PPT共七十九页,创作于2022年6月5.4.4 派生表步骤3:将第一步的语句替换第二步中虚拟表aSELECT XS.XH, XS.XM, KC.KCMC, a.FSFROM (SELECT XSDM, KCDM, XQDM, FS FROM CJ WHERE XQDM = 5 AND XSDM IN (SELECT XSDM FROM XS WHERE BJDM = 22) AS a JOIN XS ON XS.XSDM =

29、 a.XSDM JOIN KC ON a.KCDM = KC.KCDM第五十三张,PPT共七十九页,创作于2022年6月5.5 联合查询UNION关键字可以将两个或更多相互独立的SELECT语句的查询结果合并成一个集合,即执行联合查询。联合查询要求合并的几个数据集之间应该具有相同的字段数目和类型。 例:在同一个数据集中返回贺清青同学所有科目的考试成绩和平均成绩。第五十四张,PPT共七十九页,创作于2022年6月5.5 联合查询第一步,返回贺清青同学所有科目的成绩:SELECT KC.KCMC 科目, ABS(CJ.FS) 成绩FROM CJ INNER JOIN KC ON CJ.KCDM =

30、 KC.KCDM INNER JOIN XS ON CJ.XSDM = XS.XSDMWHERE XS.XM = 贺清青第二步,返回贺清青同学所有科目的平均分:SELECT AVG(ABS(CJ.FS)FROM CJ INNER JOIN XS ON CJ.XSDM = XS.XSDMWHERE XS.XM = 贺清青第五十五张,PPT共七十九页,创作于2022年6月5.5 联合查询第三步,为了满足两个结果集具有相同类型的字段,我们对上一语句改为下面这种形式:SELECT 科目= 平均分, 成绩=(SELECT AVG(ABS(CJ.FS)FROM CJ INNER JOIN XS ON CJ

31、.XSDM = XS.XSDMWHERE XS.XM = 贺清青)第四部,将第一步和第三步的结果用UNION关键字集合并:SELECT KC.KCMC 科目, ABS(CJ.FS) 成绩FROM CJ INNER JOIN KC ON CJ.KCDM = KC.KCDM INNER JOIN XS ON CJ.XSDM = XS.XSDMWHERE XS.XM = 贺清青UNIONSELECT 科目= 平均分, 成绩=(SELECT AVG(ABS(CJ.FS)FROM CJ INNER JOIN XS ON CJ.XSDM = XS.XSDMWHERE XS.XM = 贺清青)第五十六张,P

32、PT共七十九页,创作于2022年6月5.6 通用表表达式CTE CTE 与派生表类似,不存储为数据库对象,并且只在查询期间有效。与派生表的不同,CTE 可在同一查询中引用多次,可自引用。使用 CTE 可以获得提高可读性和轻松维护复杂查询的优点。CTE 由表示CTE的表达式名称、可选列列表和定义CTE的查询组成。CTE的基本语法结构如下:WITH CTE_NAME ( 列名1 ,.n ) AS( CTE查询语句 )运行 CTE 的语句为:SELECT * FROM CTE_NAME 第五十七张,PPT共七十九页,创作于2022年6月5.6 通用表表达式CTE例 查询班级代码为22的班级(06级商

33、务英语1班)在学期代码为5的学期(20062007学年第1期)所有学生的考试成绩,包含学号,姓名,课程名称和分数。WITH CTE_CJAS(SELECT *FROM CJWHERE XQDM = 5 AND XSDM IN (SELECT XSDM FROM XS WHERE BJDM = 22) )SELECT XS.XH, XS.XM, KC.KCMC, a.FSFROM CTE_CJ AS a JOIN XS ON XS.XSDM = a.XSDM JOIN KC ON a.KCDM = KC.KCDM第五十八张,PPT共七十九页,创作于2022年6月5.8 排名函数5.8.1 ROW

34、_NUMBERROW_NUMBER函数用来返回结果集内每行的行号,第一行从 1 开始。其语法为:ROW_NUMBER ( ) OVER ( )位于OVER后的括号中需要一个ORDER BY 子句,该子句用来确定为行分配唯一 ROW_NUMBER 的顺序。例 :查询06级商务英语1班(班级代码为22)的所有学生的学号、姓名、出生日期、家庭是地址,要求第一列为行号,并按学号排序。SELECT ROW_NUMBER ( ) OVER ( ORDER BY XH ) 行号,XH 学号,XM 姓名,CSRQ 出生日期,JTDZ 家庭地址FROM XS WHERE BJDM=22 第五十九张,PPT共七十

35、九页,创作于2022年6月5.8.2 RANK与DENSE_RANKRANK与DENSE_RANK函数都用来进行名次的排列。RANK函数在排定名次时会以排在前面的记录数为依据,而DENSE_RANK在排定名次时只考虑排在前面的不同数值的个数作为依据。RANK与DENSE_RANK的语法和ROW_NUMBER函数相似,即:RANK ( ) OVER ( ) 或DENSE_RANK ( ) OVER ( ) 第六十张,PPT共七十九页,创作于2022年6月5.8.2 RANK与DENSE_RANK例 查询班级代码为22的班级(06级商务英语1班)在学期代码为5的学期(20062007学年第1期)所

36、有学生的总分和名次。步骤1:查询学生的总分信息:SELECT XS.XH 学号, XS.XM 姓名,SUM(CJ.FS) 总分FROM CJ INNER JOIN XS ON XS.XSDM = CJ.XSDM INNER JOIN KC ON CJ.KCDM = KC.KCDMGROUP BY XS.XH,XS.XM ORDER BY 总分第六十一张,PPT共七十九页,创作于2022年6月5.8.2 RANK与DENSE_RANK步骤2:在SELECT子句中添加RANK 函数,并在ORDER BY子句中指定排名的依据:RANK ( ) OVER (ORDER BY SUM(CJ.FS) 最终

37、结果如下:SELECT XS.XH 学号, XS.XM 姓名,SUM(CJ.FS) 总分,RANK() OVER(ORDER BY SUM(CJ.FS) 名次FROM CJ INNER JOIN XS ON XS.XSDM = CJ.XSDM INNER JOIN KC ON CJ.KCDM = KC.KCDMGROUP BY XS.XH,XS.XM 第六十二张,PPT共七十九页,创作于2022年6月5.8.2 RANK与DENSE_RANK将上述语句中RANK替换为DENSE_RANK,则执行结果为:第六十三张,PPT共七十九页,创作于2022年6月5.9 数据更新5.9.1 使用INSER

38、T语句插入数据1、简单数据插入使用INSERT语句向表中插入单行数据的语法如下:INSERT INTO (字段列表) VALUES (值列表) 例 学生李金龙刚转到我校06级经济信息管理班(BJDM =26 ),请将该生数据添加到向XS表中。该生的登记信息如下:姓名:李金龙,性别:男,出生日期:1982-2-1。INSERT INTO XS (XM, XB, CSRQ, BJDM)VALUES (李金龙, 男, 1982-2-1, 26)第六十四张,PPT共七十九页,创作于2022年6月5.9.1 使用INSERT语句插入数据如果需要给每个字段指定值,则可省略字段列表,但要保证值列表与表中字段

39、一一对应例 BJ表中包括BJDM(班级代码),ZYDM(专业代码),BJMC(班级名称),NJ(年级),ZT(状态)四个字段。新增班级 07软件技术4班,专业代码13,年级2007,状态值为0。INSERT INTO BJ VALUES (1001,13,07软件技术班,2007,0)第六十五张,PPT共七十九页,创作于2022年6月5.9.1 使用INSERT语句插入数据2、批量数据插入在INSERT语句中使用一个SELECT查询将一个查询结果的内容添加到表中。其语法格式为:INSERT INTO (字段列表) 例 在数据库中新建表XS_2,用来存放已毕业学生信息,其结构和XS表完全相同。请

40、将2006级所有学生学号、班级、姓名、出生日期、家庭地址信息插入到XS_2中,并将ZT(状态)值设为1。年级信息保存在BJ表中,所以要知道学生所在年级,需要将BJ表和XS表联接。INSERT INTO XS_2 (XH,BJDM, XM, CSRQ, JTDZ,ZT)SELECT XH, BJ.BJDM,XM, CSRQ, JTDZ,1FROM XS INNER JOIN BJ ON XS.BJDM = BJ.BJDMWHERE BJ.NJ = 2006第六十六张,PPT共七十九页,创作于2022年6月5.9.1 使用INSERT语句插入数据3、将数据插入新表可以使用如下语法将查询到的数据插入

41、到一个新表中:SELECT INTO FROM 表名例 将CJ表中KCDM为6的数据插入到新表CJ_2中:SELECT * INTO CJ_2 FROM CJ WHERE KCDM=6第六十七张,PPT共七十九页,创作于2022年6月5.9.2 使用UPDATE语句修改数据UPDATE语法如下:UPDATE SET 字段1=字段值1, 字段2=字段值2,WHERE 例 XS表中有些学生民族为“汉”,有些为“汉族”,将表中民族为“汉族”的数据统一改为民族为“汉”。UPDATE XSSET MZ=汉WHERE MZ=汉族第六十八张,PPT共七十九页,创作于2022年6月5.9.3 使用 DELET

42、E 删除数据DELETE语句基本语法如下:DELETE FROM WHERE 例 ZY表中,如果一个专业没有任何班级属于它,则将这个专业从ZY表中删除。DELETE ZY WHERE ZYDM NOT IN (SELECT ZYDM FROM BJ) 第六十九张,PPT共七十九页,创作于2022年6月5.9.4 TRUNCATE TABLE语句用DELETE语句和TRUNCATE TABLE语句都能够删除表中的所有数据,但是使用TRUNCATE TABLE语句比用DELETE语句快得多,原因如下:使用DELETE语句,系统将一次一行地处理要删除的表中的记录,在从表中删除行之前,在事务处理日志中

43、记录相关的删除操作和删除行中的列值,以防止删除失败时,可以使用事务处理日志来恢复数据。TRUNCATE TABLE则一次性完成删除与表有关的所有数据页的操作。另外,TRUNCATE TABLE语句并不更新事务处理日志。TRUNCATE TABLE语句语法如下:TRUNCATE TABLE 第七十张,PPT共七十九页,创作于2022年6月5.10事务5.10.1 事务的基本概念事务是一种机制,是一个操作序列,它包含了一组数据库操作命令,所有的命令作为一个整体一起向系统提交或撤消操作请求,即要么都执行,要么都不执行。因此,事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时,事务是作为最

44、小的控制单元来使用的。第七十一张,PPT共七十九页,创作于2022年6月5.10.1 事务的基本概念事务具有以下几个属性:原子性 每一个事务是一个工作单元。它不能被分割成更小的部分。这个属性意味着在事务中定义的一切数据更改要么都完成,要么都不完成。 一致性 一个事务不能违背定义在数据库中的任何完整性检查。为了维护一致性,所有的规则、约束、检查和触发都会应用在事务中。由于所有的数据更改在事务期间内进行,这些数据在事务开始和事务结束前会被确保为一致的。隔离性 事务必须与其他事务进行的数据更改相隔离。这意味着没有其他操作可以改变中间态(没有提交的)的数据。为了避免中间态数据被更改,事务必须要么等待来

45、自其他事务的更改被提交,要么只能查看到处于上一个提交状态的数据。持久性 在一个事务完成,并且客户端应用程序已经被提示这个事务已经成功完成后,无论发生任何系统错误,这些更改的数据将永久存在。第七十二张,PPT共七十九页,创作于2022年6月5.10.1 事务的基本概念SQL Server数据库引擎会通过事务日志强制执行事务的物理一致性,并且保证事务的持久性。SQL Server还会强制对约束、数据类型以及其他内容执行一切一致性检查以确保逻辑上的一致性。这都由SQL Server自动地强制执行。但是,诸如转账之类的业务处理,还必须由开发人员来自己定义事务。定义一个事务时需要考虑以下方面:定义事务的

46、外延。开发者必须定义事务从哪里开始,到哪里结束。一个事务总应该越短越好,但是同时要做到尽量符合实际业务过程的需要。定义错误管理。在事务中并不是所有的错误都会自动回滚。开发者有责任实现错误管理。定义隔离级别。隔离不同的事务总是会有与并行性相关的缺陷。如果完全地隔离事务并且其它事务希望读取相同但不为前一状态的数据,那么它会被阻塞直到您结束您的事务。这对于有许多并行连接的数据库系统来说是一个严重问题。SQL Server实现了一些不同种类的、需要正确选择的隔离级别。一般规则是选择在尽可能短的时间内锁住尽可能少的数据,并可以提供需要的事务安全性的隔离级别。第七十三张,PPT共七十九页,创作于2022年6月5.10.2 自动提交事务自动提交事务模式是SQ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论