2022年数据库语法大全 .pdf
1 演示对表中的数据进行读写管理的语法案例;1)插入: insert into 人员表 (工号, 姓名, 性别) values (gh007,周伯通 ,男) 2)修改: update 人员表 set 姓名= 欧阳锋 where 工号= gh001 3)删除: delete from 人员表 where 工号= gh007 4)查询: select * from 人员表 where 工号= gh0016.sql向表中增加一个“列”的语法;【语法】alter table table-name add column col type 【举例】alter table 人员表 add 年龄 nvarchar(10) null 【说明】增加的字段必须指定数据类型,如果是字符型的,必须指定长度。附:删除列的语法:alter table 人员表 drop column 性别附:修改某列的数据类型的语法:alter table 工资表 alter column 工号 varchar(100) 1.sql创建数据库的语法;【语法】create database database-name 【举例】create database my_rsgl (创建:人事管理库)【说明】本代码用于创建数据库,可在“企业管理器”中执行,也可以在“查询分析器”中执行,也可以在delphi等开发工具中执行。以下将要讲到的语法都有多种执行方式,下文不再复述。2.sql删除数据库的语法;【语法】drop database database-name 【举例】drop database my_rsgl (删除:人事管理库)【说明】删除数据库之前, 必须确认数据库是否真的要删除,如果数据库中还包含着重要的数据,删除之后就后悔莫及,所以不要随意操作这个命令。3.sql备份、恢复数据库的语法;a、怎样备份?【语法】backup database database-name to disk=路径【举例】名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 16 页 - - - - - - - - - 2 backup database my_rsgl to disk= f:back1.bak 【说明】备份数据库时,除指定有效的硬盘路径以外,注意还要取一个文件名。B、怎样恢复?【语法】use master restore database database-name from disk=路径 with replace 【举例】use master restore database my_rsgl from disk=f:back1.bak with replace 【说明】恢复数据库时,在后面加上:with replace ,是表示按“完全恢复”的方式进行恢复。4.sql创建表的语法;【语法】create table tabname(col1 type1 not null primary key,col2 type2 not null,.) 【举例】create table 人员表 ( 工号 nvarchar (50) collate chinese_prc_ci_as null,姓名 nvarchar (50) collate chinese_prc_ci_as null,性别 nvarchar (2) collate chinese_prc_ci_as null) on primary 【说明】代码中,表名、字段名和数据类型都要写在“ ”里面,如果字段的类型是字符型,都必须在“ () ”里面指定长度。5.sql删除表的语法;【语法】drop table table-name 【举例】drop table 人员表 (删除:人员表)【说明】删除表以及表中的全部数据,注意在sql server里面,删除表是真正的删除,不是伪删除。6.sql向表中增加一个“列”的语法;【语法】alter table table-name add column col type 【举例】alter table 人员表 add 年龄 nvarchar(10) null 【说明】增加的字段必须指定数据类型,如果是字符型的,必须指定长度。附:删除列的语法:alter table 人员表 drop column 性别附:修改某列的数据类型的语法:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 16 页 - - - - - - - - - 3 alter table 工资表 alter column 工号 varchar(100) 7.sql给表中的字段增加“主键”的语法;a、怎样增加主键?【语法】alter table-name add primary key (col) 【举例】alter table 人员表 add primary key (工号) 【说明】不能在可以为“空”的字段上增加主键,否则会报错。B、怎样删除主键?【语法】alter table-name drop 主键约束【举例】alter table 人员表 drop pk_ 人员表8.sql给表中的字段创建“索引”的语法;【语法】create unique index idxname on tabname(col,.) 【举例】create unique index index_gh on 人员表 ( 工号) 【说明】跟字段创建索引后,可用于查询语句中,提高检索速度。9.sql删除表中某个“索引”的语法;【语法】drop index idxname 【举例】drop index 人员表.index_gh 【说明】注意索引一旦建立后,不能修改,只能先删除了重新建立。10.sql创建视图的语法;【语法】create view viewname as select statement 【举例】create view v_ryb as select * from 人员表【说明】不引用变量的查询语句,都可以用代码创建视图。11.sql删除视图的语法;【语法】drop view viewname 【举例】名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - 4 drop view v_ryb 12.sql向表中插入数据的语法;【语法】insert into table1(field1,field2) values(value1,value2) 【举例】insert into 人员表 ( 工号, 姓名, 性别) values (gh006,黄刚,男) 【说明】只有给选定字段插入数据时,才需要在表名的后面用“() ”来排列字段名。13.sql修改表中某条数据的语法;【语法】update 表名 set field1=value1 where 范围【举例】update 人员表 set 姓名= 洪七公 where 工号= gh001 【说明】写修改语句时, 注意一般要指定 where 条件语句,否则就是对整个表的所有记录作修改,可能产生预期之外的严重后果。14.sql删除表中某条数据的语法;【语法】delete from 表名 where 范围【举例】delete from 人员表 where 工号= gh002 【说明】如果没写 where 条件语句,那么删除的就是整个表的全部记录。15.sql查询表中数据的语法;【语法】select * from 表名 where 范围【举例】查出全部字段: select * from 人员表 where 工号= gh001 只查出指定字段: select 工号, 姓名 from 人员表 where 工号= gh001 【说明】“*”是通配符,表示查出全部字段。16.sql排序、求总、求和、求平均、取最大、取最小的语法;a、排序【语法】select * from 表名 order by field1,field2 desc 【举例】select * from 人员表 order by gh,xm desc (降序) select * from 人员表 order by gh,xm asc (升序) b、求总名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 16 页 - - - - - - - - - 5 【语法】select count as totalcount from 表名【举例】select count(*) as 记录数 from 人员表c、求和【语法】select sum(字段) as sumvalue from 表名【举例】select sum(工资) as 工资合计 from 人员表d、求平均【语法】select avg(字段) as avgvalue from 表名【举例】select avg(工资) as 平均工资 from 人员表e、取最大【语法】select max(字段) as maxvalue from 表名【举例】select max(工资) as 最大工资 from 人员表f 、取最小【语法】select min(字段) as minvalue from 表名【举例】select min(工资) as 最小工资 from 人员表17.sql union运算符的用法;【作用】union 运算符通过组合其他两个结果表(例如 table1 和 table2 )并消去表中任何重复行而组合生出一个结果表。当 all 随 union 一起使用时(即 union all ),不消除重复行。两种情况下,组合表的每一行不是来自 table1 就是来自 table2 。【举例】不消除重复行的写法:select gh,xm,xb from 人员表 1 union all select gh,xm,xb from 人员表 2 消除重复行的写法:select gh,xm,xb from 人员表 1 union select gh,xm,xb from 人员表 2 【说明】用来组合的所有表的字段必须一致、或参与组合的表的字段必须一致。18.sql except运算符的用法;【作用】except 运算符通过包括所有在 table1 中但不在 table2 中的行、并消除所有重复行而派生出一个结果表。当 all 随 except 一起使用时 (except all) ,不消除重复行。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 16 页 - - - - - - - - - 6 【举例】select gh,xm,xb from 人员表 1 except all select gh,xm,xb from 人员表 2 【说明】本运算符在 sql server 2000 中不支持, sql server 2005 版本及后续版中支持。19.sql intersect运算符的用法;【作用】intersect 运算符通过只包括 table1 和 table2 中都有的行、并消除所有重复行而派生出一个结果表。当 all 随 intersect 一起使用时 (intersect all),不消除重复行。【举例】select gh,xm,xb from 人员表 1 intersect all select gh,xm,xb from 人员表 2 【说明】本运算符在 sql server 2000 中不支持, sql server 2005 版本及后续版中支持。20.sql left (outer ) join 语法;【作用】左外连接(左连接): 结果集既包括连接表的匹配行,也包括左连接表的所有行。【举例】假设有这样两个表:表一:- 姓名备注Aa 1111111 Bb 2222222 Cc 3333333 表二: - 姓名年龄性别Aa 22 男Tt 33 女名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 16 页 - - - - - - - - - 7 Cc 44 男Gg 55 女对于左外连接:Select a.*,b.* From 表一 as a left join 表二 as b On a. 姓名=b.姓名则查询的结果为:- 姓名备注年龄性别Aa 1111111 22 男Bb 2222222 null null Cc 333333 44 男21.sql right(outer ) join语法;【作用】右外连接 (右连接 ) :结果集既包括连接表的匹配连接行,也包括右连接表的所有行。【举例】假设有这样两个表:表一:- 姓名备注Aa 1111111 Bb 2222222 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 16 页 - - - - - - - - - 8 Cc 3333333 表二: - 姓名年龄性别Aa 22 男Tt 33 女Cc 44 男Gg 55 女对于右外连接:Select a.*,b.* From 表一 as a right join 表二 as b On a. 姓名=b.姓名则查询的结果为:- 姓名备注年龄性别Aa 1111111 22 男Tt null 33 女Cc 333333 44 男Gg null 55 女22.sql full/cross (outer ) join语法;【作用】全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。【举例】select a.*,b.* From 表一 as a full outer join 表二 as b 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 16 页 - - - - - - - - - 9 On a. 姓名=b.姓名23.sql group by分组的语法;【语法】select 字段,sum(字段) as 字段名 from 表名 group by 字段【举例】select 月份,sum(工资) as 月工资合计 from 人员表 group by 月份【说明】分组字段不能是: text,ntext,image类型的字段。24.sql分离数据库的语法;【语法】exec sp_detach_db 数据库名 , true 【举例】exec sp_detach_db 人事管理库 , true 25.sql附加数据库的语法;【语法】exec sp_attach_db dbname= 数据库名 ,filename1=nc:program filessql server 路径名+.mdf,filename2=n.填写路径 .+.ldf 【举例】例 1:exec sp_attach_db dbname=n 人事管理库 人事管理库 .mdf, 人事管理库 .ldf 例 2:exec sp_attach_db dbname=nmy_rsgl, filename1=nc:program filesmicrosoft sql servermssqldatamy_rsgl.mdf, filename2=nc:program filesmicrosoft sql servermssqldatamy_rsgl_log.ldf 26.sql修改数据库名称的语法;【语法】exec sp_renamedb old_name, new_name 【举例】exec sp_renamedb 人事管理库 , 人员管理库 【说明】注意此修改只是改变了数据库的名称,而不是它在硬盘上的文件名。27.sql between的用法;【作用】between 限制查询数据范围时包括了边界值,not between不包括【语法】名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 16 页 - - - - - - - - - 10 select * from table1 where time between time1 and time2 select a,b,c from table1 where a not between 数值 1 and 数值 2 【举例】select * from 人员表where ( 日期 between 1997-12-01 and 2012-06-01) select * from 人员表where ( 年龄 not between 30 and 40) 【说明】用来比较的字段要求是数值类型的字段或日期型字段。28.sql in的用法;【作用】查找“在”或“不在”指定范围的数据。【语法】select * from table1 where a not in (值 1,值 2,值 4,值 6) 【举例】select * from 人员表 where ( 年龄 not in (20, 30, 50, 60) select * from 人员表 where ( 年龄 in (20, 30, 50, 60) 【延伸】select * from 人员表 where 工号 in (select 工号 from 工资表 ) select * from 人员表 where 工号 not in (select 工号 from 工资表 ) 【说明】in 语句的作用很大,但是用于比较的数据越多,得出结果的速度就越慢。29.sql top的用法;【作用】查找指定范围的数据的前几条,默认从首条开始返回。【语法】select top n * from table1 (n 表示条数,用整数)【举例】select top 3 * from 人员表【延伸】select top 2 * from 人员表 where ( 性别 = 女) 【说明】top 语句适合用在提取少量数据用于显示、或需要提取指定条数的记录。30.sql exists的用法;【作用】查找当前表在别的表中“存在”或“不存在”的记录。【语法】名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 16 页 - - - - - - - - - 11 select * from table1 where not exists ( select * from table2 where table1.field1=table2.field1 ) 【举例】select * from 人员表 where not exists ( select * from 工资表 where 人员表. 工号=工资表 . 工号 ) 31.sql truncate table的用法;【作用】删除表中的全部数据,而且不写日志。【语法】truncate table table1 【举例】truncate table 工资表【说明】这个命令与 delete 的作用相同,但 delete 要写日志,而且 delete 语句后面可以使用 where 条件语句。32.sql 收缩数据库的语法;【语法】dbcc shrinkdatabase (database_name, target_percent) 【举例】Dbcc shrinkdatabase (userdb, 10) go 【说明】上面的代码是将 userdb 用户数据库中的文件减小,以使 userdb 中的文件有10% 的可用空间。33.sql检查备份集的语法;【语法】restore verifyonly from disk=路径【举例】restore verifyonly from disk=f:back1.bak 【说明】验证备份但不还原备份。检查备份集是否完整以及所有卷是否都可读。但是,restore verifyonly 不尝试验证备份卷中的数据结构。如果备份有效,则microsoft sql server 2000 返回此消息: 备份集有效 。34.sql修复数据库的语法;【语法】alter database database-name set single_user go 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 16 页 - - - - - - - - - 12 dbcc checkdb(database-name,repair_allow_data_loss) with tablock go alter database database-name set multi_user go 【举例】alter database 人事管理库 set single_user go dbcc checkdb(人事管理库 ,repair_allow_data_loss) with tablock go alter database人事管理库 set multi_user go 【说明】检查指定数据库中的所有对象的分配和结构完整性、并修复错误,alter database 提供了更改数据库名称、文件组名称以及数据文件和日志文件的逻辑名称的能力。35.sql清除日志的写法;【举例】if exists (select * from sysobjects where id = object_id(ndbo.truncate_log_file) and objectproperty(id, nisprocedure) = 1) drop procedure dbo.truncate_log_file go set quoted_identifier off set ansi_nulls on go create procedure truncate_log_file as set nocount on declare logicalfilename sysname, maxminutes int, newsize int select logicalfilename = xxxx_log, - 这里的 xxxx_log 替换成泥自己数据库的log 名maxminutes = 10, newsize = 10 declare originalsize int select originalsize = size from sysfiles where name = logicalfilename declare counter int, starttime datetime, 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 16 页 - - - - - - - - - 13 trunclog varchar(255) while originalsize*8/1024newsize begin create table dummytrans (dummycolumn char (8000) not null) select starttime = getdate(), trunclog = backup log + db_name() + with truncate_only dbcc shrinkfile (logicalfilename, newsize) exec (trunclog) while maxminutes datediff (mi, starttime, getdate() and originalsize = (select size from sysfiles where name = logicalfilename) and (originalsize * 8 /1024) newsize begin select counter = 0 while (counter originalsize / 16) and (counter 5000) begin insert dummytrans values (fill log) delete dummytrans select counter = counter + 1 end exec (trunclog) end select originalsize=size from sysfiles where name = logicalfilename drop table dummytrans end set nocount off go set quoted_identifier off set ansi_nulls on go 【说明】这段代码包含着多种语法,在使用的时候把数据库换成你要清除日志的数据库,也就是说,这段代码是通用的。36.sql循环语句的写法;【举例】declare i int set i=1 while i=35 3)逻辑运算符:select 工号, 姓名, 年龄 from 人员表 where ( 年龄=20 or 年龄=40 or 年龄55) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 16 页 - - - - - - - - - 16 4)集合运算符:select * from 人员表 where ( 年龄 not in (20, 30, 50, 55) 8. 演示表与表之间数据交换的应用案例;insert into 工资表 ( 工号, 月份) select 工号, 一月份 from 人员表9. 演示本地表与远程表之间的操作实例。1)本地表写入远程表:insert opendatasource(sqloledb,data source=192.168.1.2;user id=sa;password=888 ).my_rsgl.dbo.人员表 ( 工号, 姓名) select 工号, 姓名 from 人员表2)远程表写入本地表:exec sp_addlinkedserver server = 192.168.1.2 exec sp_addlinkedsrvlogin rmtsrvname = 192.168.1.2, useself = false , locallogin = sa, rmtuser = sa , rmtpassword =sql select * into xxx01 from 192.168.1.2.人事管理库 .dbo. 人员表名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 16 页 - - - - - - - - -