BACKUP
备份整个数据库、事务日志,或者备份一个或多个文件或文件组。有关数据库备份和恢复操作的更多信息,请参见备份和还原数据库。
语法
备份整个数据库:
BACKUP DATABASE { database_name | @database_name_var }
TO < backup_device > [ ,...n ]
[ WITH
[ BLOCKSIZE = { blocksize | @blocksize_variable } ]
[ [ , ] DESCRIPTION = { 'text' | @text_variable } ]
[ [ , ] DIFFERENTIAL ]
[ [ , ] EXPIREDATE = { date | @date_var }
| RETAINDAYS = { days | @days_var } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] FORMAT | NOFORMAT ]
[ [ , ] { INIT | NOINIT } ]
[ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
[ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
[ [ , ] { NOSKIP | SKIP } ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]
备份特定的文件或文件组:
BACKUP DATABASE { database_name | @database_name_var }
< file_or_filegroup > [ ,...n ]
TO < backup_device > [ ,...n ]
[ WITH
[ BLOCKSIZE = { blocksize | @blocksize_variable } ]
[ [ , ] DESCRIPTION = { 'text' | @text_variable } ]
[ [ , ] DIFFERENTIAL ]
[ [ , ] EXPIREDATE = { date | @date_var }
| RETAINDAYS = { days | @days_var } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] FORMAT | NOFORMAT ]
[ [ , ] { INIT | NOINIT } ]
[ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
[ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
[ [ , ] { NOSKIP | SKIP } ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]
备份一个事务日志:
BACKUP LOG { database_name | @database_name_var }
{
TO < backup_device > [ ,...n ]
[ WITH
[ BLOCKSIZE = { blocksize | @blocksize_variable } ]
[ [ , ] DESCRIPTION = { 'text' | @text_variable } ]
[ [ ,] EXPIREDATE = { date | @date_var }
| RETAINDAYS = { days | @days_var } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] FORMAT | NOFORMAT ]
[ [ , ] { INIT | NOINIT } ]
[ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
[ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
[ [ , ] NO_TRUNCATE ]
[ [ , ] { NORECOVERY | STANDBY = undo_file_name } ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOSKIP | SKIP } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]
}
< backup_device > ::=
{
{ logical_backup_device_name | @logical_backup_device_name_var }
|
{ DISK | TAPE } =
{ 'physical_backup_device_name' | @physical_backup_device_name_var }
}
< file_or_filegroup > ::=
{
FILE = { logical_file_name | @logical_file_name_var }
|
FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }
}
截断事务日志:
BACKUP LOG { database_name | @database_name_var }
{
[ WITH
{ NO_LOG | TRUNCATE_ONLY } ]
}
参数
DATABASE
指定一个完整的数据库备份。假如指定了一个文件和文件组的列表,那么仅有这些被指定的文件和文件组被备份。
说明 在进行完整数据库备份或差异数据库备份时,Microsoft® SQL Server™ 备份足够的事务日志,以生成一个将在还原数据库时使用的一致的数据库。在 master 数据库上只能采用完整数据库备份。
{ database_name | @database_name_var }
指定了一个数据库,从该数据库中对事务日志、部分数据库或完整的数据库进行备份。如果作为变量 (@database_name_var) 提供,则可将该名称指定为字符串常量 (@database_name_var = database name) 或字符串数据类型(ntext 或 text 数据类型除外)的变量。
< backup_device >
指定备份操作时要使用的逻辑或物理备份设备。可以是下列一种或多种形式:
{ logical_backup_device_name } | { @logical_backup_device_name_var }
是由 sp_admpdevice 创建的备份设备的逻辑名称,数据库将备份到该设备中,其名称必须遵守标识符规则。如果将其作为变量 (@logical_backup_device_name_var) 提供,则可将该备份设备名称指定为字符串常量 (@logical_backup_device_name_var = logical backup device name) 或字符串数据类型(ntext 或 text 数据类型除外)的变量。
{ DISK | TAPE } =
'physical_backup_device_name' | @physical_backup_device_name_var
允许在指定的磁盘或磁带设备上创建备份。在执行 BACKUP 语句之前不必存在指定的物理设备。如果存在物理设备且 BACKUP 语句中没有指定 INIT 选项,则备份将追加到该设备。
当指定 TO DISK 或 TO TAPE 时,请输入完整路径和文件名。例如,DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\Mybackup.dat' 或 TAPE = '\\.\TAPE0'。
说明 对于备份到磁盘的情况,如果输入一个相对路径名,备份文件将存储到默认的备份目录中。该目录在安装时被设置并且存储在 KEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer 目录下的 BackupDirectory 注册表键值中。
如果使用的是具有统一命名规则 (UNC) 名称的网络服务器或已重新定向的驱动器号,则请指定磁盘的设备类型。
当指定多个文件时,可以混合逻辑文件名(或变量)和物理文件名(或变量)。但是,所有的设备都必须为同一类型(磁盘、磁带或管道)。
Windows 98 不支持备份到磁盘。
RESTORE
还原使用 BACKUP 命令所做的备份。有关数据库备份和还原操作的更多信息,请参见备份和还原数据库。
语法
还原整个数据库:
RESTORE DATABASE { database_name | @database_name_var }
[ FROM < backup_device > [ ,...n ] ]
[ WITH
[ RESTRICTED_USER ]
[ [ , ] FILE = { file_number | @file_number } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
[ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]
[ ,...n ]
[ [ , ] KEEP_REPLICATION ]
[ [ , ] { NORECOVERY | RECOVERY | STANDBY = undo_file_name } ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] REPLACE ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]
还原数据库的部分内容:
RESTORE DATABASE { database_name | @database_name_var }
< file_or_filegroup > [ ,...n ]
[ FROM < backup_device > [ ,...n ] ]
[ WITH
{ PARTIAL }
[ [ , ] FILE = { file_number | @file_number } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
[ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]
[ ,...n ]
[ [ , ] NORECOVERY ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] REPLACE ]
[ [ , ] RESTRICTED_USER ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]
还原特定的文件或文件组:
RESTORE DATABASE { database_name | @database_name_var }
< file_or_filegroup > [ ,...n ]
[ FROM < backup_device > [ ,...n ] ]
[ WITH
[ RESTRICTED_USER ]
[ [ , ] FILE = { file_number | @file_number } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
[ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]
[ ,...n ]
[ [ , ] NORECOVERY ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] REPLACE ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]
还原事务日志:
RESTORE LOG { database_name | @database_name_var }
[ FROM < backup_device > [ ,...n ] ]
[ WITH
[ RESTRICTED_USER ]
[ [ , ] FILE = { file_number | @file_number } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]
[ ,...n ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
[ [ , ] KEEP_REPLICATION ]
[ [ , ] { NORECOVERY | RECOVERY | STANDBY = undo_file_name } ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] RESTART ]
[ [ , ] STATS [= percentage ] ]
[ [ , ] STOPAT = { date_time | @date_time_var }
| [ , ] STOPATMARK = 'mark_name' [ AFTER datetime ]
| [ , ] STOPBEFOREMARK = 'mark_name' [ AFTER datetime ]
]
]
< backup_device > ::=
{
{ 'logical_backup_device_name' | @logical_backup_device_name_var }
| { DISK | TAPE } =
{ 'physical_backup_device_name' | @physical_backup_device_name_var }
}
< file_or_filegroup > ::=
{
FILE = { logical_file_name | @logical_file_name_var }
|
FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var}
}
参数
DATABASE
指定从备份还原整个数据库。如果指定了文件和文件组列表,则只还原那些文件和文件组。
{database_name | @database_name_var}
是将日志或整个数据库还原到的数据库。如果将其作为变量 (@database_name_var) 提供,则可将该名称指定为字符串常量 (@database_name_var = database name) 或字符串数据类型(ntext 或 text 数据类型除外)的变量。
FROM
指定从中还原备份的备份设备。如果没有指定 FROM 子句,则不会发生备份还原,而是恢复数据库。可用省略 FROM 子句的办法尝试恢复通过 NORECOVERY 选项还原的数据库,或切换到一台备用服务器上。如果省略 FROM 子句,则必须指定 NORECOVERY、RECOVERY 或 STANDBY。
< backup_device >
指定还原操作要使用的逻辑或物理备份设备。可以是下列一种或多种形式:
{'logical_backup_device_name' | @logical_backup_device_name_var}
是由 sp_admpdevice 创建的备份设备(数据库将从该备份设备还原)的逻辑名称,该名称必须符合标识符规则。如果作为变量 (@logical_backup_device_name_var) 提供,则可以指定字符串常量 (@logical_backup_device_name_var = logical_backup_device_name) 或字符串数据类型(ntext 或 text 数据类型除外)的变量作为备份设备名。
{DISK | TAPE } =
'physical_backup_device_name' | @physical_backup_device_name_var
允许从命名磁盘或磁带设备还原备份。磁盘或磁带的设备类型应该用设备的真实名称(例如:完整的路径和文件名)来指定:DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\Mybackup.dat' 或 TAPE = '\\.\TAPE0'。如果指定为变量 (@physical_backup_device_name_var),则设备名称可以是字符串常量 (@physical_backup_device_name_var = 'physical_backup_device_name') 或字符串数据类型(ntext 或 text 数据类型除外)的变量。
如果使用的是含有 UNC 名称的网络服务器或已重新定向的驱动器号,则请指定磁盘的设备类型。运行 SQL Server 时所使用的帐户必须具有对远程计算机或网络服务器的 READ 访问权,这样才能执行RESTORE 操作。
B. sql 回滚语句
这种情况的数据恢复只能利用事务日志的备份来进行,所以如果你的SQL没有进行相应的全库备份
或不能备份日志(truncate log on checkpoint选项为1),那么就无法进行数据的恢复了,或者
只能恢复到最近一次的备份的数据了。
以下简单说明恢复数据方法:
1,如果误操作之前存在一个全库备份(或已有多个差异备份或增量备份),首先要做的事就是进
进行一次日志备份(如果为了不让日志文件变大而置trunc. log on chkpt.选项为1那你就死翘了)
backup log dbName to disk='fileName'
2,恢复一个全库备份,注意需要使用with norecovery,如果还有其他差异或增量备份,则逐个恢
复
restore database dbName from disk='fileName' with norecovery
3,恢复最后一个日志备份即刚做的日志备份,指定恢复时间点到误操作之前的时刻
restore log dbName from disk='fileName'
with stopat='date_time'
以上这些操作都可以在SQL SERVER企业管理器里完成,难度不大。。。
当然,如果误操作是一些不记日志的操作比如truncate table,select into等操作,那么是无法利
用上述方法来恢复数据的...
C. SQL恢复master数据库方法 只有mdf文件的数据库如何恢复
首先先和大家讲一讲SQL
Server恢复master数据库方法,具体步骤如下
第一步:复制model.mdf、mastlog.ldf、model.mdf、modellog.ldf、msdbdata.mdf、msdblog.ldf文件。
从X:\Program
Files\Microsoft
SQL
Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\Templates
至X:\Program
Files\Microsoft
SQL
Server\MSSQL10.MSSQLSERVER\MSSQL\DATA
注:以上“X:\Program
Files\Microsoft
SQL
Server”为SQL
Server的安装目录。以下的“C:\Program
Files\Microsoft
SQL
Server”为系统盘下的目录
第二步:定位并执行安装命令
1.
首先找到安装命令:C:\Program
Files\Microsoft
SQL
Server\100\Setup
Bootstrap\Release\setup.exe
2.
执行命令
如果只是Windows身份验证模式,只需要如下语法即可:
复制代码
代码如下:setup
/ACTION=REBUILDDATABASE
/QUIET
/INSTANCENAME=<instance
name>
/SQLSYSADMINACCOUNTS=<accounts>
如果是复合身份验证模式,则需要使用/SAPWD参数提供sa的密码:
复制代码
代码如下:setup
/ACTION=REBUILDDATABASE
/QUIET
/INSTANCENAME=<instance
name>
/SQLSYSADMINACCOUNTS=<accounts>
/SAPWD=<sa
password>
我安装时设置的是复合认证模式,SQL
Server系统管理员帐号是administrators组,sa密码是123456。并且就一个默认实例:MSSQLSERVER。
所以在命令行执行如下命令:
复制代码
代码如下:setup
/ACTION=REBUILDDATABASE
/QUIET
/INSTANCENAME=MSSQLSERVER
/SQLSYSADMINACCOUNTS=administrators
/SAPWD=123456
第三步:执行完毕后没有任何提示信息(不管成功与否),但是可以马上在C:\Program
Files\Microsoft
SQL
Server\100\Setup
Bootstrap\Log\Summary.txt中查看安装日志。
最后,在Sql
Server
Configuration
Manager中启动SQL
Server服务成功。
在处理过程中出现了这种情况SQL恢复数据库又该怎么办?只有mdf文件时,应当如何进行恢复,即有log文件的数据库如何恢复
SQL恢复数据库具体实现步骤:
1、新建一个同名数据库。
2、停止数据库服务,覆盖新建的数据库主文件(小技巧:最好放在同一个磁盘里面,把新建的数据库主文件删掉或移开,再把要恢复的数据库主文件剪切过去,这样就可以节省时间。)
3、启动数据库服务,数据库变为置疑或可疑状态。然后在查询分析器中运行:
alter
database
无日志文件的数据库名称
set
emergency
设置为紧急状态。
4、再运行:
alter
database
无日志文件的数据库名称
set
single_user
或者:
Sp_dboption
'无日志文件的数据库名称',
'single
user',
'true'
设置为单用户模式。
5、检查并重建日志文件,运行:
dbcc
checkdb('无日志文件的数据库名称',REPAIR_ALLOW_DATA_LOSS)
这个时间比较长。耐心等待!如果有错误提示,再运行:
dbcc
checkdb('无日志文件的数据库名称',REPAIR_REBUILD)
进行修复。如果没有错误,可以跳过。
6、恢复成多用户模式
alter
database
无日志文件的数据库名称
set
multi_user
或者:
Sp_dboption
'无日志文件的数据库名称',
'single
user',
'false'
刷新数据库,你就可以看到已经修复好的数据库了。
以上就是为大家分享的SQL恢复数据库方法,希望对大家恢复数据库有所帮助。
D. Oracle sql语法
参考网上资料,整理Oracle sql语法:
DDL:
1、创建表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
create table tab_new as select col1,col2… from tab_old
2、删除表
drop table tabname
3、重命名表
说明:alter table 表名 rename to 新表名
eg:alter table tablename rename to newtablename
4、增加字段
说明:alter table 表名 add (字段名 字段类型 默认值 是否为空);
例:alter table tablename add (ID int);
eg:alter table tablename add (ID varchar2(30) default '空' not null);
5、修改字段
说明:alter table 表名 modify (字段名 字段类型 默认值 是否为空);
eg:alter table tablename modify (ID number(4));
6、重名字段
说明:alter table 表名 rename column 列名 to 新列名 (其中:column是关键字)
eg:alter table tablename rename column ID to newID;
7、删除字段
说明:alter table 表名 drop column 字段名;
eg:alter table tablename drop column ID;
8、添加主键
alter table tabname add primary key(col)
9、删除主键
alter table tabname drop primary key(col)
10、创建索引
create [unique] index idxname on tabname(col….)
11、删除索引
drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
12、创建视图
create view viewname as select 语句
13、删除视图
drop view viewname
14. 创建表空间
create tablespace schooltbs datafile ‘D:\oracle\datasource\schooltbs.dbf’ size 1000M autoextend on;
15. 删除表空间
drop tablespace schooltbs[including contents and datafiles];
注:查询表空间和表空间存储路径
SELECT * FROM dba_data_files WHERE tablespace_name = 表空间名;
DML:
1、数据查询
select <列名> from <表名> [where <查询条件表达试>] [order by <排序的列名>[asc或desc]]
2、插入数据
insert into 表名 values(所有列的值);
insert into test values(1,'zhangsan',20);
insert into 表名(列) values(对应的值);
insert into test(id,name) values(2,'lisi');
3、更新数据
update 表 set 列=新的值 [where 条件] -->更新满足条件的记录
update test set name='zhangsan2' where name='zhangsan'
update 表 set 列=新的值 -->更新所有的数据
update test set age =20;
4、删除数据
delete from 表名 where 条件 -->删除满足条件的记录
delete from test where id = 1;
delete from test -->删除所有
commit; -->提交数据
rollback; -->回滚数据
delete方式可以恢复删除的数据,但是提交了,就没办法了 delete删除的时候,会记录日志 -->删除会很慢很慢
truncate table 表名
删除所有数据,不会影响表结构,不会记录日志,数据不能恢复 -->删除很快
drop table 表名
删除所有数据,包括表结构一并删除,不会记录日志,数据不能恢复-->删除很快
5、数据复制
表数据复制
insert into table1 (select * from table2);
复制表结构
create table table1 select * from table2 where 1>1;
复制表结构和数据
create table table1 select * from table2;
复制指定字段
create table table1 as select id, name from table2 where 1>1;
E. SQL语法范例大全的目 录
第1篇 SQL及关系数据库概述
第1章 关系数据库概述 2
1.1 数据库的基本概念 3
1.1.1 数据库的发展 3
1.1.2 数据库系统组成 3
1.1.3 数据处理的抽象描述 3
1.1.4 数据模型 4
1.2 关系数据库基本概念 4
1.2.1 关系模式 4
1.2.2 关系模型的特点及组成 5
1.2.3 关系数据语言的种类 6
1.2.4 域 7
1.2.5 笛卡儿积 7
1.2.6 关系 8
1.2.7 全关系系统十二准则 9
1.2.8 规范化(NF范式) 9
1.3 关系数据库类型 10
1.3.1 桌面数据库 10
1.3.2 网络数据库 10
1.4 常用关系数据库介绍 10
1.4.1 Microsoft Access 11
1.4.2 FoxPro 11
1.4.3 MySQL 11
1.4.4 Firebird 12
1.4.5 PostgreSQL 13
1.4.6 Informix 14
1.4.7 DB2 14
1.4.8 Sybase 15
1.4.9 SQL Server 17
1.4.10 Oracle 22
1.5 小结 29
第2章 SQL概述 30
2.1 SQL的功能和特性 31
2.2 SQL语法分类 32
2.3 SQL标准与版本 32
2.3.1 SQL92标准 33
2.3.2 SQL99标准 33
2.3.3 SQL:2003标准 34
2.4 SQL表达式 34
2.5 SQL标识符 34
2.5.1 特殊字符(语法约定) 34
2.5.2 注释字符 35
2.6 SQL常量 35
2.7 SQL变量 37
2.8 SQL数据类型 37
2.8.1 数值型数据 37
2.8.2 字符型数据 38
2.8.3 日期数据类型 38
2.8.4 其他数据类型 39
2.9 SQL语句 40
2.9.1 SQL语句分类 40
2.9.2 SELECT查询语句 41
2.10 SQL语句的执行方法 42
2.11 SQL与关系数据库 42
2.12 SQL的发展 42
2.13 小结 42
第3章 SQL扩展、工具及范例数据库介绍 44
3.1 T-SQL 46
3.1.1 注释语句 46
3.1.2 常量 46
3.1.3 变量 46
3.1.4 运算符 47
3.1.5 数据类型 48
3.1.6 函数 49
3.1.7 流程控制语句 49
3.2 PL/SQL 50
3.2.1 注释语句 50
3.2.2 数据类型 51
3.2.3 SQL92、T-SQL、PL/SQL数据
类型比较 51
3.2.4 运算符 52
3.2.5 函数 52
3.2.6 PL/SQL与T-SQL函数比较 53
3.2.7 常量和变量 53
3.2.8 流程控制语句 54
3.3 SQLCMD工具 55
3.4 SQL Server查询分析工具 57
3.5 Oracle企业管理器EM工具 58
3.6 Oracle SQL * Plus工具 60
3.6.1 SQL*Plus的主要功能 60
3.6.2 SQL*Plus启动和快速登录
方法 61
3.6.3 SQL*Plus常用命令操作 62
3.6.4 iSQL * Plus 70
3.7 PL/SQL Developer工具 72
3.7.1 主要功能特性 72
3.7.2 软件资源 74
3.7.3 基本用法 74
3.8 TOAD工具 76
3.8.1 主要功能特性 76
3.8.2 软件资源 77
3.8.3 基本用法 77
3.9 范例数据库介绍 80
3.9.1 SQL Server学籍管理数据库 80
3.9.2 SQL Server系统示例库 84
3.9.3 Oracle系统示例库 84
3.10 本章小结 90
第2篇 SQL运算符和函数
第4章 SQL运算符 92
4.1 算术运算符 94
4.2 赋值运算符 94
4.3 字符串串联运算符 94
4.3.1 加号“+” 94
4.3.2 双竖号“||” 94
4.4 一元运算符 94
4.5 逻辑运算符 95
4.6 比较运算符 95
4.7 集合运算符 96
4.7.1 UNION运算符 96
4.7.2 EXCEPT运算符 96
4.7.3 INTERSECT运算符 97
4.8 运算符优先级 97
4.9 SQL92、SQL Server和Oracle运算符
比较 97
4.10 小结 99
第5章 函数 100
5.1 数值函数 102
5.2 字符串函数 103
5.3 日期时间函数 104
5.4 数据类型转换函数 106
5.4.1 CAST ()函数 106
5.4.2 CONVERT () 函数 107
5.5 统计函数 109
5.5.1 SUM ()求和 110
5.5.2 COUNT ()计数 110
5.5.3 MAX () /MIN ()求最大/
最小值 111
5.5.4 AVG ()求均值 112
5.5.5 VAR () /VARP () 求方差 113
5.5.6 STDEV () /STDEVP ()求标准
误差 113
5.5.7 使用DISTINCT关键字进行
重值筛选 114
5.6 小结 114
第3篇 数据查询操作
第6章 简单查询 116
6.1 用SELECT子句选择列表 118
6.1.1 选择列 119
6.1.2 更改列标题 119
6.1.3 使用TOP限制选择行数 120
6.1.4 DISTINCT去掉重复的字段
数据 121
6.1.5 DISTINCTROW去掉重复的
记录数据 122
6.2 FROM子句 122
6.2.1 对具有相同列名的两个表
进行查询 123
6.2.2 从查询结果集合中查询数据 123
6.3 WHERE子句 123
6.3.1 使用比较运算符指定查询
条件 124
6.3.2 使用逻辑运算符指定查询
条件 124
6.3.3 使用范围BETWEEN指定
查询条件 125
6.3.4 使用列表IN指定查询条件 125
6.3.5 使用LIKE与通配符指定查询
条件 125
6.3.6 NULL空值的判断 126
6.3.7 使用包含判断词EXISTS、
ALL、ANY、SOME 126
6.4 GROUP BY子句 130
6.4.1 一般情况的分组查询 131
6.4.2 GROUP BY子句根据多列组
合行 132
6.4.3 CUBE和ROLLUP运算符及
使用 132
6.4.4 GROUP BY子句中的NULL
值处理 133
6.5 HAVING子句 134
6.5.1 HAVING子句的一般应用 134
6.5.2 HAVING与WHERE子句的
区别 135
6.5.3 HAVING子句单独使用 136
6.5.4 HAVING子句与CASE语句
结合使用 137
6.6 ORDER BY子句 137
6.6.1 ORDER BY子句的使用 137
6.6.2 ORDER BY子句的约束 139
6.7 小结 139
第7章 连接查询 141
7.1 连接概述 143
7.1.1 连接范围 143
7.1.2 连接类型 143
7.1.3 笛卡儿积 143
7.1.4 连接语法 144
7.1.5 连接运算符 144
7.2 自(身)连接 144
7.3 内连接(INNER JOIN) 145
7.3.1 等值连接 145
7.3.2 不等连接 146
7.3.3 自然连接 147
7.4 外连接 148
7.4.1 左外连接(LEFT JOIN) 148
7.4.2 右外连接(RIGHT JOIN) 149
7.4.3 全外连接(FULL JOIN) 150
7.5 交叉连接(CROSS JOIN) 151
7.6 小结 151
第8章 集合查询 153
8.1 集合概念 155
8.2 集合性质 155
8.3 集合运算 155
8.4 UNION运算符 156
8.4.1 使用UNION进行表内查询 156
8.4.2 使用UNION进行多表查询 157
8.4.3 使用UNION JOIN连接查询 158
8.5 INTERSECT运算符 159
8.6 EXCEPT运算符 159
8.7 小结 160
第9章 子查询 161
9.1 概述 163
9.1.1 子查询定义 163
9.1.2 子查询语法 163
9.1.3 子查询的两种基本形式 164
9.1.4 子查询的优点 165
9.1.5 子查询分类 165
9.1.6 子查询中的比较运算符与谓词 165
9.1.7 使用子查询的规则 168
9.2 单行子查询 169
9.3 多行子查询 170
9.3.1 在多行子查询中使用IN比较符 170
9.3.2 在多行子查询中使用ALL、SOME、ANY比较符 171
9.4 多列子查询 172
9.5 相关子查询 173
9.5.1 使用单行比较运算符引入相关子查询 174
9.5.2 使用IN引入相关子查询 174
9.5.3 在子查询中使用[NOT] EXISTS 175
9.6 在各类SQL语句中使用子查询 177
9.6.1 在SELECT子句中使用子查询 177
9.6.2 在FROM子句中使用子查询 177
9.6.3 在WHERE子句中使用子查询 177
9.6.4 在GROUP BY子句中使用子查询 178
9.6.5 在HAVING子句中使用子查询 178
9.6.6 在CREATE TABLE语句中使用子查询 178
9.6.7 在CREATE VIEW语句中使用子查询 179
9.6.8 在INSERT INTO子句中使用子查询 180
9.6.9 在UPDATE语句中使用子查询 181
9.6.10 在DELETE语句中使用子查询 182
9.6.11 使用WITH子句重用子查询 182
9.7 树查询 183
9.8 小结 184
第4篇 数据更新操作
第10章 数据库操作 186
10.1 创建数据库 188
10.2 查看数据库信息 193
10.3 更改数据库 193
10.3.1 更改数据库名称 195
10.3.2 修改数据库文件 195
10.3.3 更改数据库属性 200
10.4 删除数据库 201
10.5 小结 201
第11章 方案操作 202
11.1 方案概述 204
11.2 查找方案 204
11.3 创建方案 204
11.4 更改方案 206
11.5 删除方案 206
11.6 小结 207
第12章 数据表操作 208
12.1 创建表 210
12.2 复制表 211
12.3 修改表结构 212
12.3.1 增加列和约束 212
12.3.2 查找列约束 214
12.3.3 修改列和约束 214
12.3.4 删除列和约束 215
12.4 行记录操作 215
12.4.1 插入记录 215
12.4.2 修改记录 218
12.4.3 删除记录(DELETE) 223
12.4.4 删除记录(TRUNCATE) 225
12.5 重命名表 226
12.6 删除表 226
12.7 MERGE语句 226
12.8 小结 228
第13章 索引操作 229
13.1 索引的分类 231
13.1.1 索引的概念 231
13.1.2 索引分类 231
13.2 索引使用的场所 232
13.3 查看索引 233
13.4 创建索引 234
13.4.1 创建索引的方法 234
13.4.2 CREATE INDEX语法 234
13.4.3 创建聚簇索引 236
13.4.4 创建非聚簇索引 236
13.4.5 创建简单列索引 236
13.4.6 创建组合列索引 237
13.4.7 创建普通索引 238
13.4.8 创建唯一索引 238
13.4.9 创建视图索引 241
13.5 修改索引 242
13.6 禁用/启用索引 245
13.7 删除索引 245
13.8 小结 246
第14章 视图操作 248
14.1 查询视图 250
14.2 创建视图 251
14.3 修改视图 255
14.4 删除视图 256
14.5 小结 257
第15章 序列操作 258
15.1 创建序列 260
15.2 查找序列值 260
15.3 使用序列 261
15.4 修改序列 261
15.5 删除序列 262
15.6 小结 262
第5篇 数据安全管理
第16章 完整性约束 264
16.1 数据库的安全性 266
16.2 完整性约束分类 267
16.3 表约束 268
16.3.1 DEFAULT约束 268
16.3.2 NOT NULL约束 269
16.3.3 CHECK约束 269
16.3.4 UNIQUE约束 270
16.3.5 PRIMARY KEY约束 270
16.3.6 FOREIGN KEY约束 271
16.3.7 FOREIGN KEY的MATCH
约束 272
16.4 域约束 273
16.5 断言 273
16.6 禁止与启用约束 274
16.7 查看约束 275
16.8 删除约束DROP 275
16.9 小结 275
第17章 用户管理 277
17.1 查找用户及相关信息 279
17.2 创建用户 282
17.3 修改用户 285
17.4 删除用户 286
17.5 小结 286
第18章 角色管理 288
18.1 角色的概念 290
18.2 查找角色 290
18.3 创建角色 293
18.4 更改角色 295
18.5 删除角色 295
18.6 小结 295
第19章 权限管理 297
19.1 权限分类 299
19.2 查看权限 299
19.3 授予权限 303
19.3.1 授予ALL权限 304
19.3.2 授予SELECT权限 304
19.3.3 授予CREATE权限 304
19.3.4 授予INSERT权限 305
19.3.5 授予UPDATE列权限 305
19.3.6 授予ALTER权限 305
19.3.7 授予EXECUTE权限 306
19.3.8 授予REFERENCES权限 306
19.3.9 授予DELETE权限 306
19.3.10 授予DROP权限 306
19.3.11 授予用户角色的权限 307
19.4 收回权限 308
19.5 小结 309
第6篇 SQL编程
第20章 事务控制与并发处理 312
20.1 事务的基本概念 314
20.2 锁的基本概念和分类 314
20.3 事务的并发控制 318
20.3.1 并发控制方法 319
20.3.2 事务隔离级别 319
20.3.3 事务特性的设置 321
20.4 事务开始和终止 322
20.5 数据库读写访问操作 322
20.6 事务提交 322
20.7 事务回滚 323
20.8 SQL Server与Oracle事务处理的
比较 324
20.9 小结 324
第21章 存储过程 326
21.1 存储过程的概念 329
21.2 存储过程的优点 329
21.3 存储过程分类 329
21.4 SQL Server存储过程中的控制语句 330
21.4.1 注释语句 330
21.4.2 屏幕输出语句 330
21.4.3 变量定义和使用语句 330
21.4.4 块语句 331
21.4.5 判断语句 331
21.4.6 循环语句 332
21.4.7 转向定位语句 333
21.4.8 定时执行语句 333
21.4.9 错误捕获语句 333
21.5 Oracle存储过程中的控制语句 333
21.5.1 注释语句 334
21.5.2 屏幕输出语句 334
21.5.3 变量和常量的定义和使用 334
21.5.4 块语句BEGIN…END 337
21.5.5 判断语句IF、CASE 338
21.5.6 循环语句 340
21.5.7 转向定位语句 342
21.5.8 定时执行作业任务dbms_job 342
21.5.9 错误捕获语句 346
21.6 存储过程的创建 346
21.6.1 创建存储过程的语法 346
21.6.2 创建无参数的存储过程 347
21.6.3 创建有参数的存储过程 347
21.7 存储过程的调用与执行 349
21.7.1 RETURN语句及返回值 350
21.7.2 存储过程的创建和调用步骤 351
21.7.3 存储过程调用方法和步骤 352
21.7.4 调用无参数的过程 352
21.7.5 调用有参数的过程 352
21.8 存储过程的查看 354
21.8.1 查看SQL Server存储过程 354
21.8.2 查看Oracle存储过程 356
21.9 存储过程的修改和重编译 359
21.9.1 修改存储过程 360
21.9.2 重命名存储过程 360
21.9.3 存储过程的重编译 361
21.10 存储过程的删除 364
21.11 SQL Server中几个重要的存储
过程介绍 365
21.11.1 sp_attach_db 366
21.11.2 sp_attach_single_file_db 366
21.11.3 sp_changedbowner 367
21.11.4 sp_changeobjectowner 367
21.11.5 sp_configure 368
21.11.6 xp_cmdshell 370
21.11.7 sp_spaceused 373
21.11.8 sp_msforeachtable 374
21.12 存储过程应用实例 374
21.12.1 用存储过程实现数据表更新
操作 374
21.12.2 用存储过程实现数据备份与
恢复 376
21.13 小结 377
第22章 存储函数 379
22.1 存储函数和存储过程的区别 381
22.2 存储函数的类型和约定 381
22.3 存储函数的创建和调用 383
22.3.1 存储函数创建语法 385
22.3.2 存储函数调用类型、方法和
语法 387
22.3.3 SQL Server存储函数的创建
和调用 387
22.3.4 Oracle存储函数的创建和
调用 390
22.4 存储函数的更改 396
22.5 存储函数的编译 397
22.6 存储函数信息的查看 397
22.6.1 查看SQL Server存储函数 398
22.6.2 查看Oracle存储函数 399
22.7 存储函数的删除 401
22.8 小结 402
第23章 触发器 404
23.1 触发器概述 406
23.1.1 触发器的基本概念 406
23.1.2 触发器的用途和优势 407
23.1.3 触发器的类型 408
23.1.4 触发器中的两个临时表 409
23.2 创建SQL Server触发器 409
23.2.1 创建DML触发器 410
23.2.2 创建DDL触发器 420
23.2.3 创建INSTEAD OF触发器 423
23.2.4 创建嵌套触发器 426
23.2.5 创建递归触发器 428
23.3 创建Oracle触发器 430
23.3.1 触发谓词的使用 431
23.3.2 创建DML语句触发器 432
23.3.3 创建DML行触发器 435
23.3.4 创建DDL触发器 438
23.3.5 创建INSTERD OF触发器 439
23.3.6 创建事件触发器 441
23.4 更改触发器 444
23.5 重新编译Oracle触发器 446
23.6 禁止和启用触发器 446
23.7 查看触发器信息 447
23.7.1 查看SQL Server触发器 447
23.7.2 查看Oracle触发器 449
23.8 删除触发器 451
23.9 本章小结 453
第24章 游标 455
24.1 游标的基本概念 457
24.1.1 游标的基本原理 457
24.1.2 游标的内容构成 457
24.1.3 游标的类型 457
24.1.4 游标变量 461
24.2 游标操作 462
24.2.1 申明游标 462
24.2.2 打开游标 463
24.2.3 读取数据 464
24.2.4 关闭游标CLOSE 469
24.2.5 删除游标 469
24.3 查看游标 470
24.3.1 查看SQL Server游标 470
24.3.2 查看Oracle游标 475
24.4 游标循环 476
24.5 参数游标 478
24.6 游标嵌套 479
24.7 游标应用 479
24.8 小结 483
第25章 错误和异常处理 486
25.1 错误和异常分类 488
25.2 SQL Server错误和异常处理 488
25.2.1 错误信息及存储 488
25.2.2 错误捕获方法 488
25.3 Oracle错误和异常处理 492
25.3.1 异常处理方法 492
25.3.2 异常处理语法 492
25.3.3 预定义异常处理 493
25.3.4 非预定义异常处理 494
25.3.5 自定义异常处理 495
25.4 小结 496
第7篇 SQL在数据库开发和
管理中的应用
第26章 嵌入式SQL 498
26.1 ESQL基本概念 500
26.2 SQL的使用方法 500
26.3 ESQL语句和宿主语言之间的通信
方法 502
26.3.1 使用SQL通信区通信 503
26.3.2 使用主变量通信 503
26.3.3 使用游标通信 506
26.4 ESQL的编译处理过程 507
26.5 使用WHENEVER语句简化错误
处理 507
26.6 在高级语言中嵌入SQL 509
26.6.1 ESQL的语法格式 509
26.6.2 在Visual C++下执行ESQL
语句 509
26.6.3 在Visual C#中执行嵌入式
T-SQL语句 511
26.7 在数据库管理系统中嵌入SQL 513
26.7.1 ESQL语句与T-SQL和
PL/SQL语句的比较 513
26.7.2 在SQL Server中使用嵌入式
SQL 514
26.7.3 在Oracle中嵌入SQL 517
26.8 动态SQL技术 524
26.8.1 动态SQL的基本概念 524
26.8.2 SQL Server动态SQL语句的处理 525
26.8.3 Oracle动态SQL语句的处理 527
26.9 小结 532
第27章 数据库的存取访问技术 534
27.1 数据库系统的开发环境 536
27.2 应用系统的典型结构 536
27.3 开发平台和工具 538
27.3.1 Power Builder 538
27.3.2 Delphi 539
27.3.3 Oracle Developer Suite 539
27.3.4 .NET 540
27.3.5 J2EE 542
27.3.6 .NET和J2EE比较 543
27.4 数据库的连接访问技术 543
27.4.1 OLE DB 543
27.4.2 ODBC 545
27.4.3 JDBC 547
27.4.4 ADO 549
27.4.5 ADO.NET 556
27.4.6 Recordset对象方法的使用 561
27.5 ASP/ASP.NET与数据库的连接和访问 562
27.5.1 ASP/ASP.NET与Text 563
27.5.2 ASP/ASP.NET与Excel 563
27.5.3 ASP/ASP.NET与Access 564
27.5.4 ASP/ASP.NET与SQLServer 564
27.5.5 ASP/ASP.NET与Oracle 565
27.6 VB.NET与数据库的连接和访问 566
27.6.1 VB.NET与Text 566
27.6.2 VB.NET与Excel 566
27.6.3 VB.NET与Access 567
27.6.4 VB.NET与SQL Server 568
27.6.5 VB.NET与Oracle 568
27.7 VC#.NET与数据库的连接和访问 569
27.7.1 VC#.NET与Excel 569
27.7.2 VC#.NET与Access 570
27.7.3 VC#.NET与SQL Server 571
27.7.4 VC#.NET与Oracle 572
27.8 小结 572
第28章 用SQL管理SQL Server数据库 573
28.1 操作系统管理 576
28.1.1 查看服务器属性和操作系统参数 576
28.1.2 查看磁盘目录和文件信息 577
28.1.3 查看存储介质与磁盘分区信息 578
28.1.4 查看服务器提供的服务组件与程序 579
28.2 DBMS管理 579
28.2.1 查看数据库服务属性 579
28.2.2 查看数据库系统版本及配置参数 580
28.2.3 查看和修改数据库属性 580
28.2.4 查看数据库文件和文件组属性 582
28.2.5 查看当前数据库重要的数据对象 582
28.2.6 查看数据库日志 583
28.3 用户对象、权限与安全管理 584
28.3.1 查看数据库角色 584
28.3.2 查看和管理数据库用户 585
28.3.3 查看有关权限 586
28.3.4 查看和管理用户的数据对象 587
28.3.5 查看和管理进程 590
28.3.6 查看数据库锁 591
28.3.7 数据库备份和恢复 593
28.4 小结 597
第29章 用SQL管理Oracle数据库 599
29.1 系统管理 606
29.1.1 查看数据库系统属性 606
29.1.2 查看所有数据库对象的属性 607
29.1.3 查看和修改当前数据库的字符集 608
29.1.4 查看数据库文件的属性 609
29.1.5 查看和设置数据库归档信息 609
29.1.6 查看数据库的数据字典 611
29.1.7 查看数据库的后台进程 612
29.1.8 查看和修改系统的当前时间 612
29.1.9 查看SCN和MTS 613
29.2 连接、会话与进程管理 614
29.2.1 查看数据库的并发连接会话数 614
29.2.2 查看客户端连接会话信息 614
29.2.3 查看会话进程及客户端信息 617
29.3 表空间和数据文件管理 619
29.3.1 查看表空间信息 619
29.3.2 查看表空间的数据文件和容量统计信息 620
29.3.3 查看数据对象所占用的表空间信息 622
29.3.4 查看表空间的碎片 623
29.3.5 查看数据文件信息 624
29.3.6 查看日志组信息 625
29.3.7 查看竞争与等待信息 626
29.3.8 查看TRACE脚本文件 628
29.4 回滚段管理 628
29.4.1 查看回滚段的属性 628
29.4.2 查看用户与会话正在使用的回滚段 631
29.5 数据表管理 631
29.5.1 查看数据表的基本属性 631
29.5.2 查看表的存储信息 632
29.5.3 查看表的约束与关联信息 634
29.5.4 表记录管理 636
29.6 索引管理 637
29.6.1 查看索引属性 637
29.6.2 查看用户的索引信息 637
29.6.3 查看索引的存储属性 638
29.6.4 对字段进行全文检索 638
29.7 存储过程、存储函数和触发器管理 639
29.7.1 查看存储过程和函数的状态信息 639
29.7.2 查看触发器、过程、函数的创建脚本 639
29.8 查看运行的SQL语句 640
29.8.1 查看进程所对应的SQL语句 640
29.8.2 查看用户正在运行的SQL语句 642
29.8.3 查看Disk Read最高的SQL语句 642
29.8.4 查看回滚段里正在运行的SQL语句 643
29.8.5 查看视图对应的SQL语句 643
29.8.6 查看SQL语句的执行情况 643
29.9 角色、用户与安全管理 643
29.9.1 查看数据库角色信息 644
29.9.2 查看数据库用户信息 644
29.9.3 查看用户对象和类型 646
29.9.4 查看有关授权信息 649
29.9.5 查看数据备份和恢复信息 650
29.10 锁管理 651
29.10.1 查看锁 651
29.10.2 查看被锁的进程及锁类型信息 654
29.10.3 查看被锁定的数据库对象 655
29.10.4 查看锁定对象的客户端信息 656
29.10.5 解锁操作 656
29.11 参数调整与性能优化 657
29.11.1 查看数据库服务器参数 658
29.11.2 查看客户端参数 659
29.11.3 查看会话环境参数 659
29.11.4 查看inin.ora参数 659
29.11.5 查看NLS参数 659
29.11.6 查看SGA 660
29.11.7 查看PGA 670
29.11.8 查看排序区 670
29.11.9 查看Large Pool 671
29.11.10 查看Java语言区 671
29.11.11 查看UGA区 671
29.11.12 查看CPU资源 671
29.11.13 查看I/O资源的使用情况 672
29.11.14 查看等待与竞争 673
29.11.15 SQL语句优化 676
29.12 小结 678
第8篇 附录
附录A SQL常用语句分类索引 680
附录B SQL、SQL Server、Oracle常用函数分类对照索引 683
附录C SQL Server常用系统表和系统存储过程索引 689
附录D Oracle数据库常用视图索引 696
附录E Oracle数据库系统环境变量参数 700
F. 在oracle下我们如何正确的执行数据库恢复
单击开始,这里输入cmd,打开dos窗口
输入命令
exp bms/BMSPASS@TCDB file=E:\DBback\dbback20160112.dmp
这里说明一下
这里的bms是指备份时,登录数据库实例TCDB的用户名;
这里的/是语法符号。
这里的BMSPASS是用户bms登录数据库TCDB时的密码;
@是语法符号。
这里的TCDB是Oracle数据库的实例名。
这里的file=E:\DBback\dbback20160112.dmp 是只指备份文件的存放路径。
等待导出完成,如果看到这里的导出成功,说明备份完成了。
打开备份时指定的存储路径,就可以看到备份文件了。
如果在导出命令的最后加上full=y的参数,也就是
exp bms/BMSPASS@TCDB file=E:\DBback\dbback20160112.dmp full=y意思是将用户bms在TCDB数据库实例中的所有文件都备份,也就是完整备份。
数据库还原使用语法
imp bms/BMSPASS@TCDB file=E:\DBback\dbback20160112.dmp这里的E:\DBback\dbback20160112.dmp是备份文件的存放路径
G. shifenzheng.bak用SQL2012还原成功到数据库后,怎么查看到里面的内容呢,是要用SQL语法还是怎么办
1、首先连接上数据库,右键数据库,选择新建数据库,输入要还原数据库的名称。
H. SQl语法求高人指点
你的这个 a 是什么? 条件吗? 如果是的话这么写
delete from table where a=' '
连接查询
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在
一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带
来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于
将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。
SQL-92标准所定义的FROM子句的连接语法格式为:
FROM join_table join_type join_table
[ON (join_condition)]
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一
个表操作的连接又称做自连接。
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比
较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用
的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)
和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹
配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的
数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑
运算符等构成。
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接
连接。例如:
SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)
(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接
表中的所有列,包括其中的重复列。
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些
运算符包括>、>=、<=、<、!>、!<和<>。
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询
结果集合中所包括的列,并删除连接表中的重复列。
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.cityQQ291911320
(二)外连接
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件
的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外
连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。
如下面使用左外连接将论坛内容和作者信息连接起来:
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
----------------------------------------------------------------------------------
三)交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等
于6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:
select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]
其中selectstatement为待联合的SELECT查询语句。
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一
行。
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:
查询1 UNION (查询2 UNION 查询3)
INSERT语句
用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:
INSERT INTO EMPLOYEES valueS
(\'Smith\',\'John\',\'1980-06-10\',
\'Los Angles\',16,45000);
通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。
我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。
如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。
回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。
同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。
对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,2000年临近,请你最好还是使用四位来表示年份。
既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:
INSERT INTO EMPLOYEES valueS
(\'Bunyan\',\'Paul\',\'1970-07-04\', \'Boston\',12,70000);
INSERT INTO EMPLOYEES valueS
(\'John\',\'Adams\',\'1992-01-21\',
\'Boston\',20,100000);
INSERT INTO EMPLOYEES valueS
(\'Smith\',\'Pocahontas\',\'1976-04-06\',
\'Los Angles\',12,100000);
INSERT INTO EMPLOYEES valueS
(\'Smith\',\'Bessie\',\'1940-05-02\',
\'Boston\',5,200000);
INSERT INTO EMPLOYEES valueS
(\'Jones\',\'Davy\',\'1970-10-10\', \'Boston\',8,45000);
INSERT INTO EMPLOYEES valueS
(\'Jones\',\'Indiana\',\'1992-02-01\',
\'Chicago\',NULL,NULL);
在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号)。NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。
有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:
INSERT INTO EMPLOYEES(
FIRST_NAME, LAST_NAME,
HIRE_DATE, BRANCH_OFFICE)
value(
\'Indiana\',\'Jones\',
\'1992-02-01\',\'Indianapolis\');
这样,我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL操作将失败。
让我们来看一看上述INSERT语句的语法图:
INSERT INTO table
[(column { ,column})]
valueS
(columnvalue [{,columnvalue}]);
和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。value子句和可选的列名列表中必须使用圆括号。
SELECT语句
SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。
SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。在直接SQL(direct SQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。也可以结合其他SQL语句来将结果放到一个已知名称的表中。
SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算-“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。
SELECT语句最简单的语法如下:
SELECT columns FROM tables;
当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。
让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果)。
假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询:
SELECT BRANCH_OFFICE FROM EMPLOYEES;
以上SELECT语句的执行将产生如图2中表2所示的结果。
由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一个列。注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:
SELECT DISTINCT BRANCH_OFFICE
FROM EMPLOYEES;
这次查询的结果如表3所示。
现在已经消除了重复的行,但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDER BY子句就可以按照升序或降序来排列结果:
SELECT DISTINCT BRANCH_OFFICE
FROM EMPLOYEES
ORDER BY BRANCH_OFFICE ASC;
这一查询的结果如表4所示。请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的,这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列,那么可以用关键字DESC。
同样我们应该指出ORDER BY子句只将临时表中的结果进行排序;并不影响原来的表。
假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要用到的语句:
SELECT BRANCH_OFFICE,FIRST_NAME,
LAST_NAME,SALARY,HIRE_DATE
FROM EMPLOYEES
ORDER BY SALARY DESC,
HIRE_DATE DESC;
这里我们进行了多列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序……如此类推。这次查询的结果如表5所示。
将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:
SELECT * FROM EMPLOYEES;
这次查询返回整个EMPLOYEES表,如表1所示。
下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。):
SELECT [DISTINCT]
(column [{, columns}])| *
FROM table [ {, table}]
[ORDER BY column [ASC] | DESC
[ {, column [ASC] | DESC }]];
定义选择标准
在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:
SELECT columns FROM tables [WHERE predicates];
WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = \'Jones\';
LAST_NAME = \'Jones\'部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。
使用最多的六种比较
我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = \'Jones\'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:
等于 =
不等于 <>
小于 <
大于 >
小于或等于 <=
大于或等于 >=
下面给出了不是基于等值比较的一个例子:
SELECT * FROM EMPLOYEESWHERE SALARY > 50000;
这一查询将返回年薪高于$50,000.00的职员(参见表7)。
逻辑连接符
有时我们需要定义一条不止一种断言的SELECT语句。举例来说,如果你仅仅想查看Davy Jones的信息的话,表6中的结果将是不正确的。为了进一步定义一个WHERE子句,用户可以使用逻辑连接符AND,OR和NOT。为了只得到职员Davy Jones的记录,用户可以输入如下语句:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = \'Jones\' AND FIRST_NAME = \'Davy\';
在本例中,我们通过逻辑连接符AND将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个SELECT语句来使得当其中任何一项成立就满足条件时,可以使用OR连接符:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = \'Jones\' OR LAST_NAME = \'Smith\';
有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了Boston办事处的职员以外的其他所有职员的信息时,你可以进行如下的查询:
SELECT * FROM EMPLOYEES
WHERE NOT(BRANCH_OFFICE = \'Boston\');
关键字NOT后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在Boston,括号内的表达式返回true,但是NOT操作符将该值取反,所以该行将不被选中。
断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值,可以用括号将它们括起来:
SELECT * FROM EMPLOYEES
WHERE (LAST_NAME = \'Jones\'
AND FIRST_NAME = \'Indiana\')
OR (LAST_NAME = \'Smith\'
AND FIRST_NAME = \'Bessie\');
SQL沿用数学上标准的表达式求值的约定-圆括号内的表达式将最先进行求值,其他表达式将从左到右进行求值。
zxcvbnm12pk希望对您有帮助,望采纳!
I. SQL执行命全部恢复令式时 显示第一行xp_cmdshell附近有语法错误,
建议你使用其他方法再试,此类情况可能真的不行了。
J. SQL的语法 详细 介绍
SELECT 子句
指定由查询返回的列。
语法
SELECT [ ALL | DISTINCT ]
[ TOP n [ PERCENT ] [ WITH TIES ] ]
< select_list >
< select_list > ::=
{ *
| { table_name | view_name | table_alias }.*
| { column_name | expression | IDENTITYCOL | ROWGUIDCOL }
[ [ AS ] column_alias ]
| column_alias = expression
} [ ,...n ]
参数
ALL
指定在结果集中可以显示重复行。ALL 是默认设置。
DISTINCT
指定在结果集中只能显示唯一行。为了 DISTINCT 关键字的用途,空值被认为相等。
TOP n [PERCENT]
指定只从查询结果集中输出前 n 行。n 是介于 0 和 4294967295 之间的整数。如果还指定了 PERCENT,则只从结果集中输出前百分之 n 行。当指定时带 PERCENT 时,n 必须是介于 0 和 100 之间的整数。
如果查询包含 ORDER BY 子句,将输出由 ORDER BY 子句排序的前 n 行(或前百分之 n 行)。如果查询没有 ORDER BY 子句,行的顺序将任意。
WITH TIES
指定从基本结果集中返回附加的行,这些行包含与出现在 TOP n (PERCENT) 行最后的 ORDER BY 列中的值相同的值。如果指定了 ORDER BY 子句,则只能指定 TOP ...WITH TIES。
< select_list >
为结果集选择的列。选择列表是以逗号分隔的一系列表达式。
*
指定在 FROM 子句内返回所有表和视图内的所有列。列按 FROM 子句所指定的由表或视图返回,并按它们在表或视图中的顺序返回。
table_name | view_name | table_alias.*
将 * 的作用域限制为指定的表或视图。
column_name
是要返回的列名。限定 column_name 以避免二义性引用,当 FROM 子句中的两个表内有包含重复名的列时会出现这种情况。例如,Northwind 数据库中的 Customers 和 Orders 表内都有名为 ColumnID 的列。如果在查询中联接这两个表,可以在选择列表中将客户 ID 指定为 Customers.CustomerID。
expression
是列名、常量、函数以及由运算符连接的列名、常量和函数的任意组合,或者是子查询。
IDENTITYCOL
返回标识列。有关更多信息,请参见 IDENTITY(属性)、ALTER TABLE 和 CREATE TABLE。
如果 FROM 子句中的多个表内有包含 IDENTITY 属性的列,则必须用特定的表名(如 T1.IDENTITYCOL)限定 IDENTITYCOL。
ROWGUIDCOL
返回行全局唯一标识列。
如果在 FROM 子句中有多个表具有 ROWGUIDCOL 属性,则必须用特定的表名(如 T1.ROWGUIDCOL)限定 ROWGUIDCOL。
column_alias
是查询结果集内替换列名的可选名。例如,可以为名为 quantity 的列指定别名,如"Quantity"或"Quantity to Date"或"Qty"。
别名还可用于为表达式结果指定名称,例如:
USE Northwind
SELECT AVG(UnitPrice) AS 'Average Price'
FROM [Order Details]
column_alias 可用于 ORDER BY 子句。然而,不能用于 WHERE、GROUP BY 或 HAVING 子句。如果查询表达式是 DECLARE CURSOR 语句的一部分,则 column_alias 不能用在 FOR UPDATE 子句中。
INTO 子句
创建新表并将结果行从查询插入新表中。
用户若要执行带 INTO 子句的 SELECT 语句,必须在目的数据库内具有 CREATE TABLE 权限。SELECT...INTO 不能与 COMPUTE 子句一起使用。有关更多信息,请参见事务和显式事务。
通过在 WHERE 子句中包含 FALSE 条件,可以使用 SELECT...INTO 创建没有数据的相同表定义(不同表名)。
语法
[ INTO new_table ]
参数
new_table
根据选择列表中的列和 WHERE 子句选择的行,指定要创建的新表名。new_table 的格式通过对选择列表中的表达式进行取值来确定。new_table 中的列按选择列表指定的顺序创建。new_table 中的每列有与选择列表中的相应表达式相同的名称、数据类型和值。
当选择列表中包含计算列时,新表中的相应列不是计算列。新列中的值是在执行 SELECT...INTO 时计算出的。
在此次发布的 SQL Server 版本中,select into/bulk 数据库选项对是否可以使用 SELECT INTO 创建永久表没有影响。对包括 SELECT INTO 在内的某些大容量操作的记录量,取决于对数据库有效的恢复模式。有关更多信息,请参见使用恢复模型。
在以前发布的版本中,如果设置了 select into/bulk ,则可用 SELECT INTO 创建永久表。