而_则代表一个字符。例如"ab_"代表以ab 开头且长度为3的所有字符串

[]用于表示0至9之间的字符。例如"ab[0-5]"用户表示一个以ab开头,后跟一个0至5之间数字的字符串。

[^6-9]表示不在某一范围内的字符..

 

select * from Customers where CustomerID like 'a[NR]%'

 

Union 相当于集合运算中的并操作运算(AUB)组合再次查询的结果,并除去两个查询结果中的重复记录。

except 相当于集合运算中的A-AnB从 操作数左边的查询中返回右边的查询未返回的所有非重复值

intersect相当于集合运算中的交集运算(AnB),返回即存在于查询结果1,又存在于查询结果2中的所有记录

select companyname,contactname from Suppliers where country = 'USA'
Union
select CompanyName,'没有联系人' from shippers

 

------case .... when ----------------------------------------------------..........

select ProductName,'产品类别'=case CategoryID
when '1' then 'Beverages'  when '2' then 'Condiments'  when '3' then 'Confections'
end   from Products order by categoryID

 

SELECT ID,(CASE WHEN DATEPART(dw,GETDATE())=1 OR DATEPART(dw,GETDATE())=7  THEN  APrice  ELSE BPrice  END) AS Price
From Hotel

 

CASE WHEN (SELECT DATEPART(weekday,GETDATE())) in (1,7) THEN  HRSP_WeekenPrice  ELSE HRSP_Price  END AS Price

 

 -------------------------------------------------------------------------

Year 缩写 Yy, Quarter(季度) Qq ,Month Mm, Day of Year(一年中的第几天) Dy ,Day(一个月的第几号) Dd
Week wk, weekday Dw, Hour Hh, Minute mi,second ss
print '今天的日期是 '+ Convert(varchar(12),getdate(),101)
print '今年是 ' + Convert(varchar(12),Year(getdate()))
print '本月是 ' + Convert(varchar(12),Month(getdate()))+ '月'
print '今天是 ' + Convert(varchar(12),day(getdate()))+ '号'
print '后天是 ' + Convert(varchar(12),dateadd(Dy,2,getdate()),101)+ '号'
print '与7月20号还差 ' + Convert(varchar(12),datediff(Dy,getdate(),'07/20/2009'))+ '天'
print '现在是星期 ' + Convert(varchar(12),datepart(Dw,getdate()))

 

----------游标----------------------------------------------------------------

Create Procedure AccessEmployees
(
 @pCourtesy varchar(25),
 @pCursor cursor varying output--需要将创建游标返回给调用本存储过程的主过程,使用关键字varying output
)
as
begin
 set NoCount on
 set @pCursor = cursor static for
 select employeeID,firstName from employees where titleofCourtesy = @pCourtesy order by employeeID
 open @pCursor
 return 0
end


declare @gEmploy cursor
declare @lEmployeeID as int
declare @lfirstname as varchar(15)
declare @RecCount as int
declare @gCourtesy as varchar(25)
 
set @gCourtesy = 'Mr.' --'ms.'
Exec AccessEmployees @gCourtesy,@gEmploy output
if cursor_status('variable','@gEmploy') = 0
 begin
  print 'no records found'
  return
 end
else
 begin
  select @RecCount = @@Cursor_Rows
  while @RecCount > 0
  begin
   fetch from @gEmploy
   into @lEmployeeID,@lfirstname
   set @RecCount = @RecCount -1
   print '雇员号:'+convert(varchar(3),@lEmployeeID)+'雇员姓名:'+@lfirstname
  end
  close @gEmploy
  deallocate @gEmploy
 end
 
--上例没有在AccessEmployees 存储过程中释放游标变量@pCursor,因为在离开存储过程体时,已经将创建的游标传递给了@gEmploy,由于在存储过程
--AccessEmployees 之外,@pCursor 已失去其作用域,所以该变量占有的资源被自动是释放。无需再显式地释放它。

 

 

