数据库的相关操作

 数据库的相关操作


1.如何创建数据库

(1).使用 Create Database 创建数据库


Create Database 语名的语法形式如下:


Create Database database_name

[On

{[Primary](Name=logical_file_name,

Filename='os_file_name'

[,Size=size]

[,Maxsize=max_size]

}[,...n]

]

[Log On

}(Name=Logical_name,

Filename='os_file_name'

[,Size=size])

}[,...n]

]

[For Restore]


注释:

Primary:该选项是一个关键字,用来指定主文件组中的文件。主文件组不公包含了数据库系统表中的全部内容,而且还包含了没有在用户文件组中包含的全部对象。一个数据库只能有一个主文件。在默认情况下,即在没有指定Primary关键字时,列在语句中的第一个文件就是主文件。

Name:该选项指定数据库的逻辑名字,这是在SQL Server 系统中使用的名称,是数据库在SQL Server 中标识符。

Filename:该选项用来指定数据库所在文件的操作系统文件名称和路径。在os_file_name中的路径必须是SQL Server 所在服务器上的一个文件夹。该操作系统文件名称与Name 的逻辑名称是一一对应的。

Size:该选项用来指定数据库操作系统文件的大小。在指定文件大小的时候,既可以使用MB单位,也可以使用KB单位。如果没有指定单位,那么系统默认的单位是MB。文件最小是1MB,也就是说,数据库所在的文件不能小于1MB。在默认情况下,数据库数据文件的大小是3MB,数据库日志文件的大小是1MB。

Maxsize:该选项用来指定操作系统文件可以增长的最大尺寸。在指定文件增长尺寸的时候,既可以使用MB单位,也可以使用KB单位。如果没有指定单位,那么系统的默认单位是MB。如果没有指定文件可以增长的最大尺寸,那么系统的增长是没有限制的,可以占满整个磁盘空间。

FielGrowth:该选取项用来指定文件的增量,当然该选项不能与Maxsize选项有冲突。该选项指定的数据值为零时,表示文件不能增长。该选项可以用MB、KB和百分比指定。


例子:

创建一个cust数据库,该数据库的主数据文件的逻辑名称是cust_data,操作系统文件是cust.mdf,大小是15MB,最大是30MB,以20%的速度增加;该数据库的日志文件的逻辑名称是cust_log,操作系统是cust.ldf,大小是3MB,最大是10MB,以1MB的速度增加。


Create Database cust

On

Primary (Name=cust_data,

Filename='d:cust.mdf',

Size=15MB,

Maxsize=30MB,

Filegrowth=20%)

Log On

(Name=cust_log,

Filename='d:cust.ldf',

Size=3MB,

Maxsize=10MB,

FileGrowth=1MB)


2.如何增加数据库的大小

(1).使用Alter Database命令来增加数据库文件的大小

如果在创建数据库文件时没有配置文件的大小自动增长,那么可以使用Alter Database命令来增加文件的大小。


例子:

将数据库cust的数据文件cust_data的大小调整为50MB。

Alter Database cust

Modify File (Name='cust_data',Size=50)


(2).使用Add File 增加一个次要文件

通过为数据库增加次要的数据文件和日志文件来增加数据库的大小。

例子:

Alter Database cust

Add File

(Name=cust_data2,Filename='d:cust2.mdf',

Size=5MB,

Maxsize=10MB,

Filegrowth=10%)


3.压缩数据库和数据文件

(1)使用Dbcc Shrinkdatabase 命令压缩整个数据库

例子:

将cust数据库的大小压缩到10%

Dbcc Shrinkdatabase (cust,10)

(2)使用Dbcc ShrinkFile命令压缩数据库中的某一个数据文件

例子:

将cust数据文件的大小压缩到5MB

Dbcc ShrinkFile (cust,5)


4.删除数据库

(1)使用Drop命令删除数据库

例子:

将删除cust数据库

Drop Database cust


3.表的相关操作)


1.创建表

(1)用Create Table 命令创建表

语法:

Create Table tabl_name

({

}column_name As computed_column_expression

}

}[,...n]

)

[On {fiegroup | Default}]

