set statistics time on--开启客户端分析 on/off
set nocount on--不返回计数 on/off
set statistics profile off--用于分析SQL 语句 on/off
use master
go
if exists(select * from sysdatabases where name = 'msstudy')
drop database msstudy
go
create database msstudy
go
use msstudy
go
create table t_user(
userid int primary key identity(1,1),
userName varchar(20) not null,
userAge int
)
create table t_role(
roleid int primary key identity(1,1),
roleName varchar(20) not null
)
create table t_user_role(
infoid int primary key identity(1,1),
userid int references t_user(userid) not null,
roleid int references t_role(roleid) not null
)
insert into t_user values('小胖',16);
insert into t_user values('大胖',16);
insert into t_user values('胖子',41);
insert into t_user values('胖胖',21);
select @@identity --查询当前 identity 值
insert into t_role values('google');
insert into t_role values('JavaEye');
insert into t_role values('CSDN');
insert into t_role values('isw');
insert into t_user_role values(1,1);
insert into t_user_role values(1,2);
insert into t_user_role values(3,2);
insert into t_user_role values(3,3);
if exists(select * from sysobjects where name = 'pro_first')
drop procedure pro_first
go
create procedure pro_first
as
declare @count int,@temp int
set @count = 100000;
while(@count > 0)
begin
insert into t_user values ('测试',24)
select @temp = @@identity,@count = @count - 1
insert into t_user_role values(@temp,4)
end
go
exec pro_first;
select * from t_user
select * from t_role
select * from t_user_role
exec sp_help t_user --用于分析相关对象
select distinct username from t_user -- distinct 用于去除重复项
select username from t_user group by username --这里的gourp by 达到了和 distinct 同样的效果
--compute 用于汇总查询,注意在与order by 合用时 compute by 要一致
select userid ,username from t_user where userid < 10 compute count(username) compute sum(userid)
select userid ,username from t_user where userid < 10 order by username compute count(username) by username
--row_number(),rank(),dense_rank() 用于分组排序,注意区分它们的不同
select row_number() over(partition by username order by username) as num,userid ,username from t_user where userid < 10 order by num
select row_number() over(order by username asc) as num,userid ,username from t_user where userid < 10 order by num
select rank() over(order by username asc) as num,userid ,username from t_user where userid < 10 order by num
select dense_rank() over(partition by username order by username) as num,userid ,username from t_user where userid < 10 order by num
--over 用于代替子查询
select userid, count(userid) over(partition by username) as user_count,username from t_user where userid < 10
select userid, (select count(userid) from t_user where username = tu.username and userid < 10) as user_count,username from t_user as tu where userid < 10
--union
select username from t_user where userid < 5
union
select username from t_user where userid >= 5 and userid < 10
--union all 注意和 union 的区别
select username from t_user where userid < 5
union all
select username from t_user where userid >= 5 and userid < 10
--intersect 注意它们都有distinct的作用
select username from t_user where userid < 8
intersect
select username from t_user where userid > 3 and userid < 10
--except 注意它们都有distinct的作用
select username from t_user where userid < 8
except
select username from t_user where userid > 3 and userid < 10
--事务 多用于触发器,存储过程
begin transaction
update t_user set username = '小米' where userid < 10
select * from t_user where userid < 10
rollback transaction --用于回滚事务
--commit transaction 用于提交事务
select * from t_user where userid < 10
--建立临时表
with temp_table (infoid,roleinfo,userinfo)
as
(
select infoid , tu.username as username, tr.rolename as rolename from t_user_role as tur ,t_user as tu,t_role as tr where infoid < 10 and tur.userid = tu.userid and tur.roleid = tr.roleid
)
select * from temp_table
--定义一个游标
declare cursor_info cursor for select * from t_user where userid < 10
--打开游标
open cursor_info
--读取内容
declare @userid int
declare @username varchar(20)
declare @userage int
fetch next from cursor_info into @userid, @username,@userage
select @userid, @username,@userage
--关闭游标
close cursor_info
--删除游标
deallocate cursor_info
sp_help t_role--查看表信息
--查询identity 值
select @@identity
--查询所有数据库
exec sp_databases
--创建索引
if exists(select * from sysobjects where name = 'index_role')
drop index t_role.index_role
go
create index index_role --unique 唯一索引,clustered 聚集索引(主键包括聚集索引一张表只能有一个聚集索引),noclustered 非聚集索引
on t_role(rolename)
--创建视图
if exists(select * from sysobjects where name ='view_info')
drop view view_info
go
create view view_info
--添加 with encryption 用于加密视图
as
select infoid ,tr.rolename ,tu.username from t_user_role as tur ,t_user as tu ,t_role as tr where infoid < 10 and tur.userid = tu.userid and tur.roleid = tr.roleid
go
select * from view_info
--创建存储过程
create procedure pro_role
--无参
as
select * from t_role
go
exec pro_role
if exists(select * from sysobjects where name = 'pro_invalue')
drop proc pro_invalue
go
--入参(含默认值)
create procedure pro_invalue @inFirst int = 4,@inSecond int = 14
as
select * from t_user where userid = @inFirst or userid = @inSecond
go
exec pro_invalue
exec pro_invalue default,51--后一个参数需指定
create proc pro_outvalue @out int output
as
select @out = max(userid) from t_user
go
declare @num int
exec pro_outvalue @num output--注意output
select @num
--触发器
create trigger tri_role on t_role
for insert
as
begin
select * from inserted
-- delect 时查询 deleted 而update 分别查询 deleted ,inserted
end
go
insert into t_role values ('aa')
--instead of 触发器 它并不执行操作,而是执行触发器本身
create trigger tri_user on t_user
instead of delete
as
begin
select * from deleted
end
go
delete t_user where userid = 1--这里delete 操作并没有提交
select * from t_user where userid < 10
分享到:
相关推荐
SQL2005是微软公司推出的SQL Server数据库管理系统的一个重要版本,它在SQL Server 2000的基础上进行了大量的改进和增强,旨在提供更高效、更安全的数据管理和分析能力。以下是一些关于SQL2005的核心知识点: 1. **...
本书重点阐述了SQL Server 2005的基础知识,前半部分以建立一个金融数据库系统为主线,从最基础的收集信息入手,一步步地引导读者学会如何保证数据库的安全,创建表、主键、索引等项目,在表之间建立恰当的关系,并...
这个示例是初学者接触.NET和SQL Server开发的良好起点,同时对有一定经验的开发者来说,也是一个回顾基础知识和实践编程技巧的好材料。通过深入学习和实践,可以进一步提升对这两款工具的理解和应用能力。
SQL语气集合建库建表约束存储过程回滚等
- **了解Microsoft SQL Server的发展历程**:回顾自1987年至2005年间,SQL Server的发展历史及重要版本的发布时间。 - **掌握SQL Server系统的体系结构**:理解SQL Server 2005的核心组件及其工作原理。 - **熟悉...
"数据库总复习.rtf"很可能是对整个数据库系统,包括SQL Server 2005基础的综合回顾,涵盖了数据类型、表的创建与修改、索引、视图等重要概念。 "三个表连接示意图.bmp"和"join on 示意图.bmp"可能是视觉辅助工具,...
SQL Server 2005 ETL专家系列之一:SQL Server ...本单元将介绍ETL在企业数据管理工作的重要性,同时我们将简单回顾SQL Server 2000的DTS服务,并介绍SQL Server 2005 Integration Service的基本架构以及其基本功能。
**SQL2005 教学资源概述** SQL Server 2005 是微软公司推出的一款功能强大的关系型数据库管理系统,广泛应用于企业级数据管理和分析。本教学资源包含了一套全面的PPT理论课件和DOC上机练习,旨在帮助学习者掌握SQL ...
### 使用VS 2005和SQL Server 2005创建连接的知识点详解 #### 一、背景介绍 在开发基于.NET Framework的应用程序时,经常需要与数据库进行交互。Visual Studio 2005(简称VS 2005)作为当时主流的开发工具之一,...
**SQL Server 2005** 是微软公司推出的一款关系型数据库管理系统,是SQL Server系列中的一个重要版本。它在数据库管理、数据存储、查询优化、安全性等方面都有显著提升,为开发者和企业提供了强大的数据管理和分析...
- **报告与日志**:生成性能报告,提供详细的查询历史记录,便于问题排查和性能回顾。 - **报警机制**:设置阈值,当特定查询或资源使用超出预设范围时触发报警,确保问题及时发现。 2. **应用场景**: - **故障...
SQL基础回顾将带我们重新审视其核心概念和重要操作。这篇博文链接(https://yztxlty.iteye.com/blog/1685009)可能包含了作者对SQL基础知识的详细讲解,虽然具体内容无法直接提供,但我们可以基于一般SQL知识进行...
《SQL Server 2005管理学习全集》是一套专为初学者设计的PPT教程,涵盖了数据库管理系统的基础知识到高级应用。SQL Server 2005是微软推出的一款强大的关系型数据库管理系统,它在数据存储、处理和分析方面具有广泛...
查询历史记录保存了用户执行过的SQL语句,方便回顾和复用。结果集管理则提供了灵活的方式来查看、操作和导出查询结果,有助于数据的分析和处理。 总的来说,SQL Assist是一款全面的SQL Server开发辅助工具,它的...
《长沙牛耳SQL2005(3)》章节主要针对SQL Server数据管理进行回顾,适合初学者学习。本章内容涵盖了SQL语言的基础知识,包括数据完整性、数据类型、检查约束、表字段设置以及SQL语句的基本操作。下面将详细阐述这些...
本知识要点将围绕数据库设计、SQL基础语句、T-SQL编程以及关键字回顾四个方面展开。 一、数据库设计 1. 数据库的系统模型: - 层次型数据库:以树状结构组织数据,每个记录只有一个父记录,但可以有多个子记录。 ...
### 精妙Sql语句大回顾 #### 数据定义语言(DDL)与数据控制语言(DCL) 在数据库管理中,数据定义语言(Data Definition Language, DDL)和数据控制语言(Data Control Language, DCL)是两个重要的组成部分。DDL...
首先,我们来回顾一下SQL Server的概述。作为一款关系型数据库管理系统,SQL Server旨在为企业级用户提供一个全面的解决方案,以实现数据存储、管理和分析的需求。它的灵活性和稳定性吸引了众多开发者和数据库管理员...