---------any()-----------------------------------------------------

select companyName,city from customers
where city = any
(select city from suppliers where customers.city = Suppliers.city)
order by city asc

 

---------exists()-----------------------------------------------------

select companyName,city from customers
where exists
(select * from Suppliers where customers.city = Suppliers.city)
order by city asc

 

-----子查询------------------
select ProductName,Productid,
(select count(productid) from [Order Details] od
where od.productID = ProductID and Products.Productid = od.productid)
as 订购次数 from products

 

-----Having子查询------------------.
select ProductID ,avg(unitprice),sum(quantity),avg(discount) from [Order Details]
group by productID  having sum(quantity) >1000 order by productid

 

-----avg(distinct,*)------------------
select ProductID ,avg(distinct,unitprice) as 平均单位值 from [Order Details]
group by productID
order by productID

 

汇总功能

Transact-SQL 提供的分类汇总功能有三个,分别是CUBE ( ),ROLLUP ( ),COMPUTE

 

 

------------------------------------------------------------

sp_helpdb --数据库名称,大小,所有者等
sp_helpfile --当前数据库物理文件所在的位置
use Master
exec sp_helpfile
sp_helpserver --返回当前数据库服务器及相关信息
sp_helpuser --返回当前数据库服务器上的所有用户
sp_helptext sp_helpdb --显示sp_helpdb 代码
sp_helptext sp_helptext
exec sp_stored_procedures -- 查看指定数据库中所含的存储过程
sp_who---列举当前正在访问数据库的各个进程的的状态信息
sp_helptrigger @tabname--查看触发器的相关信息
sp_changedbowner -- 更改当前数据库的拥有者

 

 

==========================sql server系统存储过程===================
–1.给表中字段添加描述信息
Create table T2 (id int , name char (20))
GO
EXEC sp_addextendedproperty 'MS_Description', 'Employee ID', 'user', dbo, 'table', T2, 'column', id

EXEC sp_updateextendedproperty 'MS_Description', 'this is a test', 'user', dbo, 'table', T2, 'column', id

–2.修改数据库名称
EXEC sp_renamedb 'old_db_name', 'new_db_name'

–3.修改数据表名称和字段名称
EXEC sp_rename 'old_table_name', 'new_table_name'–修改数据表名称
EXEC sp_rename 'table_name.[old_column_name]', 'new_column_name', 'COLUMN'–修改字段名称

–4.给定存储过程名,获取存储过程内容
exec sp_helptext sp_name

/*以下是有关安全控制的系统存储过程或 SQL 语句,详细语法查阅《联机丛书》相关内容*/

–创建新的 SQL Server 登录,使用户得以连接使用 SQL Server 身份验证的 SQL Server。
EXEC sp_addlogin @loginame = '', @passwd = '', @defdb = '', @deflanguage = NULL, @sid = NULL, @encryptopt = NULL
–使 Windows NT 用户或组帐户得以使用 Windows 身份验证连接到 SQL Server。
EXEC sp_grantlogin @loginame = ''

–删除 SQL Server 登录,以阻止使用该登录名访问 SQL Server。
EXEC sp_droplogin @loginame = ''
–阻止 Windows NT 用户或组连接到 SQL Server。
EXEC sp_denylogin @loginame = ''
–从 SQL Server 中删除用 sp_grantlogin 或 sp_denylogin 创建的 Windows NT 用户或组的登录项。
EXEC sp_revokelogin @loginame = ''

–更改登录的默认数据库。
EXEC sp_defaultdb @loginame = '', @defdb = ''
–更改登录的默认语言。
EXEC sp_defaultlanguage @loginame = '', @language = ''
–添加或更改 SQL Server 登录密码。
EXEC sp_password @old = '', @new = '', @loginame = ''