[Textimage_On {fiegroup | Default}]


例子:

打开cust数据库,创建一个表,该表包含了学生的有关信息,即有学号、姓名、性别、出生日期、籍贯、联系电话、住址和备注信息。

Use cust

Create Table students

(

number int not null,

name varchar(10) not null,

sex char(2) null,

birthday datetime null,

hometown varchar(30) null,

telphone_no varchar(12) null,

address varchar(30) null,

others varchar(50) null

)

在这个表中number表示学生代号,数据类型为int,不允许为空;name表示学生姓名,数据类型为varchar,长度为10,不允许为空;sex表示学生的性别,数据类型为char,长度为2,允许为空;birthday表示学生的出生日期,数据类型为datetime,允许为空;hometown表示学生的籍贯,数据类型为varchar,长度为30,允许为空;telephone_no表示学生的联系电脑,数据类型为varchar,长度为12,允许为空;address表示学生的住址,数据类型为varchar,长度为30,允许为空;others表示学生的备注信息,长度为50,允许为空。


2.修改表的结构

(1)使用T-SQL语句增加和删除一个新列

语法:

Alter Table table

{

ADO

{[]

|colun_name As computed_column_expression

|[]

}[,...n]

|Drop

{Column column

}[,...n]

}


例子:打开cust数据库,修改其中的表students的结构,增加一个新字段,字段名为ying,数据类型是varchar,长度是10,没有默认值,充许为空。

Use cust

Alter Table students Add ying varchar(10) null


打开cust数据库,修改其中的表students的结构,删除一个字段,字段名为ying。

Use cust

Alter Table students Drop Column ying


3.向表中插入数据

(1)用 Insert 语句

语法如下:

Insert [Into]

{table_name|view_name}[(column_list)]

{Values|values_list|select_statement}

注意:在插入数据时,字符数据和日期数据要使用引号引起来。

例子:

Use cust

Insert Into students

Values (11,"影子","男","1999-12-12","湖北","83779805","武汉市桥口区","VB爱好者")

打开cust数据库,向students表中插入数据


(2)用Default 选项

在插入数据时,可以使用Default选项。Default选项有两种形式,一种形式是Default Values,另一种是Default。

Default Values 形式为表中的某一行的所有列插入默认值。使用这种形式的前提条件是表中的所有列必须是这四种类型之一:Identity属性,Timestamp数据类型,允许为Null,或者有一个指定的默认值。否则,会错误信息。

例子:

Use cust

Insert Into students Default Values

这个例子会出现错误,因为students表的number字段是设置为不允许为空的。


Default 形式是为表中的某一列插入默认值。要插入的该列必须具备一定的条件,即该列要么是Timestamp 数据类型,要么是允许为Null,要么是有一个指定的默认值,否则,会出现错误信息。

例子:

Use cust

Insert Into students Values(11,"影子",Default,Default,Default,Default,Default,Default)

由天前2个字段不能为空,所以要赋值,否则会出现错误,而后面的6个字段允许为空,因此可以调用Default默认。


(3)插入部分数据

在使用Insert语句插入数据是,还可以插入部分数据,也就是可以为每一行的指定的部分列插入数据。在插入部分数据时,应该注意以下三个问题:

☆在 Insert 子句中,指定要插入数据的列名。

☆在 Values 子句中,列出与列名对应的数据。列名的顺序和数据的顺序应该完全对应。

☆在 Insert 子句中,没有列出的列应该至少具有这四种类型之一:Identtty 属性,Timestamp 数据类型,允许为 Null,或者有一个指定的默认值。否则,会出现错误信息。

例子:

Use cust

Insert Into students (number,name)

Values (110,"影子")

打开cust数据库,向students表中插入一行数据

注意:如用下例语句将发生错误,因为name字段是不允许为空的(在创建数据库时设定的)

Insert Into students (number)

Values (110)


(4)用 Select 语句插入多条数据

Insert 语句插入数据的特点是每一次只能插入一行数据。相反,Select 也可以用在 Insert 语句中,并且可以一次插入多条数据。使用 Select 语句插入数据的语法形式如下:

Insert table_name

Select column_list

From table_list

