SQL Server知识点回忆篇(四):case函数,索引,子查询,分页查询,视图,存储过程
1. CASE函数(相当于C#中的Switch)
select UserName,Age,类别=case when Age<18 then '未成年人' else '成年人' end from tbUsers
2. 索引 index
聚集索引(物理):一个表只能有一个。创建一个表时,如果有主键,主键会自动创建聚集索引。
非聚集索引(逻辑):一个表可以有多个。
增加索引后,会增加额外的存储空间开销,降低了增加新纪录、修改、删除的效率。
建索引:索引应该建在经常查询时用到的列上,查询时用到才有意义。数据量大时,使用有索引的列查询,效率会大幅度提高。
语法格式: create index 索引名称 On 表名(列名)
create index Ix_UserName On tbUsers(UserName)
3. 子查询
查询出的结果供外层的查询使用。
select * from tableA where id=(select id from tableB where Name='小胡子')
4. 分页查询
使用row_number()实现分页
思路:比如说要实现每页有10条记录的分页,获取第8页的数据。那么第8页的第一行的行号是前7页的总行数加1,第8页的最后一行的行号是8*10 。
那么每一页的第一行是(n-1)*10+1, 最后一行是n*10。要取第几页的数据,n就传入第几页。
select * from (select *,iRowNumer=row_number() over(order by id asc) from tbUsers) r where r.iRowNumer between (8-1)*10+1 and 8*10
5. 视图
视图里只能存查询语句。如果视图查询语句中有重名的列,必须起别名。
创建视图:
create view vw_Users as select * from tbUsers
从视图查询:
select * from vw_Users
6. 存储过程
数据库中默认存在的以sp_开头的是数据库系统的存储过程。
exec sp_databases: 返回实例中的所有数据库
exec sp_tables: 返回当前数据库下的所有表
exec sp_columns: 用于获取指定表中的所有列(例:exec sp_columns 'tbUsers' )
exec sp_helptext 'sp_databases' :获取sp_databases源代码
创建存储过程:
create proc usp_sayHello as begin print 'Hello World' end
执行存储过程:
exec usp_sayHello
创建带参数的存储过程:
create proc usp_add @num1 int, @num2 int as begin select @num1+@num2 end
执行带参数的存储过程:
exec usp_add @num1=100,@num2=200