现在的位置: 首页 > 综合 > 正文

SQL Server 2000数据库 (2)

2012年06月13日 ⁄ 综合 ⁄ 共 7816字 ⁄ 字号 评论关闭
 

1.2 SQL Server 2000数据表管理
表是包含数据库中所有数据的数据库对象,设计完数据库后就可创建数据库中将存储数据的表。任何有相应权限的用户都可以对之进行操作,除非它已被删除。
表存储在数据库文件中,每个表至多可定义102列。表和列的命名要遵守标识符的规定,在特定表中必须是惟一的,但同一数据库中的不同表可使用相同的列名。必须为每列指定数据类型。
本节我们将以Student数据库作为实例,对其数据表进行管理。
1.2.1 创建数据表
SQL Server 2000提供了3种方法创建数据库表:一种方法是使用表设计器创建表;另一种方法是使用数据库关系图创建表;最后一种是使用Transact-SQL语句中的CREATE命令创建表。
(1) 使用表设计器创建表
在SQL Server企业管理器中,展开指定的服务器和数据库,打开Student数据库,用右键单击表对象,从弹出的快捷菜单中选择“新建表”命令,就会出现“表设计器”对话框,如图4-7所示。
  
图4-7 表设计器
在对话框中,可以定义列的以下属性:列名称、数据类型、长度、精度、小数位数、是否允许为空、默认值、标识列、标识列的初始值、标识列的增量值和是否有行的标识。 然后根据提示进行设置。输入完成后,单击“保存”按钮 ,将弹出“选择名称”对话框,如图4-8所示。输入StudentsInfo,单击“确定”按钮。
图4-8 输入表名
(2) 使用数据库关系图创建表
在SQL Server企业管理器中,展开指定的服务器和数据库,打开Student数据库,用右键单击关系图对象,从弹出的快捷菜单中单击“新建数据库关系图”命令,就会出现“创建数据库关系图向导”对话框,如图4-9所示。
在该对话框中,单击“下一步”按钮,打开“选择要添加的表”对话框。在“选择要添加的表”对话框中,左侧的列表里列出Student数据库中的所有表,其中也包括系统创建的表。选中表StudentsInfo,单击“添加”按钮,将它添加到右侧的列表中,如图4-10所示。
     
图4-9 创建数据库关系图向导                   图4-10 选择要添加的表
单击“下一步”按钮,打开“完成数据库关系图向导”对话框,表StudentsInfo出现在列表中,单击“完成”按钮,打开“新关系图”对话框。我们可以看到,表StudentsInfo出现在关系图中。
接下来,我们在关系图中创建表Department。在数据库关系图的空白处单击鼠标右键,选择“新建表”命令。在出现的“输入表名”对话框中输入要创建的表名Department,单击“确定”按钮。然后,在出现的表编辑对话框中,输入各列信息,如图4-11所示。
图4-11 在数据库关系图中创建表Department
编辑完毕后,单击对话框中“保存”按钮 ,并在弹出的“另存为”对话框中输入关系图的名称Stu­_Diagram,如图4-12所示。单击“确定”按钮,会出现“保存”对话框,如图4-13所示,提示用户是否将表Department保存到Student数据库中。单击“是”按钮,完成保存。
         