Where search_conditions

在使用 Select 语句插入数据时,应该注意下面几点:

☆在 Insert 语句中使用 Select 时,他们参考的表既可以是相同的,也可以是不同的。

☆要插入数据的表必须已经存在。

☆要插入数据的表必须和 Select 的结果集兼容。兼容的含义是列的数量和顺序必须相同,列的数据类型或者相同,或者SQL Server 可以自动转换。

例子:

Use cust

Insert students

Select number,name,sex,birthday,hometown,telphone_no,address,others

From students

注意:

Select 后面的字段要输完整,这个例子是自己向自己插入多条数据(自己向自己插入是被允许的)

补充:

你还可以“From students”后面加上“Where name="影子"”,只插入name等于影子的记录,可以用And 和 Or 加上多个条件。


(5)使用 Select Into 插入数据到一个新表中

带有 Into 子句的 Select 语句允许用户定义一个新表并且把数据插入到新表中。这种方法不同于前面讲述的那些方法。在前面的那些方法中,一个共同的特点,是在数据输入之前表已经存在。而使用 Select Into 插入数据的方法,是在插入数据的过程中建立新表。

Select Into 语句的语法如下:

Select select_list

Into new_table_name

From table_list

Where search_conditions

在使用 Select Into 插入数据时,要注意下面几点:

☆在某个数据库中使用 Select Into 插入数据时,设置该数据库的 Select Into/Bulk Copy 为真。

☆新表不能存在,否则会产生错误信息。

☆新表中的列和行是基于查询结果集

☆要插入的数据不记录在日志中。

☆在select_list 中出现的列应该使用别名,否则,新表中的列没有列名。没列名的表只能通过 Select * From new_table_name 的形式查询。因此,应该为列起个别名。

☆这种方法多用在对列进行各种计算的情况。

例子:

Select number,name

Into newcust1

From students

创建新的表newcust1,插入students表中的number和name字段的所有数据。

补充:如果要插入所有字段的记录,则“Select *”,也可在“From students”后加条件,方法和上个例子一样。


(6)用 UPdate 语句修改表中的数据

Update 语句用来修改表中已存在的数据。Update 语句既可以一次修改一行数据,也可以一次修改许多行,甚至可以一次修改表中的全部数据。Update 语句使用 Where 子句指定要修改的行,使用 Set 子句给出新的数据。新数据可以是常量,也可以是指定的表达式,还可以是使用 From 子句来自其他表的数据。

Update 语句的语法如下:

Update {table_name|view_name}

Set {column_list}=expression [,. . .]

[Where clause]

在使用 Update 语句时,如果没有使用 Where 子句,那么就对表中所有的行进行修改。如果使用Update 语句修改数据时与数据完整性约束有冲突,那么修改就不会发生,整个修改事务全部滚回。例如,这种冲突可能是所输入的值是错误的数据类型,或者所输入的值违背了在该列定义的规则约束,等等。

例子:

Use cust

Update students

Set name=name+"007"

Where number>100

打开cust数据库,修改students表,使number>100的数据的name的值全部加"007"。


4.用 Delete 语句删除表中的数据

当数据库中的数据不需要的进修可以删除。一般情况下,删除数据使用 Delete 语句。Delete 语句可以一次从一个表中删除一条或者多条数据行。

Delete 语句的语法如下:

Delete [From] table_name

Where search_conditions

在 Delete 语句中如果使用了 Where 子句,那么就从指定的表中删除满足 Where 子句条件的数据行。

例子:

Use cust

Delete students

Where number>100

删除 students中,number>100的数据

补充:

如果在 Delete 语句中没有指定 Where 子句,那么就将表中所有的记录全部删除,即 Delete students 语句删除表中的全部记录。

在删除表中的全部数据时,还可以使用 Truncate Table 语句。Truncate Table 语句和 Delete 语句都可以将表中的全部数据删除,但是,两条语句又有不同的特点。当用户使用 Delete 语句删除数据时,被删除的数据要记录在日志中。并不将对数据的变化记录在日志中。因此,使用 Truncate Table students 语句删除记录的速度快于使用 Delete students 语句删除表中记录的速度。


