Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23273
  • 博文数量: 16
  • 博客积分: 660
  • 博客等级: 上士
  • 技术积分: 175
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-13 08:13
文章分类

全部博文(16)

文章存档

2011年(2)

2010年(5)

2009年(8)

2008年(1)

我的朋友
最近访客

分类: LINUX

2010-04-06 14:17:31

1、  备份数据库

dump database database_name to dump_device

说明:database_name 是要卸出的数据库名称,dump_device 是卸出设备的名称。用系统过程 sp_helpdevice 可以获得设备的信息。

 

2、  备份事务日志

dump transaction database_name  [to dump_device]  [with truncate_only|with no_log|with no_truncate]

说明:其中 database_name 是要备份事务的数据库名称,dump_device 是备份设备名称,仅当包含了 with truncate_only with no_log 子句时,才可以备份到设备。

注意:如果总是用 dump datebase (备份数据库及其日志),而不用 dump tran ,事务日志将不会刷新,而变得非常庞大。对于 master 数据库和小型数据库每次运行 dump datebase 之后应当运行 dump transaction 命令刷新日志

二、万一系统失败时恢复数据库系统

如果用户数据库存储的设备失效,从而数据库被破坏或不可存取,通过装入最新的数据库备份以及后来的事务日志备份可以恢复数据库。假设当前的事务日志存在于一个并没有毁坏的设备上,带着 with no_truncate 选项的 dump transaction 命令卸出它。

要恢复数据库按如下步骤去做:

1、如果日志存在于一个分离的设备上,用带着 no_truncate 选项的 dump transaction 命令卸出被毁坏的或者不可存取的用户数据库事务日志。

2、用下面的查询检查设备分配已毁坏数据库的设备使用情况。必须为同一目的赋同样的空间块。

下面的查询显示了分配给数据库 mydb 设备使用和尺寸情况:

select segmapsize from sysusages where dbid =( select dbid from sysdatabases where name = “mydb”)

3、  检查查询的输出。在 segmap 列的3’代表数据分配,4’代表日志分配。size 列代表 2k 数据块的数目。注意此信息的次序、使用和尺寸部分。例如,输出为:

Segmapsize

4、用 drop database 命令删除毁坏设备上的数据库。如果,用dbcc dbrepair 命令的 dropdb 选项。

5、删除数据库后,用 sp_dropdevice 删除毁坏了的设备。

6、用 disk init 初始化新的数据库设备。

7、重建数据库。用 create database 命令从老的 sysusages 表拷贝所有的行,并包含第一逻辑设备。

对上例,命令为:

create database mydb on datadev1=20datadev2=10 log on logdev1=10

8、用 alter database 命令重建其余入口。在此例中,在datadev1上分配更多的空间,命令为:

alter database mydb on datadev1=2

9、用 load database 重新装入数据库,然后用 load tran 装入前面卸出的日志。

load database 命令语法是:

load database database_name  from dump_device

load transaction 命令的语法是:

load transaction database_name from dump_device

卸出数据库和事务日志的缺省权限归数据库所有者,且可以传递给其他用户;装载数据库和事务的权限也归数据库所有者,但不能传递。

四、保证系统数据安全,周期更改用户口令;

为保证系统数据的安全,系统管理员必须依据系统的实际情况,执行一系列的安全保障措施。其中,周期性的更改用户口令是比较常用且十分有效的措施。更改用户口令是通过调用系统过程sp_password 来实现的。sp_password 的语法为:

sp_password caller_password,new_password [,loginame]

其中caller_password 是登录口令(老口令)new_password是新口令,loginame是登录名称。

删除数据库表格

SQL语言中使用drop table命令删除某个表格以及该表格中的所有记录。Drop table命令的使用格式为:

drop table tablename

例如:

drop table employee;

如果用户希望将某个数据库表格完全删除,只需要在drop table命令后输入希望删除的表格名称即可。Drop table命令的作用与删除表格中的所有记录不同。删除表格中的全部记录之后,该表格仍然存在,而且表格中列的信息不会改变。而使用drop table命令则会将整个数据库表格的所有信息全部删除。

如果用户希望一次查询多个字段,可以将所要查询的字段名称依次加入SELECT关键字之后,中间用隔开即可。

DISTINCT

