菜鸟的sql server

bit 布尔类型
int nvarchar datetime 常用类型
nvarchar(max) 存文章(不超过5000)
字符串 用 ‘‘
1. char/nchar,varchar/nvarchar

char(10) 只能放五个中文,定长,如果只放一个字节,后面就是九个空格(一个中文两个字节)
nchar(10) 放十个中文,定长

varchar(10)放五个中文,变长,如果只放一个字节,就只放一个字节
nvarchar(10)放十个中文,变长。。。。。。。

2.创建一个数据库,在数据库里面创建表,以及添加表里面的项
create database TestDB

create table UserInfor
(
UserId int primary key not null,
UserName nvarchar(50),
Pwd nvarchar(50),
RealName nvarchar(50),
QQ nvarchar(50),
Sex nvarchar(50),
Age int,
ClassName nvarchar(20),
Major nvarchar(20),
Birthday datetime
)

3.select语句用法
select * from UserInfor
select UserId,UserName from UserInfor
select * from UserInfor where (Major=‘计算机‘ or ‘电子商务‘) and Sex = ‘女‘ order by Age
select top 2 * from UserInfor where (Major=‘计算机‘ or ‘电子商务‘) and Sex=‘女‘ order by Age desc
select top 2 * from UserInfor where Major in(‘计算机‘ , ‘电子商务‘) and Sex=‘女‘ order by Age desc

select Max(Age) from UserInfor
select Min(Age) from UserInfor
select Avg(Age) from UserInfor
select * from UserInfor where Age >
(
     select Avg(Age) from UserInfor
)
select SUM(Age) from UserInfor

select count(*) as UserCount from UserInfor where Major=‘计算机‘
--分组
select count(*) as UserCount,Marjor from UserInfor group by Major having count(*)>3

--模糊查询
select * from UserInfor where RealName like ‘%刘%‘ 

--去除重复数据
select distinct RealName from UserInfor 

分页:
查询的区间要连贯 select row_number() over(order by UserId)
select top 5 *
from
(
--查询出所有行号并取别名
select row_number() over(order by UserId) as rownumber,* from UserInfor
) A
where rownumber >0
--rownumber >0 1-5 第一页
--rownumber >5 6-10 第二页
--rownumber >10 11-15 第三页
--rownumber >0 16-20 第四页
。。。。

select UserId,Age
case
when Age>=20 and Age<=30 then ‘大一‘
when Age>=24 and Age<=26 then ‘大二‘
else ‘大三‘
end as UserGrade from UserInfor

select * from UserInfor where Age>=20 and Age<=24
select * from UserInfor where Age between 20 and 24

select * UserId isnull(ClassName,‘一班‘) from UserInfor 

--获取系统默认时间
datetime--->getdate()
select year(getdate()) --获取当前年
select year(getdate()) --获取当前年
select year(getdate()) --获取当前年

其他的:
select * from employ where month(birthday)=8   // 打印出8月份过生日的员工的所有信息
select * from employ where year(getdate())-year(birthday)>25// year(getdate())为当前年份,打印出年龄大于25岁的员工的所有信息
select * from employ where year(birthday)=2008 and month(birthday)=8 and day(birthday)=12 //打印出生日为2008-8-12日的所有员工信息

select dateadd(yy,100,getdate())//当天加上100年的时间,getdate()也可以换成具体的某一天比如写成:‘2108/12/31‘
select dateadd(mm,1,getdate())//当天加上1个月的时间
select dateadd(dd,100,getdate())//当天加上100天的时间

select datediff(yy,getdate(),‘2108/12/31‘)//当天距离2108/12/31还有多少年
select datediff(mm,getdate(),‘2108/12/31‘)
select datediff(dd,getdate(),‘2108/12/31‘)

create table StuScore
(
ScoreId int primary key not null,
UserId int,
MathScore float,
ChineseScore float,
PCScore float
)
--联合查询
select UI.UserId,UI.UserName,UI.QQ,UI.RealName,SS.ScoreId,SS.ChineseScore form UserInfor UI.StuScore left join StuScore SS
on UI.UserId=SS.UserId      --以左边的表为准

select UI.UserId,UI.UserName,UI.QQ,UI.RealName,SS.ScoreId,SS.ChineseScore form UserInfor UI.StuScore right join StuScore SS
on UI.UserId=SS.UserId      --以右边的表为准