5.用 Drop Table 命令删除表

当数据库中的表不需要时可以删除。删除表可以使用 Drop Table 语句。删除表就是删除表的定义以及表的全部数据、索引、触发器、约束和指定该表的许可。当删除表时,基于表的视图不能被删除,必须使用 Drop View 语句删除视图。

Drop Table 语句的语法如下:

Drop Table table_name

例子:

Use cust

Drop Table students

删除cust数据库中的students表。

补充:

不能使用 Drop Table 语句删除正在被约束参考的表,必须首先要么删除外键约束,要么删除参考表。表的所有者可以删除表。当删除表是时,绑定在该表上的规则或者默认则失掉了绑定,该表的约束或者触发器则自动被删除。如果重新创建表,必须重新绑定相应的规则和默认、重新创建触发器和增加必要的约束。另外,系统表不能删除。

删除表的许可属于表的所有者。然而,数据所有者(DBO)、系统管理员(SA)和DLL管理员可以删除数据库中的任何对象。


4.数据的检索


1.用 Select 子句检索记录

Select 子句是每一个检索数据的查询核心。它告诉数据库引擎返回什么字段。

Select 子句的常见形式是:

Select *

该子句的意思是“返回在所指定的记录源中能找到的所有字段”。这种命令形式很方便,因为你无需知道从表中检索的字段名称。然而,检索表中的所有列是低效的。因此,因该只检索需要的字段,这样可以大大的提高查询的效率。

2.使用 From 子句指定记录源

From 子句说明的是查询检索记录的记录源;该记录源可以是一个表或另一个存储查询。

你还能从多个表中检索记录,这在后面的章节中将介绍。

例子:

Select * From students 检索students表中的所有记录

3.用 Where 子句说明条件

Where 子句告诉数据库引擎根据所提供的一个或多个条件限定其检索的记录。条件是一个表达式,可具有真假两种判断。

例子:

Select * From students Where name="影子"

返回students中name字段为影子的列表,这次所返回的结果没有特定顺序,除非你使用了 Order By 子句。该子句将在后面的章节介绍。

注意:Where 子句中的文本字符串界限符是双引号,在VB中因改为单引号,因为在VB中字符串的界定符是双引号。

补充:

使用 And 和 Or 逻辑可以将两个或更多的条件链接到一起以创建更高级的 Where 子句。

例子:

Select * From students Where name="影子" And number>100

返回name为影子number大于100的列表。

例子:

Select * From students Where name="影子" And (number>100 Or number<50)

返回name为影子,number大于100或者小于50的列表。


Where 子句中用到的操作符

操作符 功能

< 小于

<= 小于或等于

> 大于

>= 大于或等于

= 等于

<> 不等于

Between 在某个取值范围内

Like 匹配某个模式

In 包含在某个值列表中

SQL中的等于和不等于等操作符与VB中的意义和使用相同


例子:

(1).Between 操作符

Use cust

Select * From students

Where number Between 1 and 100

Between 操作符返回的是位于所说明的界限之内的所有记录值。这个例子就返回 number 字段 1 到 100 之间的全部记录。


(2). Like 操作符和通配符

Use cust

Select * From students

Where name Like "%影%"

Like 操作符把记录匹配到你说明的某个模式。这个例子是返回含“影”的任意字符串。


四种通配符的含义

通配符 描述

% 代表零个或者多个任意字符

_(下划线) 代表一个任意字符

[] 指定范围内的任意单个字符

[^] 不在指定范围内的任意单个字符


全部示例子如下:

Like "BR%" 返回以"BR"开始的任意字符串

Like "br%" 返回以"Br"开始的任意字符串

Like "%een" 返回以"een"结束的任意字符串

Like "%en%" 返回包含"en"的任意字符串

Like "_en" 返回以"en"结束的三个字符串

Like "[CK]%" 返回以"C"或者"K"开始的任意字符串

Like "[S-V]ing" 返回长为四个字符的字符串,结尾是"ing",开始是从S到V。

Like "M[^c]%" 返回以"M"开始且第二个字符不是"c"的任意字符串。


4. 使用 Order By 对结果排序

