数据库 、 语句查询、函数

创建数据库

创建之前判断该数据库是否存在 if exists (select * from sysdatabases where name=‘databaseName‘) drop database databaseName go Create DATABASE databasename on primary– 默认就属于primary文件组,可省略 ( /*–数据文件的具体描述–*/ name=‘databasename_data’,– 主数据文件的逻辑名称 filename=‘‘所存位置:\databasename_data.mdf’, — 主数据文件的物理名称 size=数值mb, –主数据文件的初始大小 maxsize=数值mb, — 主数据文件增长的最大值 filegrowth=数值%–主数据文件的增长率 ) log on ( /*–日志文件的具体描述,各参数含义同上–*/ name=‘databasename_log‘, — 日志文件的逻辑名称 filename=‘所存目录:\databasename_log.ldf‘, — 日志文件的物理名称 size=数值mb, –日志文件的初始大小 filegrowth=数值%–日志文件的增长值 )



删除数据库

drop database databasename



备份

— 创建备份数据的 device USE master EXEC sp_addumpdevice ‘disk‘, ‘testBack‘, ‘c:\mssql7backup\MyNwind_1.dat‘ — 开始备份 BACKUP DATABASE pubs TO testBack



创建新表

create table tabname(col1 type1 [not null] [primary key] identity(起始值,递增量) ,col2 type2 [not null],..)–primary key为主键 identity表示递增数量 根据已有的表创建新表: A:go use 原数据库名 go select * into 目的数据库名.dbo.目的表名 from 原表名(使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only



创建序列

create sequence SIMON_SEQUENCE minvalue 1 — 最小值 maxvalue 999999999999999999999999999 — 最大值 start with 1 — 开始值 increment by 1 — 每次加几 cache 20;



删除表

drop table tabname–这是将表连同表中信息一起删除但是日志文件中会有记录



删除信息

delete from table_name-这是将表中信息删除但是会保留这个表



增加列

Alter table table_name add column_name column_type [default 默认值]–在表中增加一列,[]内的内容为可选项



删除列

Alter table table_name drop column column_name–从表中删除一列



添加主键

Alter table tabname add primary key(col) 说明:删除主键:Alter table tabname drop primary key(col)



创建索引

create [unique] index idxname on tabname(col…。) 删除索引:drop index idxname on tabname 注:索引是不可更改的,想更改必须删除重新建。



创建视图

create view viewname as select statement 删除视图:drop view viewname



基本语句

(1) 数据记录筛选: sql=”select * from 数据表 where
字段名=字段值 order by字段名[desc]”(按某个字段值降序排列。默认升序ASC) sql=”select * from 数据表 where字段名like ‘%字段值%‘ order by 字段名 [desc]” sql=”select top 10 * from 数据表 where字段名=字段值 order by 字段名 [desc]” sql=”select top 10 * from 数据表 order by 字段名 [desc]” sql=”select * from 数据表 where
字段名in (‘值1‘,‘值2‘,‘值3‘)” sql=”select * from 数据表 where字段名between 值1 and 值2″ (2) 更新数据记录: sql=”update 数据表 set字段名=字段值 where 条件表达式” sql=”update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式” (3) 删除数据记录: sql=”delete from 数据表 where 条件表达式” sql=”delete from 数据表” (将数据表所有记录删除) (4) 添加数据记录: sql=”insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)” sql=”insert into 目标数据表 select * from 源数据表” (把源数据表的记录添加到目标数据表) (5) 数据记录统计函数: AVG(
字段名) 得出一个表格栏平均值 COUNT(*;字段名) 对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个表格栏最小的值 SUM(字段名) 把数据栏的值相加 引用以上函数的方法: sql=”select sum(
字段名) as 别名 from 数据表 where 条件表达式” set rs=conn.excute(sql) 用 rs(“别名”) 获取统计的值,其它函数运用同上。 查询去除重复值:select distinct * from table1 (6) 数据表的建立和删除: CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… ) (7) 单列求和: SELECT SUM(字段名) FROM 数据表


最新语句

