欢迎光临散文网 会员登陆 & 注册

第四章SQLServer 2012 数据的基本操作

2019-10-04 12:47 作者:游戏理想国  | 我要投稿


一、数据的添加、修改和删除

SQL Server 数据库的新表建好后,表中并不包含任何记录数据,要想实现数据的存储,必须向表中添数据。

  1. 选择须要输入数据的表,右击然后选择打开表。在查询设计器的表中可以输入新记录,也可以修改和删除已经输入的记录。

(2)在数据的基本操作中,常用到T-SQL语句,来对数据表进行增加,删除,修改,和查询等操作。

1数据的添加

向表中添加数据可以使用INSERT语句。INSERT 语句的语法格式:

INSERT [into] table_name (column_list) VALUES(data_values)

[into]是一个可选的关键字,可以将它用在insert和目标表之间。

table_name是将要添加数据的表的名称

(column_list)是要添加数据的字段名称或字段列表,必须用括写将column_list括起来,并用逗号进行分隔。若没有指字段列表,则指字全部字段。

1.2 省略values的insert语句(系统中不建议使用)

在T-SQL语言中,有一种简单的插入多行的方法。这种方法使用select语句查询出的结果代替values子句.这种语法结构如下:


INSERT [into] table_name (column_name)  SELECT [column_name] FROMtable_name where [search_conditions]


[sheresearch] 查询条件。

INSERT表和SELECT表的结果集的列数,数据类型必须一致。

[search_conditions]查询条件


2数据的修改

在数据输入过程中,可能会出现输入错误,或是因为时间变化而需要更改数据。修改表中的数据可以直接打开要修改的表进行更改表的数据。或使用T-SQL进行修改,UPDATE的语法格式如下:


UPDATEtable_name SET  column_name=值where[search_conditions]


table_name是需要更新的表的名称。

SET是指定要更新的列或变量名称的列名。







3数据的删除

随着系统的运行,表中可能产生一些无用的数据,这些数据不仅占用空间,而且还影响查询的速度。删除数据可以使用detelt语句

DELETE table_name WHERE [search_conditions]


table_name 是要从其中删除数据的表中名称。

WHERE 指定用于限制册除行数据的条件。如果没有提供  where子          

句,则delete删除表中的所有行。

[search_conditions]指定删除行的限定条件。


4.简单查询

数据库存在的意义在于将数据组织在一起,以方便查询。

SQL语言中最主要、最核心的部分是查询功能。查询语句用来对已经存在于数据库的数据按照特定的组合、条件表达式或者一定进检索。其基本格式是由select子句、from子句和where子句组成的sql查询语句:


SELECT <列表名>

FROM  <表或视图名>

WHERE <查询限定条件>


也就是说,SELECT指定了要查看的列(字段),from指定这些数据

的来源(表或视图)WHERE则指定了要查询那些记录


4.1、输出表中的所有列

将表中的所有字段都在”结果”窗口列出来,可以有两种方法:一种是将所有字段名在SELECT关键字后列出来;另一种是在SELECT语句后使用一个*

SELECT*FROMtable_name



列出表中的部分字段,可以在SELECT关键字后依次把字段名写出来,之间用逗号隔开,字段的顺序可根据需要来指定,

SELECTA,B,C FROM table_name



4.3、选择表中的若干记录

两个不相同的记录,但在某字段上是相同的如果

要去掉结果集中重复的行,可以在字段列表前面加

个DISTINCT关键字。

SELECTDISTINCT 列名FROM table_name


4.4、限制返回行数

如果一个表中有上亿条记录,而用户只想看前n条,

这就没有必要显视全部的记录。如果要限定返回的行数,可

以在字段列表前使用TOPn关键字,可以返回结果的前n条记

录信息。

SELECTTOP n  FROM table_name

4.5、常用的查询条件

常用的查询条件

(1)比较大小:比较运算符是比较两个表达式的大小的运算符,各运算符的含义是=(等于)、>(大于)、<(小于)、>=(大于或等于)、<=(小于或等于)、<>(不等于)、!=(不等于)

(2)确定范围

 确定范围运算符BETWEEN…AND和NOTBETWEEN…AND…可以找属性值在(或不在)指定的范围内的记录。

(3)确定集合

确定集合运IN和NOT IN可以用来查找属性属于(或不属于)指定集合的记录。

(4)字符匹配

在实际的应用中,用户有时候不能给出精确的查询条件。因此,经常需要根据一些不确定的信息来查询。T-SQL语言提供了字符匹配运算符

LIKE进行字符串的匹配运算。一般语法格式如下:


[NOT] LIKE ‘<匹配串>’[ESCAPE ‘<换码字符>’]