select UI.UserId,UI.UserName,UI.QQ,UI.RealName,SS.ScoreId,SS.ChineseScore form UserInfor UI.StuScore inner join StuScore SS
on UI.UserId=SS.UserId --两边都有

create table Parent
(
ParentId int primary key not null,
UserId int,
MMName nvarchar(50),
FatherName nvarchar(50)
)

---三张表的联合查询
select UIS.*,SP.MMName,SP.FatherName from
(
select UI.UserId,UI.UserName,UI.QQ,UI.RealName,SS.ScoreId,SS.ChineseScore form UserInfor UI.StuScore inner join StuScore SS
on UI.UserId=SS.UserId
) UIS inner join Parent SP
on UIS.UserId=SP.UserId

insert into Parent values(‘2‘,‘大西街‘,‘回合肥‘) --主键自增不用添加
insert into Parent (UserId,MMName,FatherName) values(‘2‘,‘大西街‘,‘回合肥‘ )

update Parent set MMName=‘sss‘,ParentName=‘fff‘ where ParentId=6
delete Parent where ParentId=6 --删之前一定要备份

create table A
(
AId int primary key not null,
UserId int,
AMMName nvarchar(50),
AFName nvarchar(50)
)

--复制数据
insert into A(UserId,AMMName,AFName) select UserId,MMName,FartherName from Parent

--约束:
右键-check-表达式-保存

一、 索引
(1) 概述
表的存储由两部分组成,一部分用来存放数据页面,另一部分存放索引页面。
索引的功能类似百科全书中的目录,使用索引是快速查找数据库中实际信息的一种方法。
索引分为:
聚集索引--------每一个表只能有一个聚集索引,它对应的表按照其索引进行物理排序,对于百科全书,聚集索引就类似于书的页码,按页码顺序保存着百科全书的信息。
非聚集索引-------每一个表可以有多个非聚集索引,对于百科群书,非聚集索引指的是百科全书后面的关键字目录。
(2)两者选择
情况描述                                   使用聚簇索引            使用非聚簇索引 

用于返回某范围内数据的列                     应                      不应 

经常被用作分组排序的列                        应                       应 

小数目不同值的列                                 应                      不应 

连接操作使用的列                              应                       应 

频繁更新、修改的列                            不应                       应 

一个或极少不同值的列                         不应                      不应 

大数目不同值的列                               不应                       应
(3)创建索引时注意事项
1) 默认情况下,SQL Server会默认主键为聚集索引,这样会造成资源的浪费。

假设病人费用表名为“brfy”,其中住院号字段名为“zyh”,日期字段名为“riqi”,要求是从表brfy中检索zyh为“028246”的病人2005年3月1日到20日的费用,对应的SQL语句如下:
Select * from brfy where zyh=’028246’ and riqi>=’20050301’ and riqi<=’20050320’;
第一种情况,用ID列建立聚簇索引,不为zyh和riqi建立索引,查询时间为87秒。
第二种情况,用ID列建立聚簇索引,为zyh和riqi两列建立非聚簇索引(zyh在前),查询时间为33秒。
第三种情况,用zyh和riqi两列建立聚簇索引(zyh在前),查询时间为2秒。
由以上分析可以看出聚簇索引是非常宝贵的,应该为经常用于检索某个范围内数据的列或group by、order by等子句的列建立聚簇索引,这样能够极大的提高系统性能。

2)顺序问题
在第二、第三种情况下,如果把riqi放在zyh前面,执行上述SQL语句就不会用到这两个索引,检索的时间也会变得很长。应该按照顺序来。

3) 索引的维护
数据库系统运行一段时间后,随着数据行的插入、删除和数据页的分裂,索引对系统的优化性能就会大大降低。这时候,我们需要对索引进行分析和重建。
SQL Server使用DBCC SHOWCONTIG确定是否需要重建表的索引。在 SQL Server的查询分析器中输入命令:
Use database_name
Declare @table_id int
Set @table_id=object_id (‘Employee‘)
Dbcc showcontig (@table_id)
在命令返回的参数中Scan Density 是索引性能的关键指示器,这个值越接近100%越好,一般在低于90%的情况下,就需要重建索引。重建索引可以使用DBCC DBREINDEX,使用方式如下:
dbcc dbreindex(‘表名‘, 索引名, 填充因子)       /*填充因子一般为90或100*/
如果重建后,Scan Density还没有达到100%,可以重建该表的所有索引:
dbcc dbreindex(‘表名‘, ‘‘, 填充因子)