编辑 查询数据库中含有同一这字段的表: select name from sysobjects where xtype = ‘u‘ and id in(select id from syscolumns where name = ‘s3‘) 根据出生日期可以算出年龄: select datediff(year,scrq,‘2013‘) as 年龄 from page_shsjgrgl 根据当前年份自动算出年龄 select datediff(year,csny,cast(YEAR(GETDATE()) as char)) 年 select year(djsj) from page_shsjgrgl 月 select month(djsj) from page_shsjgrgl 日 select day(djsj) from page_shsjgrgl 在同一数据库中复制表结构: select * into a from b where 1<>1 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 ‘aa‘ 中的标识列插入显式值。 set identity_insert aa ON—-设置打开, 批量插入: insert into aa(Customer_ID, ID_Type, ID_Number) select Customer_ID, ID_Type, ID_Number from TCustomer; set identity_insert aa OFF---关闭 不同数据库之间的复制: 复制结构: select * into test.dbo.b from GCRT.dbo.page_shsjgrgl where 1<>1 复制内容: insert into test.dbo.b(xm,ssdq) select xm,ssdq from GCRT.dbo.page_shsjgrgl 查看数据库中所有的数据表表名: select name from SysObjects where type=‘u‘ 查看数据库中所有表含有同一字段的表: select name from sysobjects where xtype = ‘u‘ and id in(select id from syscolumns where name = ‘同一字段‘) 查看数据表中的所有字段: select name from Syscolumns where id=object_id(‘表名‘) 查询数据库时前10条记录: select top 10 * from td_areacode order by newid() 修改字段类型: ALTER TABLE 表名 ALTER COLUMN 字段名 varchar(30) NOT NULL use ZHJIANGJGYL declare @temp nvarchar(30) set @temp = ‘ZWI4‘ select hllx from page_yljg_zyry where hllx not in( select case @temp when ‘‘ then ‘‘ else b1 end from ( select * from TD_Code where page_en=‘page_yljg_zyry‘ and B2=‘ZWI‘ ) s where s.b1 != case @temp when ‘‘ then ‘‘ else @temp end ) 更改数据库表字段类型: alter table page_shsjgrgl alter column s1 int



高级查询