其含义是查找匹配串,与记录相匹配的记录。匹配串可以是完整的字符

串,也可以含有通配符 “%”和“_”。百分号,代表可包含任意长度的字符串。下画线,代表任意单个字符。

(5)涉及空值的查询

一般情况下,表的每一列都有其存在意义,但有时某些列可能暂时没有确定的值,这时用户可以不输入列的值。那么这列的值为NULL

空值运算符IS NULL 用来判断指定的列值是否为空。


列表达式[NOT] IS NULL

(6)多重条件查询

可以使用逻辑运算符AND、OR、NOT连接多个查询条件,实现多条件查询。

[NOT]逻辑表达式AND|OR

5. 完整的select语句的基本语法格式


虽然select语句的完整语法较复杂,但是其主要的语法格式可归纳如下:


SELECTselect_list

[intonew_table_name]

FROM table_list

[WHEREsearch_conditions]

[GROUPBY group_by_expression]

[HAVINGsearch_condition]

[ORDERBY  order_expression [asc|desc] ]


SELECT select_list 描述结果集的列,它是一个逗号分隔的表达式,

在选择列表中使用“*”表达式指定返回源表中所有的列


[INTO new_table_name] 用于指定使用结果集来创建一个新表,new_table_name是新表的名称

FROMtable_list 结果集数据来源于哪些表或视图。

[WHEREsearch_conditions]查询条件

GROUPBY group_by_expression    根据列中的值将结果分组。

HAVINGsearch_conditions 结果集附加筛选,通常与GROUPBY 一起使用。

ORDERBY  order_expression [ASC|DESC] 对结果进行分组ASC和DESC关键字用于指定行是按升序还是降序排序。


6、用查询结果生成新表

在实际的应用系统中,需要将查询结果保存成一个表,这个

功能可以通过SELECT语句中的INTO子句实现。


INTO新表名


新表名是被创建的新表,查询结果将自动添加到此表中。


新表的字段由结果集中的字段列表决定。


如果表名前加“#” 则创建的表为临时表。

7、对结果进行分组

GROUPBY  将查询结果集按某一列或多列值分组,分组列的值相等为一组,并对每一组进行统计。


GROUPBY 列名[HAVING 筛选条件表达式]


“BY 列名“是按列名指定的字段进行分组,将该字段值相同的记录组成一组,对每一组记录进行汇总计算并生成一条记录。

“ HAVING 筛选条件表达式”表示对生成的组筛选后再对满足条件的组进行统计。


8、对查询的结果排序


可以使用ORDERBY 对查询结果按照一个或多个属性进行升序(ASC)

或降序(DESC)排序,默认为升序。


ORDERBY {列名[ASC|DESC][,...n] }


9、对数据进行统计。

用户经常要对结果集进行统计,例如求和、平均值、最小

值、个数等这些统计可以通过集合函数、COMPUTE子

句,GROUPBY 子句来实现。


使用集合函数

COUNT([DISTINCT|ALL] *)统计记录个数

COUNT([DISTINCT| ALL] <列名>)统计记录个数。

SUM([DISTINCT| ALL] <列名>)计算一列值总和(此列必须是数值型)。

AVG([DISTINCT|ALL] <列名>)计算一列值的平均值(此列必须是数值型)。

MAX([DISTINCT| ALL] <列名>)求一列值中的最大值。

MIN([DISTINCT| ALL] <列名>)求一列值中的最小值。


10、使用COMPUTE

对查询结果集中的所有记录进行汇总统计,并显视所有参加汇总记录的详细信息。


COMPUTE集合函数[BY 列名]

集合函数,例如SUM() 、AVG()、COUNT()等。


“BY列名”按指定“列名”字段进行分组计算,并显视被统计记录的详细信息。


BY 选项必须与ORDERBY 一起使用。


11、合并结果集

使用UNION语句可以将查询结果集合并为一个结果集,也就合并操作语法如下:

SELECT语句

{UNION SELECT 语句}[,…n]


参加UNION操作的各结果集的列数必须相同,对应的数据类型也必须相同。

系统将自己动去掉并集的得复记录。


二、连接查询

前面所讲的查询是单表查询。若一个查询时涉及两个或两个以上的表,则称为连接查询。连接查询是关系数据库中最主要的查询,包括等值与非等值查询、自然连接、自身连接查询、外连接查询和复合条件连接查询等。交叉连接的语法格式:


SELECT列表列名FROM 表名1CROSS JOIN 表名2

CROSSJOIN   交叉表连接关键字


1、交叉连接查询

(1) 把A表中的所有数据,跟B表中的每一条数据进行拼接,从而形成了的新的数据集