右键-索引-重新组织-重新生成
右键-索引-删除

(4)如何建索引
1 在“索引/键”对话框中单击“添加”。
2 从“选定的主/唯一键或索引”列表中选择新索引。
3 在网格中选择“创建为聚集的”,然后从该属性右侧的下拉列表中选择“是”。保存表时将在数据库中创建索引。

二、 视图
视图是一种虚拟表,它的使用基本和表的使用类似,主要目的是控制用户所要显示的数据。
创建一个视图:
Eg:
create view CurrentEmployees_vw
as
select categoryID,[name],age from Category
where state=1

在Management stodio中编辑视图(方法略)

三.存储过程
1)优点:在创建时进行编译,以后每次执行存储过程不需要再编译,而一般的SQL语句要每执行一次编译一次(所以一些复杂逻辑的SQL建议写在存储过程里面);存储过程过重复使用,可减少数据库开发人员的工作量(所以一些经常被调用到的SQL建议写在存储过程里面);安全性高,可设定只有某些用户才具有指定存储过程的使用权。

1)基本语法
Eg:
create proc procUserInfor
(
 @UserName varchar(50),
 @Pwd nvarchar(50)
)
as
select * from UserInfor where [email protected] and [email protected] ---登录时用到的语句可以用存储过程
2) 查看结果exec procUserInfor ‘萨顶顶‘,‘45612‘
3) 更改/删除存储过程
ALTER proc
Drop proc

4)流控制语句
Eg:
create proc procNewsInsert
(
  @creatTime datetime
)
as
if datediff(dd,@creatTime,getdate())>7  /*creatTime距离当天大于天*/
begin;
select * from News
end;
else
begin;
select top 3* from News
end;

执行:exec procNewsInsert ‘2009-05-10 11:36:43.810‘

结果:

四 触发器
触发器是一种特殊的存储过程,它是在数据在进行增、删、改的时候同时进行的操作,相当于一个事件。
新建一个触发器:

写的脚本:
Eg1:
create trigger trigCategoryDelete
  ON  Category
  after delete /* 有三种INSERT,DELETE,UPDATE*/
AS
begin
    select * from deleted /*在删除后同时查出删除后的内容*/
end
GO

执行:

Eg2:
create trigger trigCategoryDelete
  ON  Category
  instead of delete /* instead of,表示当执行删除的时候这个删除语句被begin下面的语句所代替*/
AS
begin
    declare @id int
select @id=id from deleted
delete news where caID=@id
delete category where id=@id
end
GO

执行:
delete from category where id=5 /*这样就可以删除category里面id=5的东东的同时删除news里面id=5的东东了 */

backup database TestDB to disk=‘h://123.bak‘
时间: 2024-10-15 07:28:50

菜鸟的sql server的相关文章

SQL Server中的索引结构与疑惑

说实话我从没有在实际项目中使用过索引,仅知道索引是一个相当重要的技术点,因此我也看了不少文章知道了索引的区别.分类.优缺点以及如何使用索引.但关于索引它最本质的是什么笔者一直没明白,本文是笔者带着这些问题研究msdn的一点小结以及一大堆疑惑. 1.表结构 当开发者在数据库中创建一个表时,此时默认为这个表创建了一个分区,注意是一个分区.分区是一种数据组织单元,在这个分区中可存在2种结构,分别是堆结构或B树结构(索引结构),也就是说一个分区里要么是堆结构要么是B树结构.为了在某些方面提高性能以及便于

SQL Server 2005恢复数据库详细图文教程

不少需要用到sql2005的程序,有很多新手还是会操作,这里写个详细的图文教程送个菜鸟们,高手请飘过.适用于独立主机的朋友使用,如果你还没安装,请按照这个教程来安装 SQL Server 2005图文安装教程,超详细 下面是SQL Server 2005恢复数据库的详细过程 1:打开SQL Server Management Studio并登录,这个一般在开始--程序里面找到 2:鼠标右键单击数据库--新建数据库 3:弹出来的框里,填写数据库名称,我这里填写的是sqlqtdy,这个根据自己需求来