SELECT关键字支持用户查询数据表中指定字段的所有数据,但是这样有时就会不可避免的出现重复信息。如果用户希望只查询那些具有不同记录值的信息的话,可以使用SQL语言的DISTINCT关键字。语法格式如下:

SELECT DISTINCT "column_name" FROM "table_name"

例如,我们可以使用以下命令查询Store_Information数据表具有不同记录值的所有记录。

SELECT DISTINCT Store_Name FROM Store_Information

查询结果如下:Store_Name  Los Angeles  San Diego  Boston

SQL功能与特性
  其实,在前面的文章中,已经提及SQL命令的一些基本功能,然而,通过SQL命令,程序设计师或数据库管理员(DBA)可以:
  (一)建立数据库的表格。(包括设置表格所可以使用之空间)
  (二)改变数据库系统环境设置。
  (三)针对某个数据库或表格,授予用户存取权限。
  (四)对数据库表格建立索引值。
  (五)修改数据库表格结构。(新建、删除或是修改表格字段)
  (六)对数据库进行数据的新建。
  (七)对数据库进行数据的删除。
  (八)对数据库进行数据的修改。
  (九)对数据库进行数据的查询。
  这几项便是通过SQL命令可以完成的事情,看起来是不是比起查询两个字所代表的功能要多的多了呢?

SQL语法的分类

其实SQL命令并不是非常多,可是要把SQL用到出神入化,却也只需要短短几个命令便够,因为SQL命令是针对关系型数据库所建立出来的语法叙述,所以SQL在这类数据库中所发挥的功能非常的强,以下将针对在VB中常用的SQL语法基本命令加以分类介绍。在说明SQL的命令以及使用语法之前,以下将SQL做了的分类,在致上SQL语法所使用到的类型,可以说都已包含在这些类别当中。