A:UNION
运算符 UNION 运算符通过组合其他两个结果表(例如TABLE1 和TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随UNION 一起使用时(即UNION ALL),不消除重复行。两种情况下,
派生表的每一行不是来自TABLE1 就是来自TABLE2。 B: EXCEPT运算符 EXCEPT 运算符通过包括所有在TABLE1 中但不在TABLE2 中的行并消除所有重复行而派生出一个结果表。当ALL 随EXCEPT 一起使用时(EXCEPT ALL),不消除重复行。 C:INTERSECT
运算符 INTERSECT 运算符通过只包括TABLE1 和TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当ALL 随INTERSECT 一起使用时(INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。



外连接

A、left outer join: 左
外连接(左连接):
结果集既包括连接表的匹配行,也包括左连接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right outer join: 右外连接(右连接):结果集既包括
连接表的匹配连接行,也包括右连接表的所有行。 C:full outer join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。


判断对象

编辑 判断数据库是否存在 if exists (select*fromsysdatabaseswherename= ‘数据库名‘) dropdatabase[数据库名] 判断表是否存在 if not exists (select * from sysobjects where [name] = ‘表名‘ and xtype=‘U‘) begin –这里创建表 end 判断存储过程是否存在 if exists (select*fromsysobjectswhereid = object_id(N‘[存储过程名]‘) and OBJECTPROPERTY(id, N‘IsProcedure‘) = 1) dropprocedure[
存储过程名] 判断临时表是否存在 if object_id(‘tempdb..#临时表名‘)isnot null droptable#
临时表名 判断视图是否存在 –SQL Server 2000 IF EXISTS (SELECT*FROMsysviewsWHEREobject_id = ‘[dbo].[视图名]‘ –SQL Server 2005 IF EXISTS (SELECT*FROMsys.viewsWHEREobject_id = ‘[dbo].[视图名]‘ 判断函数是否存在 if exists (select*fromdbo.sysobjectswhereid = object_id(N‘[dbo].[函数名]‘) and xtype in (N‘FN‘, N‘IF‘, N‘TF‘)) dropfunction[dbo].[函数名] 获取创建信息 SELECT[name],[id],crdateFROMsysobjectswherextype=‘U‘ /* xtype 的表示参数类型,通常包括如下这些 C =CHECK约束 D = 默认值或DEFAULT约束 F =FOREIGNKEY约束 L =日志FN =
标量函数IF = 内嵌表函数 P =
存储过程PK =PRIMARYKEY约束(类型是K) RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR =
触发器U = 用户表 UQ =UNIQUE约束(类型是K) V = 视图 X = 扩展存储过程 */ 判断列是否存在 if exists(select*fromsyscolumnswhereid=object_id(‘表名‘) andname=‘列名‘) altertable表名dropcolumn列名 判断列是否自增列 if columnproperty(object_id(‘table‘),‘col‘,‘IsIdentity‘)=1 print ‘自增列‘ else print ‘不是自增列‘ SELECT*FROMsys.columnsWHEREobject_id=OBJECT_ID(‘表名‘) AND is_identity=1 判断表中是否存在索引 if exists(select*fromsysindexeswhereid=object_id(‘表名‘) andname=‘索引名‘) print ‘存在‘ else print ‘不存在 查看数据库中对象 SELECT*FROMsysobjectsWHEREname=‘对象名‘ select * from table(所要查询的表名) where coloum(条件)

一、数据库、表的基本操作

1.首先数据库的基本操作:

[sql] 
view plain 
copy    

  1. create database hpu –创建名为 hpu的数据库  
  2. use hpu             –更改当前数据库为 hpu,即接下来的操作是基于 hpu数据库的  
  3. drop hpu            –删除数据库 hpu  

2.然后对表操作:

(1)表的创建

车很普及了在今天,很多人都要考驾照,本人还没拿到手,心疼。。。

以车牌号为例建个表命名为 vehicle

[sql] 
view plain 
copy    

  1. create table vehicle  
  2. (  
  3.     number_id varchar(11),  –车牌  
  4.     brand varchar(11),      –品牌  
  5.     color varchar(11),      –颜色  
  6.     makedate date           –出厂日期  
  7. )  

(2)表的删除

[sql] 
view plain 
copy    

  1. drop table vehicle          –删除表中数据,同时删除该表  
  2. delete vehicle              –删除表中数据  

——————————– Second ——————————–

二、字段的操作及记录的增删改查

(1)字段的操作

[sql] 
view plain 
copy    

  1. alter table vehicle add carowner varchar(20)        –增加字段(列)  
  2. alter table vehicle alter column carowner int       –修改字段类型  
  3. alter table vehicle alter column carowner varchar(15)  
  4. sp_rename ‘vehicle.carowner‘,‘carmaster‘,‘column‘   –修改列名  
  5. alter table vehicle drop column carmaster       –删除表 vehicle的字段 carmaster  

(2)基本的增删改查是最简单、最基本也是最常用的 sql语句

[sql] 
view plain 
copy    

  1. insert into vehicle(number_id,brand,makedate) values(‘豫HPU579‘,‘红旗‘,getdate())  
  2. insert into vehicle values(‘豫HPU33U‘,‘大众‘,‘银灰色‘,getdate())  
  3. insert into vehicle values(‘豫HPU123‘,‘红旗‘,‘黑色‘,getdate()-365*2)  
  4. delete vehicle where number_id = ‘豫HPU23U‘<span style=“white-space:pre”>        </span>–按条件删除  
  5. delete vehicle<span style=“white-space:pre”>                        </span>–删除表中全部记录  
  6. update vehicle set color = ‘红色‘ where brand = ‘红旗‘<span style=“white-space:pre”>    </span>–按条件更新车的颜色  
  7. update vehicle set makedate = getdate()<span style=“white-space:pre”>           </span>–更新表中全部记录的出厂日期为当前时间  
  8. select number_id,makedate from vehicle where brand = ‘红旗‘<span style=“white-space:pre”> </span>–按条件查找所需字段的数据  
  9. select top 2 * from vehicle<span style=“white-space:pre”>               </span>–查询表中的前两条记录  
  10. select * from vehicle  

——————————– Third ——————————–

三、约束

约束从字面上理解就是存在一种或多种规则,条件来规范字段、数据。约束用于维护数据库完整性,通过表中的列定义约束可以有效防止将错误的数据插入表中,也可以保证表之间数据的一致性。

常用的约束有:

1.Primary key主键约束

2.Foreign key外键约束

3.Unique唯一约束

4.Check检查约束

5.Default默认约束

6.Not null不为空

例如对上表 vehicle创建时设置约束

[sql] 
view plain 
copy    

  1. create table vehicle  
  2. (  
  3.     number_id varchar(11) primary key,  –设为主键  
  4.     brand varchar(11) not null,     –数据不为空  
  5.     color varchar(11) default ‘黑色‘, –默认颜色为黑色  
  6.     makedate date not null          –出厂日期  
  7. )  

测试约束:

[sql] 
view plain 
copy    

  1. insert into vehicle(number_id,brand,makedate) values(‘豫HPU579‘,‘红旗‘,getdate())  –插入成功;颜色默认值为 ‘黑色‘  
  2. insert into vehicle(number_id,brand,makedate) values(‘豫HPU579‘,‘大众‘,getdate())  –插入失败:主键唯一,已存在主键为 ‘豫HPU579‘的记录不能再插入  
  3. insert into vehicle values(‘豫HPU123‘,‘大众‘,‘苹果绿‘,getdate())          –插入成功;  
  4. insert into vehicle values(‘豫HPU678‘,null,‘苹果绿‘,getdate())              –插入失败;不能将值 NULL 插入列 ‘brand‘,列不允许有 Null 值  

  执行查询语句结果如下:

就像上面如果没有将约束写在表的创建语句里,而表已经创建好的情况下。该怎么修改呢?

修改语句实例如下:

[delphi] 
view plain 
copy    

  1. alter table vehicle alter column number_id varchar(11) not null         –设置字段不为空  
  2. alter table vehicle alter column brand varchar(11) not null  
  3. alter table vehicle alter column makedate date not null  
  4. alter table vehicle add constraint PK_number_id primary key(number_id)      –修改字段 number_id为主键  
  5. alter table vehicle add constraint DF_color Default(‘灰色‘) for color     –设置默认值  
  6. alter table vehicle add constraint CK_makedate check(makedate < getdate())   –核查生产日期应该小于今天  

其他修改语句相似。

——————————– Fourth——————————–

四、函数

数据库语句也有函数,上面的例子中已经用到一个函数 getdate()得到当前时间。

rand()随机函数;

sin(),cos(),tan()三角函数;

sum(),avg(),max(),min(),len()等求和,求平均数,最大最小值球长度函数;

datediff(),getdate(),dateadd()日期函数;

cast(),str(),char()数据转换函数;

substring(),left(),right(),ltrim()截取字符串函数等。

下面写个例子简单说明函数的使用:(利用函数生成一个长度为49的字符串,计算程序运行所需时间)

[sql] 
view plain 
copy    

  1. print(‘当前时间:‘)  
  2. print(getdate())                                –得到当前时间  
  3. declare @i int , @c varchar(50),@date1 datetime,@date2 datetime  
  4. set @i = 0  
  5. set @c = ‘‘  
  6. set @date1 = getdate()  
  7. while @i < 49  
  8.     begin  
  9.         set @c = @c + char(round(rand()*26+65,0))       <span style=“white-space:pre”>  </span>–随机函数,保证生成的数字是随机的,对应的字符不全相同  
  10.         set @i = @i + 1  
  11.     end  
  12. set @date2 = getdate()  
  13. print @c  
  14. print ‘答案的长度为: ‘+cast(len(@c) as varchar(10))   <span style=“white-space:pre”>      </span>–len()的结果为整型,cast转换为字符串类型  
  15. print(‘运行时间为:‘+cast(datediff(ms,@date1,@date2) as varchar(10))+‘ms‘)–datediff计算两个给定的时间差,单位为毫秒  

运行结果如下:

——————————– Fifth——————————–

五、视图与索引

1.视图创建与删除

[sql] 
view plain 
copy    

  1. create view testview as select * from vehicle   –创建视图  
  2. select * from testview  
  3. select * from vehicle  
  4. drop view testview              –删除视图  

在sql server2012下执行查询表与查询视图的结果如下:

视图的查询结果与普通的查询表记录得到的结果相同。两者的区别是视图查询的结果是逻辑结果,直接查询表获取的是实际数据。视图防止了对表数据的误删等操作。不知道我说的对不对,如果有错误或不规范请告诉我。谢谢^_^。

视图的作用:

(1)隐藏了数据的复杂性

(2)有利于控制用户对表中某些列的访问

(3)使用户查询变得简单。

2.索引的创建与使用

[sql] 
view plain 
copy    

  1. create index testindex on vehicle(number_id)    –创建索引  
  2. select * from vehicle where number_id = ‘豫HPU579‘  
  3. drop index vehicle.testindex                –删除索引  

(1)索引的创建,使数据的查询变得很快,大大减少了查询时间,在数据总量较少的情况下看不出来,测试插入 200,000条记录到表 vehicle中,通过 getdate()函数计算出创建索引前随机的查询表中的一条记录耗时56毫秒,创建索引后用时3毫秒。

 

 

(2)索引描述:

用户对数据库最频繁的操作是进行数据查询。一般情况下,数据库在进行查询操作时需要对整个表进行数据搜索。当表中的数据很多时,搜索数据就需要很长的时间,这就造成了服务器的资源浪费。为了提高检索数据的能力,数据库引入了索引机制用户对数据库最频繁的操作是进行数据查询。

——————————– Sixth——————————–

六、触发器

1.触发器的创建与删除

[sql] 
view plain 
copy    

  1. create trigger testtri on vehicle for insert,update,delete as  
  2. begin  
  3.     print(‘你对表 vehicle 进行了操作‘)  
  4. end         –创建触发器  
  5.   
  6. drop trigger testtri    –删除触发器  

此时在执行删除插入或更新操作,控制台会输出提示语句。触发器的创建实现了对表记录的操作进行监听。

效果如下:

触发器就是可以在执行某操作前或某个事件触发而执行的操作。

2.触发器的作用

百度给出的作用:

(1)可在写入数据表前,强制检验或转换数据

(2)触发器发生错误时,异动的结果会被撤销

(3)部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为 DDL触发器

(4)可依照特定的情况,替换异动的指令