1、数据库专题sql server 数据库语法大全陈老师delphi培训第十三课:数据库专题-sql server 数据库语法大全及应用 配套视频qq语音课主讲内容:演示对表中的数据进行读写管理的语法案例;1)插入:insert into 人员表(工号,姓名,性别) values (gh007,周伯通,男)2)修改:update 人员表 set 姓名= 欧阳锋 where 工号= gh0013)删除:delete from 人员表 where 工号= gh0074)查询:select * from 人员表 where 工号= gh0016.sql向表中增加一个“列”的语法;【语法】alter ta
2、ble 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 (创建:人事管理库)【说明】本
3、代码用于创建数据库,可在“企业管理器”中执行,也可以在“查询分析器”中执行,也可以在delphi等开发工具中执行。以下将要讲到的语法都有多种执行方式,下文不再复述。2.sql删除数据库的语法;【语法】drop database database-name【举例】drop database my_rsgl (删除:人事管理库)【说明】删除数据库之前,必须确认数据库是否真的要删除,如果数据库中还包含着重要的数据,删除之后就后悔莫及,所以不要随意操作这个命令。3.sql备份、恢复数据库的语法;a、怎样备份?【语法】backup database database-name to disk=路径【举例
4、】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创建表的语法;【语法】cre
5、ate 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【说明】代码中,表名、字段名和数据类型都要写在“”里面,如果字段的类型是字符型,都必须在“()”里面指定
6、长度。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 性别附:
7、修改某列的数据类型的语法: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
8、 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
9、 * from 人员表【说明】不引用变量的查询语句,都可以用代码创建视图。11.sql删除视图的语法;【语法】drop view viewname 【举例】drop view v_ryb12.sql向表中插入数据的语法;【语法】insert into table1(field1,field2) values(value1,value2) 【举例】insert into 人员表(工号,姓名,性别) values (gh006,黄刚,男)【说明】只有给选定字段插入数据时,才需要在表名的后面用“()”来排列字段名。13.sql修改表中某条数据的语法;【语法】update 表名 set field1=
10、value1 where 范围 【举例】update 人员表 set 姓名= 洪七公 where 工号= gh001 【说明】写修改语句时,注意一般要指定where条件语句,否则就是对整个表的所有记录作修改,可能产生预期之外的严重后果。14.sql删除表中某条数据的语法;【语法】delete from 表名 where 范围 【举例】delete from 人员表 where 工号= gh002 【说明】如果没写where条件语句,那么删除的就是整个表的全部记录。15.sql查询表中数据的语法;【语法】select * from 表名 where 范围【举例】查出全部字段:select * f
11、rom 人员表 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、求总【语法】select count as totalcount from
12、表名 【举例】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
13、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 消除重复行的写法:se
14、lect gh,xm,xb from 人员表1 union select gh,xm,xb from 人员表2【说明】用来组合的所有表的字段必须一致、或参与组合的表的字段必须一致。18.sql except运算符的用法;【作用】except 运算符通过包括所有在 table1 中但不在 table2 中的行、并消除所有重复行而派生出一个结果表。当 all 随 except 一起使用时 (except all),不消除重复行。 【举例】select gh,xm,xb from 人员表1 except all select gh,xm,xb from 人员表2 【说明】本运算符在sql serve
15、r 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
16、 left (outer) join 语法;【作用】左外连接(左连接):结果集既包括连接表的匹配行,也包括左连接表的所有行。 【举例】假设有这样两个表:表一:-姓名 备注Aa 1111111Bb 2222222Cc 3333333表二:-姓名 年龄 性别Aa 22 男Tt 33 女Cc 44 男Gg 55 女对于左外连接:Select a.*,b.* From 表一 as a left join 表二 as bOn a.姓名=b.姓名则查询的结果为:-姓名 备注 年龄 性别Aa 1111111 22 男Bb 2222222 null null Cc 333333 44 男21.sql righ
17、t(outer) join语法;【作用】右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 【举例】假设有这样两个表:表一:-姓名 备注Aa 1111111Bb 2222222Cc 3333333表二:-姓名 年龄 性别Aa 22 男Tt 33 女Cc 44 男Gg 55 女对于右外连接:Select a.*,b.* From 表一 as a right join 表二 as bOn a.姓名=b.姓名则查询的结果为:-姓名 备注 年龄 性别Aa 1111111 22 男Tt null 33 女Cc 333333 44 男Gg null 55 女22.sql full
18、/cross (outer) join语法;【作用】全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 【举例】select a.*,b.* From 表一 as a full outer join 表二 as bOn a.姓名=b.姓名23.sql group by分组的语法;【语法】select 字段,sum(字段) as 字段名 from 表名 group by 字段【举例】select 月份,sum(工资) as 月工资合计 from 人员表 group by 月份【说明】分组字段不能是:text,ntext,image类型的字段。24.sql分离数据库的语法;【语法
19、】exec sp_detach_db 数据库名, true【举例】exec sp_detach_db 人事管理库, true25.sql附加数据库的语法;【语法】exec sp_attach_db dbname=数据库名,filename1=nc:program filessql server路径名+.mdf,filename2=n.填写路径.+.ldf【举例】例1:exec sp_attach_db dbname=n人事管理库filename1=nc:人事管理库.mdf,filename2=nc:人事管理库.ldf例2:exec sp_attach_db dbname=nmy_rsgl,fi
20、lename1=nc:program filesmicrosoft sql servermssqldatamy_rsgl.mdf,filename2=nc:program filesmicrosoft sql servermssqldatamy_rsgl_log.ldf26.sql修改数据库名称的语法;【语法】exec sp_renamedb old_name, new_name【举例】exec sp_renamedb 人事管理库, 人员管理库【说明】注意此修改只是改变了数据库的名称,而不是它在硬盘上的文件名。27.sql between的用法;【作用】between限制查询数据范围时包括了边
21、界值,not between不包括【语法】select * from table1 where time between time1 and time2select 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的用法;【作用】查找“在”或“不在
22、”指定范围的数据。【语法】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语句的作用很大,但是用于比较的数据越多,得出
23、结果的速度就越慢。29.sql top的用法;【作用】查找指定范围的数据的前几条,默认从首条开始返回。【语法】select top n * from table1 (n 表示条数,用整数)【举例】select top 3 * from 人员表【延伸】select top 2 * from 人员表 where (性别 = 女)【说明】top语句适合用在提取少量数据用于显示、或需要提取指定条数的记录。30.sql exists的用法;【作用】查找当前表在别的表中“存在”或“不存在”的记录。【语法】select * from table1 where not exists ( select * fr
24、om 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 收缩数据库的语法;【语法】d
25、bcc 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 不尝
26、试验证备份卷中的数据结构。如果备份有效,则 microsoft sql server 2000 返回此消息:备份集有效。34.sql修复数据库的语法;【语法】alter database database-name set single_usergodbcc checkdb(database-name,repair_allow_data_loss) with tablockgoalter database database-name set multi_usergo【举例】alter database 人事管理库 set single_usergodbcc checkdb(人事管理库,repa
27、ir_allow_data_loss) with tablockgoalter database人事管理库 set multi_usergo【说明】检查指定数据库中的所有对象的分配和结构完整性、并修复错误,alter database 提供了更改数据库名称、文件组名称以及数据文件和日志文件的逻辑名称的能力。35.sql清除日志的写法;【举例】if exists (select * from sysobjects where id = object_id(ndbo.truncate_log_file) and objectproperty(id, nisprocedure) = 1)drop p
28、rocedure dbo.truncate_log_filegoset quoted_identifier off set ansi_nulls on gocreate procedure truncate_log_file asset 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, trunclog varchar(255)while originalsize*8/1024newsizebegin create table dummytrans (dummycolumn char (8000) not null) select starttime = getdate(), trunclog = bac
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1