新数据集=A表所有记录x B表所有记录


(2)进行拼接时,加个条件语句

把学生表的每条记录的班级代码,与班级表的表的班级代码进行比较,如果列值相等,则拼接形成一条记录,否则不拼接。


2、自然连接

用来连接两个表的条件称为连接条件或连接谓词,其中,比较运算符主要是:=、>、<、>=、<=、!=

等值连接的过程类似于交叉连接,不过它只拼接满足连接条件的记录到结果集中。语法格式为:


SELECT列表列名FROM 表名1JOIN 表名2

ON表名.列名=表名2.列名

SQLServer 2005
数据的基本操作

3、自身连接查询

连接操作既可在多表之间进行,也可以是一个表与其自己进行连接,称为表的自身连接。使用自身连接时,必须为表指定两个别名,以示区别。


selecta.姓名,b.性别from学生as a  join 学生as b  on a.学号=b.学号

4、外连接查询

外连接的结果集不但包含满足连接条件的行,还包括相应表中的所有行,也就是说,即使某些行不满足连接条件,但仍需要输出该行记录。外连接包括三种:左外连接、右外连接和完全外连接。


(1)左外连接(LEFTOUTER JOIN)

左外连接是结果表中除了包含满足连接条件的记录外,还包含左表中不满足连接条件的记录。左表中不满足条件的记录与右表记录拼接时,右表的相应列上填充NULL值。左外连接的语法格式为:


SELECT列表列名FROM 表名1LEFT [OUTER] JOIN 表名2

ON表名1.列名=表名2.列名

(2)右外连接(LEFTOUTER JOIN)

右外连接是结果表中除了包含满足连接条件的记录外,还包含右表中不满足连接条件的记录。右表中不满足条件的记录与左表记录拼接时,左表的相应列上填充NULL值。右外连接的语法格式为:


SELECT列表列名FROM 表名1RIGHT [OUTER] JOIN 表名2

ON表名1.列名=表名2.列名

(3)完全外连接(FULLOUTER JOIN)

完全外连接是结果表中除了包含满足连接条件的记录外,还包含右表中不满足连接条件的记录。左(右)表中不满足条件的记录与右(左)表记录拼接时,右(左)表的相应列上填充NULL值。完全外连接的语法格式为


SELECT列表列名FROM 表名1FULL [OUTER] JOIN 表名2

ON表名1.列名=表名2.列名


5、复合连接条件查询

前面所介绍的连接查询中,ON连接条件表达式只有一个条件,允许ON连接表达式有多个连接条件,称为复合条件连接,或多表连接.


SELECT学生.学号,学生.姓名,学生.性别,班级.班级名称,专业.专业名称,

系部.系部名称

FROM学生JOIN 班级ON 学生.班级代码=班级.班级代码

JOIN 专业ON 学生.专业代码=专业.专业代码

JOIN 系部ON 学生.系部代码=系部.系部代码


三、子查询

将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语条件中的查询叫做嵌套查询。我们把括号内的查询块称为子查询或内层查询,与之相对的概念是父查询或外层查询,即包含子查询的查询块。SQL允许多层嵌套。但是子查询的SELECT语句中不能使用ORDERBY 子句,ORDERBY 只能对最终查询结果进行排序。


1、带有IN运算符的子查询(IN运算符的子查询返回的结果是集合)


SELECT列名FROM 表名WHERE 列名IN

(SELECT列名FROM 表名WHERE 列名IN

SELECT 列名FROM 表名WHERE 列名IN(1,2,3)

)

2、带有比较运算符的子查询


父查询与子查询之间通过比较运算符连接,便形成了带有比较运算符的子查询。

父查询中的一个表达式与子查询返回的结果(单值)进行比较

(1)带有比较运算符的子查询返回的结果是单值

(2)若IN的子查询结果集为单值,则”=”符号和IN可以互换


SELECT* FROM 表名WHERE 列名=

(SELECT列名FROM 表名WHERE 列名=‘X’)


3、带有ANY或ALL运算符的子查询

子查询返回单值时可以使用比较运算符,而使用ANY或ALL运算符时还必须同时使用比较运算符,带有ANY或ALL运算符的子查询的处理过程是:父查询通过ANY或ALL运算符将父查询中的一个表达式与子查返回结果集中的某个值进行比较。


4、带有EXISTS运算符的子查询

使用EXISTS运算符后,子查询不返回任何数据,此时,若子查询结果非空(即至小存在一条记录)则父查询的WHERE子句返回真(TRUE),否则返回假(FLASE)




第四章SQLServer 2012 数据的基本操作的评论 (共 条)

分享到微博请遵守国家法律