–添加服务器角色新成员。
EXEC sp_addsrvrolemember @loginame = '', @rolename = ''
–添加服务器角色某成员。
EXEC sp_dropsrvrolemember @loginame = '' , @rolename = ''

–为 SQL Server 登录或 Windows NT 用户或组在当前数据库中添加一个安全帐户,并使其能够被授予在数据库中执行活动的权限(授予默认的“public”数据库角色)。
EXEC sp_grantdbaccess @loginame = '', @name_in_db = NULL
–或
EXEC sp_adduser @loginame = '', @name_in_db = NULL, @grpname = ''

–从当前数据库中删除安全帐户。
EXEC sp_revokedbaccess @name_in_db = ''
–或
EXEC sp_dropuser @name_in_db = ''

–在当前数据库创建新数据库角色。
EXEC sp_addrole @rolename = '', @ownername = ''
–在当前数据库删除某数据库角色。
EXEC sp_droprole @rolename = ''

–在当前数据库中添加数据库角色新成员。
EXEC sp_addrolemember @rolename = '', @membername = ''
–在当前数据库中删除数据库角色某成员。
EXEC sp_droprolemember @rolename = '', @membername = ''

–权限分配给数据库角色、表、存储过程等对象
–1、授权访问
GRANT
–2、拒绝访问
DENY
–3、取消授权或拒绝
REVOKE
–4、Sample(pubs):
GRANT SELECT ON authors TO Limperator
DENY SELECT ON authors TO Limperator
REVOKE SELECT ON authors TO Limperator

 

 

 

 

 

 

 

以下来源:http://blog.csdn.net/t6786780/archive/2009/09/06/4525652.aspx

使用SQL Server 数据库基础

 

 

2.      数据库的管理

l       通配符

通配符

解释

实例

‘_’

一个字符

A LIKE ‘C_’

%

任意长度的字符串

B LIKE ‘CO_%’

[]

括号内制定范围内的一个字符

C LIKE ‘9W0[1-2]’

[^]

不再括号中所制定范围内的一个字符

D LIKE ‘9W0[^1-2]’

 

l       使用T-SQL语句对数据库管理

类型

语法

新建库

Use master(: 此功能用来控制进入master数据库)

Go(: 分割语句)

create database 表名

on

(

    name = '数据库名',(数据库名称)

    filename = 'D:/表名.mdf',(数据库路径)

    size = 10mb,(数据库初始化大小)

    maxsize = 100mb,(数据库最大大小)

    filegrowth = 10%(数据库增长速度)

)

新建表

create table UserInfo

(

    Id int identity(1,1) not null, (标识种子为1,增长一次+1)

    NickName char(10) not null,

)

添加约束

约束包含主键约束, 外键约束, 默认约束, 检查约束, 唯一约束

添加约束以: (alter table 表名 add constraint 约束名) 开头, 后面追加

主键约束: primary key (id);

外键约束: foreign key(从表列) references bool(主表列);

默认约束: unique (列名);

检查约束: check(列名 like ‘1_’);结合通配符使用

唯一约束: unique(列名);

 

注意: 约束名一定要符合规范

例如添加默认约束: UK_约束名. 以此类推

事务

begin tran

declare @errorSum int

set @errorSum=0

set @errorSum=@errorSum+@@error

if (@errorSum > 0) rollback tran

else commit tran

 

l       使用T-SQL语句对数据库数据管理

类型

语法

说明

插入数据

INSERT  [INTO]  表名(列名)  VALUES  (列名)

插入单行数据

INSERT 表名(列名)

SELECT 列值 UNION

SELECT 列值

插入多行数据

修改数据

UPDATE  表名 SET 列名 = 更新值 

WHERE 更新条件

一般情况下必须写更新条件

删除数据

DELETE  FROM 表名

WHERE 删除条件

删除单行数据

TRUNCATE  TABLE 表名

删除整个表中的数据

查询数据

SELECT 列名 FROM 表名

WHERE 查询条件表达式  

