前言:SQL数据库的第二节课,继续讲解基本的语句及用法。
内容:
1.insert插入语句
insert into Book(bookName,bookPrice,bookAuthor) values('C#基础',35,'li') //向Book表中插入相关信息
2.update修改语句
update Book set bookPrice=30 where bookName='C#基础' //修改Book表
3.delete删除语句
delete Book where bookName='C#基础'
4.查找指定区域中的记录,分页
select * from (select id,row_number() over(order by id desc) as row from[entry]) Entry where row between 1 and 5000
5.给表添加一个字段:
alter table Book add press nvarchar(20) null
6.删除表
drop table Book
7.约束:一张表只能有一个PK,但可以有多个UNIQUE约束,PK约束定义主键不能为空,但UNIQUE可以为空值。check约束一个键值,实现域完整性。可以用SQL语句或者可视化的方法去实现。
8.选择出生年月日:
select year(getdate()) //获取当前的年
select month(getdate()) //获取当前的月
select day(getdate()) //获取当前的日
select * from Employee where month(birthday)=8 //查询8月份过生日的员工的所有信息
select * from Employee where year(birthday)=2008 and month(birthday)=8 and day(birthday)=12 //查询出生日为2008-8-12日的所有员工信息
select dateadd(yy,100,getedate()) //当天加上100年的时间
select datediff(mm,getdate(),'2108/12/31') //当天距离2108/12/31还有多少年
9.isnull表示判断是否为空:select title,content,isnull(categoryID,0) from news //表示为null的categoryID用0显示出来
10.case用法,用来做判断。
(1)查找categoryID=13的state,并对state进行判断
select state, case
when(state=1) then '待审'
when(state=2) then '已审'
end as pro_state
from category where categoryID=13
(2)查找出低级的多少个,中级的多少个,高级的多少个
select Count(*) as [Count] from category
group by
case
when categoryID<15 then '低级'
when categoryID between 15 and 20 then '中级'
else '高级'
end
(3)查出category 中的CategoryID,name以及判断每个categoryID 的大小
select CategoryID,name,
case
when categoryID<15 then '低级'
when categoryID between 15 and 20 then '中级'
else '高级'
end as categoryRange from category
11.索引,主要用于性能的维护。
(1)概念:表的存储由两部分组成,一部分用来存放数据页面,另一部分用来存放索引页面。索引是快速查找数据库中实际信息的一种 方法,具体分为:聚集索引(每个表只能有一个聚集索引,它对应的表按照其索引进行物理排序,相当于百科全书里的页码。默认的聚集索引即为主键)、非聚集索引(每个表可以有多个非聚集索引,相当于百科全书后面的关键字目录)。
(2)建立索引可以通过右击->索引/键来生成。
(3)建立索引时需要注意的:
1)默认情况下,SQL Server会默认主键为聚集索引,这样会造成资源浪费。
2)顺序问题
3)索引的维护:数据库系统运行一段时间后,随着数据行的插入、删除和数据页的分裂,索引对系统的优化性能就会大大降低,这时我们需要对索引进行分析和重建。
12.视图:一种虚拟表,其使用和表的使用类似,主要用于控制用户所要显示的数据(视图的本质就是联合查询)。老师不太喜欢用视图,修改表中的数据时需要同步视图中的数据,可能要手动修改,比较麻烦,直接在程序里写代码就行了。
13.存储过程:
(1)优点:在创建时进行编译,以后每次执行存储过程不需要再编译,而一般的SQL语句要每执行一次编译一次(所以一些复杂逻辑的SQL建议写在存储过程里面);存储过程重复使用,可以减少数据库开发人员的工作量(所以一些经常被调用的SQL建议写在存储过程里面);安全性高,可设定只有某些用户才具有指定存储过程的使用权。
(2)基本语法:
1)创建一个存储过程:
create proc procCategory
{
@name nvarchar(200),
@age int
}
as
select * from Category where name=@name and age=@age
2)查看结果:
exec procCategory 'zoe',11
3)更改存储过程:
alter proc
4)删除存储过程:
drop proc
5)控制流语句:
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'
14.触发器:是一种特殊的存储过程,它是在数据进行增、删、改的时候同时进行的操作,相当于一个事件。
15.SQL备份及还原:(1)(bak文件)选中相应的数据库右键->任务->备份;(2)找到创建数据库时创建的两个文件:.mbf及_log.ldf文件,附加进去则可以。
16.数据的导入导出功能:右键->任务->导出,数据导入到新表之后主键会丢失,需要自己手动设置。
17.作业功能:自动执行一个事件,设定时间。只要数据库是开着的,作业就会定时去执行。
后记:两节课已经上完了,基本上可以了解如何使用了,但还想进一步学习,所以打算这周系统的学习一下。