第一类、属性词(Predicates
SQL命令中用来指明所要选择的记录的方式。如ALLTOPDISTINCT等等。
第二类、声明(Declaration

针对SQL ParameterParameter Query 的名称与数据类型做声明,如PARAMETERS的声明等等。

第三类、条件子句(Clause

SQL的查询中,利用一些表达式定义出查询的条件,以缩小寻找的范围,如WHERE。第四类、运算符(Operator)与操作数(Operation

SQL的查询中,与Operation共同组成表达式(Expression),如BETWEEN....AND 运算符与INNER JOIN操作数。

第五类、函数(Function

一些SQL常见的函数,像是AVG()是求算数平均数的函数。

第六类、SQL语句(Statement

SQL的语句,可以说是SQL语法的主体,用来对某一个特定的数据库发出指示,并返回相关的数据,而SQL的语法结构,基本上可以利用下面的式子来表示:命令+条件子句
例如:

SELECT*FROM TAB WHERE TAB.NAME='A'

其中的“FROM....WHERE”便是一个条件子句,其实SQL的语法并不难,您只需记住这样的一个规则,相信可以很快的了解SQL用法。

SQL语法与命令

SELECT 语句

SELECT[predicate]{*|table.*|[table.]field [,[table.]field2[,...]]} [AS alias1 [,alias2[,...]]]
FROM tableexpression [,...][IN externaldatabase] [WHERE...][GROUP BY...][HAVING...]

[ORDER BY...] [WITH OWNERACCESS OPTION]

SELECT 语句包括下面几个部分

Predicate

如前面所述,包括了ALLDISTINCT,DISTINCTROW,TOP 我们可以利用这样的语句去限制查询后所得的结果。

从指定表格中指定所有的字段。

Table

针对被选择出的记录的字段,所指定表格的名称。

Field1,field2

想要读取数据的字段名称,如果包含了一个以上的字段,会依照列出的顺序来读取数据alias1,alias2

用来替代在表格实际字段名称的化名。

Tableexpression

表格名称或包含我们所想要的数据的表格。

Externaldatabase

若使用到不是目前的数据库则将其名字定义在externaldatabase当中。 ALL,DISTINCT,DISTINCTROW,TOP属性词用法

SELECT [ALL|DISTINCT|DISTINCTROW|[TOP n[PERCENT]]] FROM table  ALL

若是您不指定任何的字段数据,则Microsoft Jet数据库引擎(database engine)将会选择所有的字段,并依据所定的条件查询出需求数据集。例如下面这两个例子将会具有相同的效果,都会从职员表格中返回所有字段的数据。

例如:若是我们要查询出职员表格中的所有记录,可以通过下面的语句来完成。

SELECT ALL* FROM 职员表格; DISTINCT

对某个表格所选择的字段数据,略过重复的情况,也就是说,针对某个字段查询出来的记录结果是唯一的。例如有许多存放在职员表格的职员数据,也许会具有相同的姓名,所以若是我们用SQL语句中的SELECT DISTINCT,则查询出来的结果将会针对不一样的姓名加以筛选。若是您把DISTINCT 加以省略,则这样的查询会显示所有的记录。

DISTINCTROW

将整条记录重复的记录忽略掉,而不是只有针对某一个字段的数据。

Table

指定查询记录所需要的表格。

例如:

SELECT DISTINCTROW 公司名称FROM 顾客表格 INNER JOIN 订单表格ON 顾客表格.顾客ID=订单表格.顾客ID ORDER BY 公司名称;

如果您忽略 DISTINCTROW 则会对每个公司产生一行以下的订单数据。此外,若是DISTINCTROW只有用在一个表格当中,则会被省略掉。

TOP

从第一条或最后一条开始(利用ORDER BY条件子句),返回特定条数的数据。

例如:当您想要知道在2000年,班上前25名的学生姓名数据时,您可以输入这样的语句:

SELECT TOP 25 学生姓名FORM 学生表格WHERE 毕业年份=1994 ORDER BY 毕业成绩平均分数 DESC

如果您没有加上ORDER BY 这行条件的话,您所得到的数据,将会随机的数据。此外,在TOP语句之后,除了可以加上数字以外,还可以利用保留字PERCENT来查询。

例如:

SELECT TOP 10 PERCENT学生姓名FROM学生表格WHERE毕业年份=1994 ORDER BY毕业成绩平均DESC

PARAMETERS(参数)声明的用法对于参数型的查询语法中,对参数的名称以及数据类型作 声明的操作。

PARAMETERS name datatype[,name datatype[,...]]  name

PARAMETERS的名称。您可以把参数名称当作字符串来使用,若是名称中包含了空字符串,可以利用中括号来处理,例如:“VBeden”

Datatype

输入参数的数据类型。

例如:若是您在查询时,需要机动的输入姓名 ,可以利用下列的方式完成:

PARAMETERS “输入姓名” Text ;

SELECT* FROM 职员表格WHERE姓名=“输入姓名:”;

ORDER BY条件语句

此条件子句,通常与SELECT语句合并使用目的是将查询的结果,依照指定字段加以排序SELECT fieldlist FROM table WHERE selectcriteria ORDER BY field[ASC|DESC][,field2[ASC|DESC][,...]]  fieldlist

欲查询的字段名称。其中可以与ALLDISTINCTDISINCTROW,或TOP一起来使用。

table欲查询的表格名称。 selectcriteria查询的标准设置。 field1指定要依照那个字段作为排序的依据,若是你没有加上ORDER BY查询出的数据集将不会作排序的操作。ASC递增顺序类别。(默认值) DESC递减顺序类别。

例如:或是我们要将输出数据依据出生的先后次序排列,可以利用下面的命令。

SELECT 姓名,生日 FROM 职员表格ORDER BY 生日

SELECT LastName,FirstName FROM Employees ORDER BY LastName ASC;

IN 条件子句

指定要速胜哪一个外部数据库的表格。(必须是Microsoft Jet数据库引擎所可以连接的数据库,如dBase,Paradox等等)

SELECT|INSERT]INTO destination IN {path|["path" "type"]|[""[type;DATABASE=path]]}

FROM tableexpression IN {path|["path" "type"]|[""[type;DATABASE=path]]}

destination欲插入数据的外部表格名称。 tableexpression表格名称或是被读取数据的表格名称。这个参数可以是一个单一的表格名称,或是一段已经被存储的SQL查询等。path包含该表格的完整路径名称。type数据库的类型名称, 通常是当数据库部属于Jet database时才会使用。(例如:dBASE III,dBASE IV,Paradox 3.x,Paradox 4.x, Btrieve)

例如:下面这两段的意义相同

PartA....FROM Table IN ""[dBASE IV;DATABASE=C:\DBASE\DATA\SALES;];

PartB....FROM Table IN "C:\DBASE\DATA\SALES" "dBASE IV;"

例如:Microsoft Jet database

SELECT 顾客编号FROM 顾客表格IN CUSTOMER.MDB WHERE 顾客编号 Like "A*";

其中CUSTOMER.MDBO Jet database 的数据库名称,其中包含了顾客表格。

例如:dBASE III or IV

SELECT 顾客编号FROM 顾客表格IN "C:\DBASE\DATA\SALES" "dBASE IV;"WHERE 顾客编号 Like "A*";

所以当我们使用不同于ACCESS 的数据库时,必须指明该数据库的类型名称。

HAVING 条件子句

指定一特定的分组记录,并满足HAVING 所指定的条件或状态,但条件是针对分组的条件设置。

SELECT fieldlist FROM table WHERE selectcriteria GROUP BY groupfieldlist HAVING groupcriteria

Fieldlist 显示被查询的字段名称。(可与ALLDISTINCTDISTINCTROW,或TOP相结合) table欲查询数据的表格名称。selectcriteria选取标准。groupfieldlist分组记录的字段名称,到多10个字段。而这些字段的顺序决定最高到最低的分组阶层。groupcriteria决定什么样的分组记录要被显示。

HAVINGWHERE 的用法相当类似,不同之处在于HAVING必须用于GROUP之后的分组数据上。例如:

SELECT 分类编,Sum(库存数量) FROM 产品表格GROUP BY 分类编号HAVING Sum(库存数量)>100 AND 产品名称 LIKE "*"

GROUP BY 条件子句

依据指定的字段,将具有相同数值的记录合并成一条。

SELECT fieldlist FROM table WHERE criteria GROUP BY groupfieldlist

fieldlist欲读取的字段名称。(可与ALLDISTINCTDISTINCTROW,或TOP合并使用)

table被查询的表格名称。groupfieldlist分组记录的字段名称,到多10个字段,而这些字段的顺序决定最高到最低的分组层次。

例如:

SELECT 姓名,Count(姓名)AS 职员姓名FROM 职员表格WHERE 部门名称='业务部'GROUP BY 姓名

FROM 条件子句

指定表格名称或是查询,其中包含列在SELECT语句的字段数据。

SELECT fieldlist FROM tableexpression[IN externaldatabase]

fieldlist表格中的字段名称。(可与ALL,DISTINCT,DISTINCTROW,TOP相结合)

tableexpression表格名称,或多个表格的算式。externaldatabase若该表格参考到外部的数据库时,将其完整的路径名称记下。

例如:从职员表格下,查询出所有姓名字段的数据(只有姓名字段被查询,其他则不显示)

SELECT 姓名 FROM 职员表格;

WHERE 条件子句

指定查询的条件与限制。

SELECT fieldlist FROM tableexpression WHERE criteria

fieldlist字段名称。(可与ALL,DISTINCT,DISTINCTROW,TOP相结合) tableexpression
表格名称,或多个表格的算式。 criteria查询的结果,必须依照这一限制标准。

例如:要查询出职员表格中,所有姓氏是李的数据,可以用下面的语句。

SELECT 姓名FROM 职员表格WHERE 姓氏=''

BETWEEN...AND 运算符

决定某一人数值是否介于特定的范围之内,此运算符只可以用在SQL的语句中。

expr[Not]BETWEEN value1 AND value2

expr指定要加以计算的字段与表达式的组合。 value1,value2所指明的数值范围。

例如:若是要从职员表格查询出所有年龄介于25-30岁的员工,可以利用下面的程序来做。

SELECT 姓名,年龄 BETWEEN 25 AND 30FROM 职员表格;

LIKE 操作数

用来将一字符串与另一特定字符串样式(pattern)比较,并将符合该字符串样式的记录过滤出来。

expression LIKE "pattern"

expression使用在WHERE条件子句,SQL表达式。 pattern用以比较的字符串样式。

例如:若是你要查询出所有以为首的姓氏,可以利用下面的式子。

Like "*" LIKE操作数的多种范例:

1、多个字符:

(1)"a*a" 可筛选:"aa","aBa","aBBBa",不能筛选:"aBC"

(2)"*ab*" 可筛选:"abc","AABB","Xab",不能筛选:"aZb","bac"

2、特殊字符:

"a“*”a" 可筛选:"a*a",不能筛选:"aaa"

3、单一字符:

"a?a"可筛选:"aaa","a3a","aBa",不能筛选:"aBBBa"
4
、单一数字:

"a#a"可筛选:"a0a","a1a","a2a",不能筛选:"aaa","a10a"

5、字符范围:

"“a-z”"可筛选:"f","p","j",不能筛选:"2","&"

6、指定字符以外部范围:

"“!a-z”"

7、指定非数字:

"“!0-9”"可筛选:"A","a","&","~",不能筛选:"0","1","9"

8、组合式结构:

"a“!b-m”#"可筛选:"An9","az0","a99",不能筛选:"abc","aj0"

SQL数字函数

1、  AVG:算数平均数

AVG(expr)

expr字段名称或表达式。

例如:若要计算职员身高超过165厘米的职员平均身高,可以利用下面的SQL语句来完成。

SELECT Avg(身高)AS 平均身高FROM 职员表格 WHERE 身高>165

2、  COUNT:计算记录条数

COUNT(expr)

expr字段名称或表达式。

例如:若是要统计出业务部门的职员人数,并查询出职员的姓名,可以利用下面的程序。

SELECT Count(姓名) AS 职员姓名FROM 职员表格WHERE 部门名称='业务部'

3、  FIRSTLAST:返回某字段的第一条数据与最后一条数据。

FIRST(expr) LAST(expr)

expr字段名称或表达式。

例如:若是要找出货品数量字段的第一条数据与货品价格字段的最后一条数据时,可以利用下面的查询方式。

SELECT FIRST(货品数量)LAST(货品价格)FROM 订单表格

4、  MAX,与MIN:返回某字段的最大值与最小值。

用法同FIRSTLAST

5、  SUM:返回某特定字段或是运算的总和数值。

SUM(expr)

expr字段名称或表达式。

例如:要计算出货品总价,可使用下面的程序。

SELECT Sum(单位价格*货品数量)AS 货品总价 FROM 订单表格

多层SQL查询

顾名思义,多层的SQL查询的便在于:在一个SQL语句中可以包含另一个SQL查询语句,形成内部嵌套的查询类型。

comparison[ANY|ALL|SOME](sqlstatement) expression[NOT]IN (sqlstatement)

[NOT]EXISTS(sqlstatement)

comparison将表达式与内层查询的结果比较的操作。 expression对内层查询的结果作搜索的表达式。 sqlstatementSELECT语句构成的SQL查询,必须用()将该语句括起来。

例如:我们先从订单表格当中,查询出所有的单位,再将产品表格中的单位与的一一对比,查询出所有高于订单表格的单位价格的记录。

SELECT * FROM 产品表格WHERE 单位价格>ANY (SELECT 单位价格 FROM 订单表格 WHERE 折扣>=.25)

SQL与数据库的维护

表格的建立

SQL中的基本语法作了一番介绍以后,但大多是偏向于数据库数据的查询与过滤,但实际上,我们通过SQL命令所可以做的事还有很多,接下来要介绍的便是如何利用SQL的语法命令来建立一个数据库中的表格。

CREATE TABLE语句

我们可以利用这个命令,来建立一个全新的表格,但前提则是:数据库必须已经存在。
CREATE TABLE table(field1 type[(size)][index1][,field2 type[(size)][index2][,...]][,nultifieldindex[,...]])

table欲建立的新的表格名称。 field1,field2在新表格中的新的字段名称,到少要一个字段以上。 type字段的数据类型。 size字段的大小。 index1,index2利用CONSTRAINT条件子句定义一个单一字段的索引名称。 multifieldindex利用CONSTRAINT条件子句定义一个多重字段的索引名称。

例如:建立一个拥有职员姓名与部门字段的表格。

CREATE TABLE 职员表格 (姓名TEST,部门TEST,职员编号 INTEGER CONSTRAINT职员字段索引PRIMARY KEY)

在这一个范例中,我们建立了一个表格名称为职员表格的表格,并且定义了该表格的主键值,以限制数据不能重复输入。

表格索引的建立

CREATE INDEX语句

这个命令主要是对一个已存在的表格建立索引,其用法如下:

CREATE[UNIQUE]INDEX index ON table(field[ASC|DESC][,field[ASC|DESC],...])
[WITH {PRIMARY|DISALLOWNULL|IGNORENULL}]

index欲被建立的索引名称。 table欲建立索引的表格名称。 field欲被建立的索引的字段名称。并可通过DESC保留字,来决定索引的顺序。

例如:在职员表格中建立一个索引。

CREATE INDEX 新索引名称ON 职员表格(姓名部门)

表格的字段更新

CONSTRAINT条件子句

CONSTRAINT 的功能是类似索引(INDEX)的,虽然CONSTRAINT 也可以建立表格之间的关联性。

单一字段索引:

CONSTRAINT name{PRIMARY KEY|UNIQUE|REFERENCES foreigntable[(foreignfield1,foreignfield2)]}

多字段索引:

CONSTRAINT name {PRIMARY KEY(primary1[,primary2[,...]])|UNIQUE(unique1[,unique2[,...]]) |FOREIGN KEY (ref1[,ref2[,...]]) |REFERENCES foreigntable[(foreignfield1[,foreignfield2[,...]])]}

name要被建立的CONSTRAINT名称。 primary1,primary2被用来设计成主键值的字段名称(可一个以上) unique1,unique2被用来设计成唯一键值的字段名称(可一个以上) foreign key字段名称,或是参考到别的表格中字段的字段名称。 foreigntable如前所述,被参考到的表格。 foreignfield1,foreignfield2在参考到的表格当中,被ref1,ref2字段所指定的字段。如果被参考的字段是参考表格中的主键值,你也可以省略这个条件子句。

例如:当我们要建立一个新的职员数据表格,表格包含姓名、部门名称与生日三个字段,且由这三个字段建立一个唯一的索引时,可以使用下面这段SQL的语句。

CREATE TABLE 职员数据表格(姓名 TEST,部门名称 TEST,生日 DATETIMECONSTRAINT 职员数据表格限制 UNIQUE(姓名,部门名称,生日))

以上是SQL中,与数据库表格建立相关的命令,你可以利用这些命令,通过SQL的语句,将数据库表格完整的建立出来,接下来的章节,将针对数据库建立之后的维护与增删所要使用的SQL语句作一介绍。

表的删除

DELETE语句

我们可以利用DELETE语句,将表格中的记录删除。(注意:记录被删除后,无法再复原,所以条件设置要正确)

DELETE  FROM tableexpression WHERE criteria

table欲删除记录的表格名称,也可以用*来取代。 tableexpression一个或一个以上表格的名称。此一参数可以为单一的表格名称或是从INNER JOINLEFT JOIN,或RIGHTJOIN 等运算所得到的结果。 criteria决定表格中记录要被删除的标准。

例如:若是我们要将职员表格中姓名姓名叫做'李名'的记录删除,我们可以利用下面的SQL语句来完成。

DELETE * FROM 职员表格WHERE 姓名='李名';

数据库表格相关的操作命令

SQL除了可以作为查询与数据库表格的建立的工具外,对于数据库与表格的新建、删修、与维护,与具有相当不错的功能,若是读者使用SQL命令得宜,对于整个效率的提高有着很大的帮助,所以对于SQL语句所带来的优势,常常会遇到一个情况,就是:当我们对多个表格作复杂与多步骤的处理时,或许SQL只要一个语句就可以完成所有的需求与目标,乍看一下,或许觉得有些玄妙,但是接下来的章节,会让你了解其中的妙处。

SELECT...INTO语句

我们可以通过这个命令,利用既存表格查询,来建立一个新表格的查询语句。

SELECT field1[,field2[,...]]INTO newtable[IN externaldatabase] FROM source field1,field2

欲拷贝到新表格的字段名称。

newtable欲建立之新表格的名称,不可是已经存在的表格。 externaldatabase若是该表格在另外的外部数据库时,该数据库的名称。 source记录数据拷贝的来源表格名称,可以是单一的表格或是一段SQL查询之语句。

例如:你可以通过下面的SQL语句,来建立一个新的训练名册表格。

SELECT 职员表格.姓名,职员表格.部门INTO 训练名册 FROM 职员表格WHERE 职称='新进人员';

INNER JOIN操作数

当某一个共同的字段数据相等时,将两个表格的记录加以组合。

SELECT fields FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2

table1,table2欲进行记录组合的表格名称。 field1,field2欲组合的字段名称。(必须具有相同的数据类型) compopr比较关系运算符如下:“=”“<”“>”“<=”“<>”等。

例如:若是你要把分类表格与产品表格作组合,可参考下面的SQL语句。

SELECT 分类名称,产品名称FROM 分类表格 INNER JOIN 产品表格ON 分类表格.分类编号=产品表格.分类编号;

UNION操作数

我们可以通过UNION操作数来建立连接的查询条件,UNION操作数可以将两个以上的表格或是查询的结果组合起来。

[TABLE]query1 UNION [ALL][TABLE]query2 [UNION [ALL][TABLE]queryn [...]]

query1,query2,queryn为一个SELECT的语句,或是一个已存在的查询名称,或是一个已存在的表格名称。

例如:你可以利用下面的SQL语句,将订单数量超过1000的顾客表格记录,与新客户表格作UNION的操作。

TABLE 新客户表格 UNION ALL SELECT *FROM 顾客表格WHERE 订单数量>1000

ALTER语句

在一个表格被建立之后,利用ALTER语句,我们可以去修改表格的字段设计。

ALTER TABLE table {ADD {COLUMN field type[(size)][CONSTRAINT index]|CONSTRAINT multifieldindex}|DROP {COLUMN field|CONSTRAINT indexname}}

table欲被ALTER的表格名称。 field要被增加或删除的字段名称。 type字段数据类型。

size字段大小。 index对此字段的索引。

例如:在职员表格中新建一个薪水的字段。

ALTER TABLE 职员表格ADD COLUMN 薪水 CURRENCY

例如:在职员表格中删除一个薪水的字段。

ALTER TABLE 职员表格 DROP COLUMN 薪水;

DROP语句

针对所指定的表格或字段加以删除,或是把索引删除。

DROP {TABLE table|INDEX index ON table}

table欲删除之表格或索引依附之表格名称。 index欲从表格中删除的索引名称。

例如:从职员表格中,删除编号索引。

DROP INDEX MyIndex ON Employees;

例如:从数据库中,删除整个表格。

DROP TABLE 职员表格;

INSERT INTO语句

新建一条数据到表格当中。

多条记录新建查询:

INSERT INTO target [IN externaldatabase][(field1[,field2[,...]])]

SELECT [source.]field1[,field2[,...]  FROM tableexpression

单条记录新建查询:

INSERT INTO target[(field1[,field2[,...]])] VALUES(value1[,value2[,...])

target新建记录的表格名称。 externaldatabase外部数据库的路径,搭配IN条件子句使用。

source若是记录从其它表格中拷贝时,指明该表格的名称。 field1,field2欲增加数据的字段名称。 tableexpression表格名称或描述记录是从哪一个表格中插入的表格名称。配合INNER JOINLEFT JOIN,或 RIGHT JOIN 运算符一起使用。 value1,value2欲插入表格中的数值。

例如:在客户数据表格中,从新的表格插入数据。

INSERT INTO 客户数据表格SELECT 新客户数据表格.* FROM 新客户数据表格;

例如:在职员表格中插入数据。

INSERT INTO 职员表格(姓名,生日,职称)VALUES("王荣","57/12/11","经理");

例如:从训练人员表格中,将职员雇用时间超过30天者,加入到正式职员表格中。

INSERT INTO 职员表格 SELECT 训练人员表格.*FROM 训练人员表格WHERE 雇用天数>30

UPDATE语句

建立一个UPDATE的查询,通过条件的限制来修改特定的数据。

UPDATE table SET newvalue WHERE criteria;

table欲修改数据的表格名称。 newvalue欲修改成的数值(将该项数值插入到特定的字段当中) criteria查询条件,用来决定要修改哪些记录。

例如:若是要把订单表格中的订单数量修改成1.1倍,运费为1.03倍,可利用下列之SQL语句来完成。

UPDATE 订单表格SET 订单数量=订单数量 * 1.1,运费=运费 * 1.03WHERE 运达地点='美国'

当我们完成修改后,你可以利用 SELECT 语句,配合同样的 WHERE 条件子句,来察看修改的数据是否正确。 事实上,要利用SQL完成某些看似复杂的操作,并不需要繁琐的SQL命令组合,或是许许多多的步骤才能完成,其实最重要的还是要活用SQL命令,才会在最精简的SQL语句里获得最高的效率。

阅读(2270) | 评论(0) | 转发(0) |
0

上一篇:ss

下一篇:fstab修复

给主人留下些什么吧!~~