ORDER BY 排序的列名 [: ASCDESC(降序)]

排序查询

SELECT 列名 AS 命名

FROM 表名

在查询中使用列名

SELECT 列名

FROM 表名

WHERE 查询条件表达式

查询空行

SELECT 新命名 = 列名, ‘值命名  AS 新列命名

FROM 表名

在查询中使用常量列

SELECT TOP 限制的行数(填写数字) 列名

FROM 表名

WHERE查询条件表达式

返回限制的行数

SELECT *

FROM 表名

WHERE查询条件表达式 LIKE 'ACCP%'

使用LIKE模糊查询

SELECT *

FROM 表名

WHERE 表名 BETWEEN 条件一 AND 条件二(: NOT)

在某个范围内进行查询

SELECT * FROM 表名

WHERE  列名 IN (列值1, 列值2)(:Not)

使用IN在列举值内进行查询

SQL SERVER中使用的聚合函数

SUM – 总和

Avg – 平均值

MAS(最大值) Min(最小值)

COUNT(非空值的计数)

WHERE

*

GROUP BY

*

HAVING

(使用WHERE,GROUP BY,HAVING的优先级)

在查询中使用的聚合函数

SELECT COUNT(列名),列名

FROM 表名

GROUP BY 列名

分组查询(在分组查询的同时必须使用聚合函数)

HAVING 查询条件表达式

(举例: COUNT(Uclass) > 1)

使用Having子句进行分组筛选

内连接查询

SELECT 表名1.列名,表名2.列名

FROM 表名1

INNER JOIN 表名2 ON (条件表达式)

: INNER JOIN *** ON 是内连接查询用的关键字,其中表名可以简化,但是前提在 FROM 中必须指示简化的表名是来源于哪个表

(举例:S.列名 FROM 表名 AS 列名或 INNER JOIN 表名)

外连接查询

SELECT 表名1.列名,表名2.列名

FROM 表名1

LEFT OUTER JOIN 表名2 ON 条件表达式

左外连接,

与内连接不同的是,如果附表中数据不能满足主表则以NULL填充……

SELECT 表名1.列名,表名2.列名

FROM 表名1

RIGHT OUTER JOIN 表名2 ON 条件表达式

左外连接(同上)

         

l       在查询中使用的函数

函数类型

函数名

描述

举例

CHARINDEX

用来寻找一个指定的字符串在另一个字符串中的起始位置

SELECT CHARINDEX

('ACCP','MYACCPCOURSE',1)

返回: 3

LEN

返回传递给他的字符串长度

SELECT LEN

('MYACCPCOURSE')

返回:12

UPPER

把传递给他的字符串转换为大写

SELECT UPPER

('system') 返回: SYSTEM

LTRIM

清除字符左边的空格

 

RTRIM

清除字符右边的空格

 

RIGHT

从字符串右边返回指定数目的字符串

SELECT RIGHT

('北大青鸟',2)

返回: 青鸟

 

替换一个字符串中的字符

 

STUFF

在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符串

SELECT STUFF

('谢霆锋的老婆是谁',8,8,'张柏芝'

) 返回: 谢霆锋的老婆是张柏芝

GETDATE

取得当前的系统日期

SELECT GETDATE()

返回: 今天的日期

DATEADD

将指定的数值添加到指定的日期部分后的日期

SELECT DATEADD(dd,4,'01/01/2007')

返回: 2007-01-05 00:00:00.000

DATEDIFF

两个日期之间的指定日期部分的区别

SELECT DATEDIFF(dd,'01/01/2007',

'01/04/2007') 返回: 3

DATENAME

日期中指定日期部分的字符串形式(dd,mm,dw,yy)

SELECT DATENAME(dw,'01/05/2009')

返回: 星期一

DATEPART

日期中指定日期部分的整数形式

SELECT DATEPART(YY,'01/05/2009')

返回: 2009


本文转载:CSDN博客