二、个人总结的菜鸟教程|sql教程的知识点(SQL高级教程)

二.SQL高级教程 1.SQL SELECT TOP SELECT TOP 子句用于规定要返回的记录的数目. SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的. 注释:并非所有的数据库系统都支持 SELECT TOP 子句. sql server|ms access语法 select top number|percent column_name from table_name; mysql|oracle语法(与top等价) select Column_name from t

SQL Server 2008 没有可用于 charge_sys_Log.LDF 的编辑器

因为上网问题重新装了系统.今天在整 SQL Server  的时候出现了这样一个问题. 因为之前装 SQL Server  的时候没有遇到过这种情况,感觉很新奇.所以详细的记录一下,希望对别人能有一定的帮助,在这个情况之前是 用 Windows 验证的. 采用比较传统的.之前没有出错过的加载方式  文件 --->打开--->文件.  然后就出现了图一的那种情况.后来通过上网查.对 SQL Server  的胡乱点击 知道 了另外一种加载数据库的方法, 右击数据库,有一个 “附加”   然后一看

Sql Server (MSSQLSERVER) 服务无法启动

北京的冬天特别干燥,大清早的一同事就和服务器擦出了爱的火花,结果没想到竟导致服务器无法开机了,这可尴尬了,代码可都在服务器上托管着呢,一会还等着上线呢,必须得修啊.他们说是主板坏了,就另外找了一台电脑,直接把服务器的硬盘和内存换了过去(系统什么的都在硬盘上面),晓菜鸟第一次见这么修电脑的,没想到开机竟然直接能使,真是神奇啊!经过测试意外的发现数据库无法链接,一看是MSSQLSERVER服务未启动,可是启动服务的时候竟然出错了,昨天晚上还用的好好的,真是奇怪了! 下面是错误提示信息: 请求失败或服

SQL Server 参数嗅探问题

本文非原创,来源于网络,作为记录为以后查看 http://mysql.taobao.org/monthly/2016/10/10/ 摘要 MSSQL Server参数嗅探既是一个涉及知识面非常广泛,又是一个比较难于解决的课题,即使对于数据库老手也是一个比较头痛的问题.这篇文章从参数嗅探是什么,如何产生,表象是什么,会带来哪些问题,如何解决这五个方面来探讨参数嗅探的来龙去脉,期望能够将SQL Server参数嗅探问题理清楚,道明白. 什么参数嗅探 当SQL Server第一次执行查询语句或存储过程

菜鸟学sql,Oracle数据库结构比较

转载自:http://www.cnblogs.com/tianqing/archive/2008/06/25/1229419.html 做oracle下数据库结构比较,比较具体详细差异,例如:2个库具体有那些表不同,不同在什么地方,主键.长度.类型......,要求是用一句sql实现,对于我这个sql菜鸟来说,的确是个挑战.好在有个SQL Server例子可以借鉴.先贴一下oracle下的sql --------------------------------------------------

谈谈Sql server 的1433端口

相信大家都对sql server实例名的tcp/ip协议不陌生吧,ip地址里面有个tcp端口,初学者在网上搜罗教程,都是说将其配置为1433.呵呵,我也不例外. 我今天深受其坑,公司服务器的1433不幸被黑客扫描到了,以每秒50次的频率,发送请求,企图以字典碰撞方式,暴力破解sql server 数据库的sa密码,累计了好几个月,log文件夹都有十多个G了. 在小公司我们不单单是个码农,课件制作,服务器维护,打印机维修,电脑维修,手机维修,打扫卫生,都要做,做好一个全能骑士,做好一个奶妈,哈哈.

导入txt文件到SQL SERVER 2008

最近在学习数据库,想要试处理大量数据.大量的数据手动输入是不可能的了,所以需要导入.本人上网看了不少的教程,然后下载了txt格式的一万条彩票开奖记录数据.但是把这些数据导入到SQL Server 2008中仍然花费了一天半的时间.上网上找的教程始终没有很好的解决我在导入过程中的遇到的问题.为此写这篇博客以供参考!下面先图解导入步骤,最后再说注意事项.(本篇博客只对菜鸟有用) 第一步,打开导入导出工具.(win7 32位系统下SQL自带,64位系统下好像要装) 第二步,选择源文件的格式.这里txt