图4-12 保存新关系图Stu­_Diagram                     图4-13 询问保存
到此,表Department被成功保存到数据库中,关系图Stu­_Diagram也会出现在数据库关系图的列表中。以后,可以打开关系图Stu­_Diagram,对其中的表进行编辑。
(3) 使用Transact-SQL语句中的CREATE TABLE命令创建表
其语法形式如下:
CREATE TABLE
 [ database_name.[ owner ] .| owner.] table_name
 ( { < column_definition >| column_name AS computed_column_expression|
< table_constraint >} [,…n])
[ ON { filegroup | DEFAULT } ]
[ TEXTIMAGE_ON{ filegroup | DEFAULT } ]
其中各参数说明如下。
      database_name:是要在其中创建表的数据库名称。
      owner:是新表所有者的用户ID名,owner必须是database_name所指定的数据库中的现有用户ID,owner默认为与database_name所指定的数据库中的当前连接相关联的用户ID。
      table_name是新表的名称。表名必须符合标识符规则数据库中owne r.table_name 组合必须惟一。table_name最多可包含128个字符,但本地临时表的表名(名称前有一个编号符 #)最多只能包含116个字符。
      column_name:是表中的列名。列名必须符合标识符规则,并且在表内惟一。
      computed_column_expression:是定义计算列值的表达式。表达式可以是非计算列的列名、常量、函数、变量,也可以是用一个或多个运算符连接的上述元素的任意组合。表达式不能为子查询。
       ON {filegroup | DEFAULT}:用于指定存储表的文件组名。
       TEXTIMAGE_ON:用于指定text、ntext 和 image列的数据存储的文件组。
       data_type:用于指定列的数据类型。
       DEFAULT:用于指定列的默认值。
例如,在已经存在的数据库Student中创建一个学生表StudentsInfo表,语法如下:
CREATE TABLE StudentsInfo
(Stu_Id Int not null,
Sname varchar(20) not null,
Sgender char(2) ,
Sage int,
Sdept varchar(20) not null)
1.2.2 插入和修改表中的数据
创建完一个表结构之后,最重要的工作就是向表中插入数据,这也是最基本的操作。假设要向表StudentsInfo中插入学生记录,可以在企业管理器中右键单击表StudentsInfo,指向“打开表”,然后选择“返回所有行”命令,打开“查询表内容”对话框。
用户可以在对话框中添加和修改表中的数据。每插入新的一行,在表格下方就会新增一个空白行,用于添加新的内容。如果输入的数据格式或长度不符合要求,系统会提示出错信息。图4-14是我们插入数据后的对话框显示。
图4-14 向表StudentsInfo插入学生记录
同样可以使用Transact-SQL语句中的INSERT命令向表中插入记录,其语法如下:
INSERT [INTO]
 { table_name WITH ( < table_hint_limited> [ …n ] )
| view_name | rowset_function_limited }
 { [(column_list)]{ VALUES({ DEFAULT | NULL | expression} [ ,…n ] )
      | derived_table | execute_statement } }
其中各参数说明如下。
      [INTO]:一个可选的关键字,可以将它用在INSERT和目标表之间。
      table_name:将要接收数据的表或table变量的名称。
      WITH (<table_hint_limited> [...n]):指定目标表所允许的一个或多个表提示。需要有 WITH 关键字和圆括号。
      view_name:视图的名称及可选的别名。通过view_name来引用的视图必须是可更新的。由INSERT语句所做的修改不能影响视图的FROM子句中引用的多个基表。
      rowset_function_limited:是OPENQUERY或OPENROWSET函数。
      (column_list):要在其中插入数据的一列或多列的列表。必须用圆括号将column_list 括起来,并且用逗号进行分隔。
      VALUES:引入要插入的数据值的列表。对于column_list (如果已指定)中或者表中的每个列,都必须有一个数据值。必须用圆括号将值列表括起来。如VALUES列表中的值与表中列的顺序不相同,或者未包含表中所有列的值,那么必须使用 column_list 明确地指定存储每个传入值的列。
      DEFAULT:强制 SQL Server 装载为列定义的默认值。
      Expression:一个常量、变量或表达式。表达式不能包含SELECTEXECUTE语句。
      derived_table:从数据库中检索行的子查询,derived_table用作对外部查询的输入。
      execute_statement:任何有效的EXECUTE语句,它使用SELECT或READTEXT语句返回数据。
例如,在Student表中插入数据语法如下:
INSERT INTO Student(Stu_Id, Sname, Sgender, Sage ,Sdpt)
VALUES(994101, '张涛', '男', 21, '计算机系')
如果用户需要修改数据,可以在查询表内容的对话框(如图4-14所示)中找到目标行,将其要修改的数据删除,然后输入新数据即可。这种方法适用于记录较少的表,可以很方便地找到要修改的行,但如果表中含有大量记录,就会消耗很长时间。
我们可以使用Transact-SQL语句中的UPDATE命令修改表中数据,其语法如下:
UPDATE
{ table_name WITH ( < table_hint_limited > [ …n ] )}
SET{ column_name ={ expression | DEFAULT | NULL}
WHERE < search_condition>
其中各参数说明如下。
      table_name:需要更新的表的名称。如果该表不在当前服务器或数据库中,或不为当前用户所有,这个名称可用链接服务器、数据库和所有者名称来限定。
      WITH ( < table_hint_limited > [ ...n ] ):指定目标表所允许的一个或多个表提示。需要有WITH关键字和圆括号。
      SET:指定要更新的列或变量名称的列表。
      column_name:含有要更改数据的列的名称。column_name必须驻留于UPDATE子句中所指定的表或视图中。标识列不能进行更新。
      expression:变量、字面值、表达式或加上括弧的返回单个值的subSELECT语句。expression返回的值将替换column_name中的现有值。
      DEFAULT:指定使用对列定义的默认值替换列中的现有值。如果该列没有默认值并且定义为允许空值,这也可用来将列更改为NULL。
例如,在Student表中把学生编号Stu_Id为994103的年龄改为20岁,语法如下:
UPDATE Student SET Sage=20
WHERE Stu_Id=994103
1.2.3 查询表中的数据
SQL Server数据库的实际应用中,如何从表中的大量数据中准确地查询到有效信息,是一个很关键的问题。本段我们就来介绍数据的查询。
在SQL Server企业管理器中,展开指定的服务器和数据库,打开Student数据库,用右键单击表对象,指向“打开表”,然后选择“查询”命令,打开“查询设计器”对话框,如图4-15所示。

结果窗格

SQL窗格

网格窗格

关系图窗格

图4-15 查询设计器
可以看到,查询设计器分为4个窗格:关系图窗格、网格窗格、SQL窗格和结果窗格。
关系图窗格显示正在查询的表和其他表结构化对象。每个矩形代表一个表或表结构化对象,并显示可用的数据列以及表示每列如何用于查询的图标。矩形之间的连线表示联接。
网格窗格包含一个类似电子表格的网格,用户可以在其中指定选项,比如要显示哪些数据列、要选择什么行、如何对各行进行分组,等等。
SQL窗格显示用于查询或视图的SQL语句。可以对设计器所创建的SQL语句进行编辑,也可以输入自己的SQL语句。对于不能用关系图窗格和网格窗格创建的SQL语句(如联合查询等),输入SQL语句尤其有益。
结果窗格显示最近执行的选择查询的结果。可以通过编辑该网格单元中的值对数据库进行修改,而且可以添加或删除行。
读者可以在任意窗格内进行操作以创建查询或视图:可以通过在关系图窗格中选择某列并将该列输入到网格窗格中,或者使其成为SQ窗格中SQL语句的一部分等方法,指定要显示的列。关系图窗格、网格窗格和SQL窗格都是同步的——当在某一窗格中进行更改时,其他窗格自动反映所做的更改。
使用查询设计器进行表查询,可以分为以下5个过程。
(1) 添加表
在关系图窗格中右击背景,然后从快捷菜单中选择“添加表”命令。在“添加表”对话框中,选择要添加到查询中的对象类型的选项卡。在项目列表中,双击要添加的每一项。完成添加项目后,单击“关闭”按钮。
查询设计器将相应地更新关系图窗格、网格窗格和SQL窗格。
(2) 添加列
若要在查询中使用某列,必须将该列添加到查询中。添加某列的原因可能有:在查询输出中显示该列、用该列进行排序、搜索该列的内容或汇总其内容。添加列的方式有以下选择:
      添加个别的列
在关系图窗格中,选择要添加的数据列旁边的复选框。或者在网格窗格中移动到要添加列的第一个空白网格行,单击Column列中的字段,然后从列表中选择列名。
应注意的是,若要在网格窗格中的特定位置添加数据行,请选择要添加新列的网格行并按INS键,在该行上面将添加一个新列。
      添加一个表或表结构化对象中的所有列
在关系图窗格中,选择“(所有列)”旁边的复选框。或者SQL窗格的SQL语句中指定对象名.*,并用表或表结构化对象的名称代替对象名。
      添加所有表和表结构化对象中的所有列
确保没有选定关系图窗格中的联接线。在查询对话框中右击,并从快捷菜单中选择“属性”命令。然后在弹出的对话框中选择“查询”选项卡,选择“输出所有列”。或者,在SQL窗格的SQL语句输出列表中指定*。
例如,要在结构集中显示表StudentsInfo中学生的姓名、性别、年龄,则可以在关系图窗格中选中Sname、Sgender、Sage列旁边的复选框,可以看到,查询设计器将相应地更新关系图窗格、网格窗格和SQL窗格中的内容。
(3) 设置查询条件
设置查询条件的操作较为简单。在网格窗格中,找到要设为查询条件的行,然后在该行所对应的“准则”列中输入查询条件。
例如,要在结果集中显示数学系学生的姓名、性别、年龄,首先添加相应的列,然后从网格窗格中,找到Sdpt,并在其对应的“准则”列中输入“=数学系”。注意,最后将Sdpt所在行中的输出标记去掉,因为结果集中不需要显示系别信息。
(4) 重新排列输出列
在网格窗格中,单击行左边的行选择器按钮 以选择包含列的行,然后将行拖到新的位置。或者,直接在SQL窗格中编辑列名的顺序。
例如,要让学生的年龄信息在性别之前显示,我们可以单击Sgender行的行选择器按钮 ,然后将其拖到Sage的下方。
如果需要显示的数据按照指定列的升序或降序排列。可以使用以下设置方法。
      在关系图窗格中设置:选中要排序的数据列(例如,按学生编号Stu_Id排序),单击鼠标右键,在弹出的快捷菜单中选择“升序排列”或“降序排列”命令。
      在网格窗格中设置:如果要排序的数据列不在网格的列中,则在空白行中添加此列,然后在其对应的“排序类型”列中选择“升序”或“降序”命令,最后再将该行的输出标记去掉。
      在SQL窗格中设置:在SQL语句中添加ORDER BY子句,例如,按学生编号Stu_Id升序排序,则添加
 ORDER BY Stu_Id ASC
在这里,因为ORDER BY 默认升序排序,所以ASC可以不必填写。但如果需要降序排序,只需填写DESC。
(5) 执行查询
当完成查询设计后,可以运行查询。在查询对话框中的任意位置右击,从快捷菜单中选择“运行”命令,或单击工具栏中的“运行”图标 。查询结果将出现在结果窗格中,如图4-16所示。
   
图4-16 在查询设计器中查询学生信息的结果
从数据库表中查询数据行或列,也可以使用Transact-SQL语句中的SELECT命令,它的基本语法格式如下。
SELECT select_list [ INTO new_table ]
FROM table_Source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
其中各参数说明如下。
      select_list:选择列表,它指出查询结果集中的列数和属性。
      INTO:用查询结果集合构造一个新表。
      new_table:表示INTO语句构造的新表的表名。
      FROM:指出所查询的表名以及各表之间的逻辑关系。
      table_source:指出用于SELECT语句的表、视图、派生表和联接表。
      WHERE:指出查询条件,它说明将表中哪些数据行返回到结果集合中。
      search_condition:通过使用谓词限制结果集内返回的行。
      GROUP BY:指出查询结果集合中各行的排列顺序。
      group_by_expression:指出进行分组所依据的表达式。
      HAVING:通常和GROUP BY一起使用,指出组或集合的搜索条件。
      search_condition:指定组或聚合应满足的搜索条件。
      ORDER BY:指定查询条件集合中各行的排列顺序。
例如,在上面我们要在StudentsInfo表中查询数学系学生的姓名、年龄、性别,并按学生编号进行升序排序,其语法为:
SELECT Sname, Sage, Sgender
FROM StudentsInfo
WHERE(Sdpt=N’数学系’)
ORDER BY Stu_Id
1.2.4 删除数据表
有时需要删除表(如,当要实现新的设计或释放数据库的空间时)。删除表时,表的结构定义、数据、全文索引、约束和索引都永久地从数据库中删除,原来存放表及其索引的存储空间可用来存放其他表。
(1) 使用企业管理器删除表
在SQL Server企业管理器中,展开指定的服务器和数据库,打开数据库Student,用右键单击表对象,从弹出的快捷菜单中单击“删除”命令,则会出现“除去对象”对话框。单击“全部删除”按钮,即可删除表。
(2) 使用DROP TABLE语句删除表
DROP TABLE语句可以删除一个表和表中的数据及其与表有关的所有索引、触发器、约束、许可对象。DROP TABLE语句的语法形式如下:
DROP TABLE { table_name } [ ,…n]
其中,table_name用于指定要删除的数据表名称。
例如,删除StudentsInfo表的语法如下:
DROP TABLE StudentsInfo
也可以使用该命令同时删除多个表,只需在要删除的表名称之间用逗号隔开即可。

 

抱歉!评论已关闭.