Order By 子句告诉数据库引擎对其检索的记录进行排序。可以对任何字段排序,或者对多个字段排序,并且可以以升序或隆序进行排序。

在一个正式的 Select 查询之后包含一个 Order By 子句,后跟想排序的字段(可以有多个)便可以说明一个排序顺序。

例子:

Use cust

Select * From students

Where name Like "%影%"

Order By number

对返回的结果按 number 进行排序。


以降序排序

如要以隆序排序,只需在排序的字段之后使用 Desc 关键字。

例子:

Use cust

Select * From students

Where name Like "%影%"

Order By number Desc


5. 使用 Top 显示某个范围的第一个记录或最后一个记录。

使用 Top 关键字可以只显示一个大记录前面或后面的少数几个记录。在查询中,Top 关键字与排序子句一起把结果集限制为少数几个记录或按某个百分比显示整个结果记录集合中的一部分。

例子:

Select Top 3 * From students 返回 students 表中的前3条记录

Select Top 10 Percent * From students 返回 students 表中前面的10%个记录

Select Top 3 * From students Order By number desc 返回 students 表中 number 最大的(最后)的3条记录


6. 用 As 对字段名进行别名化

为什么在查询中对字段命以别名,或重新命名,这样做的原因有两个:

☆所涉及的表的字段名很长,想使字段在结果集中更易处理一些。

☆创建的查询产生了某些计算或合计列,需要对之进行命名。

不管是什么原因对字段命以别名,在 SQL 中都可以容易地使用 As 子句做得。

例子:

Select number As 学号 ,name As 姓名 From students


7. 合并查询

合并查询( Union Query )用于合并具有相同字段结构的两个表的内容,如果想在一个结果集中显示多个记录源中的不相关的记录时,这十分有用。

例子:

Select *

From students

Union

Select *

From students1

该查询结果集把 students 和 students1 中的记录合并到一个结果中,其输出就和原表归档之前一模一样。

注意:缺省情况下,合并查询不会返回重复记录(如果记录归档系统在把记录拷到归档表中后不将相应的记录删除,这时该功能就有用了),可以加上 All 关键字而让合并查询显示重复记录。

例子:

Select *

From students

Union All

Select *

From students1

该合并查询显示 students 表和 students1 表的内容时,没有对重复记录进行处理

补充:

Union 运算符允许把两个或者多个查询结果合并到一个查询结果集中。如果比较 Union 和 Join 两咱运算符,那么 Union 运算符增加行的数量,而 Join 运算符增加列的数量。使用 Union 时应该注意,两个结果中的列的结构必须匹配,数据类型必须兼容等等。

Union 运算符的语法形式如下:

Select select_list

From clause

Where clause

Group By clause

Having clause

Union [All]

Select select_list

From clause

Where clause

Group By clause

Having clause

Order By clause

Compute clause

对于 Union 运算符,有下列几点需要说明:

·在默认情况下,Union 运算符删除全部冗余行。如果使用All 选项,那么冗余行不删除。

·在 Union 语句中的全部 select_list 必须有相同数量的列、兼容的数据类型并且按照同样的顺序出现。

·在结果集中,列名来自第一个 Select 语句。


8.连接查询

在实际使用过程中经常需要同时从两个表或者两个以上表中检索数据。连接就是允许同时从两个表或者两个以上表中检索数据,指定这些表中某个或者某些列作为连接条件。在 SQL Server 中,可以使用两种连接语法形式,一种是 Ansi 连接语法形式,这是连接用在 From 子句中,另外一种是 SQL Server 连接语句形式,这是连接用在 Where 子句中。

Ansi 连接语法形式如下:

Select table_name.column_name,table_name.column_name,...

From {table_name [join_type] Join table_name On search_conditions}

Where [search_conditions]

在 Ansi 语法形式中,可以 Ansi 连接关键字来确定使用的连接形式。例如:

☆使用 Inner Join 关键字,结果集中仅包含满足条件的行。

☆使用 Cross Join 关键字,结果集中包含两个表中所有行的组合。

☆使用 Outer Join 关键字,结果集中既包含那些满足条件的行,还包含那些其中某个表的全部行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值