码迷,mamicode.com
首页 > 数据库 > 详细

黑马自学SQLSERVER进阶

时间:2015-10-15 18:30:25      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:

Case

在数据库中,对数据进行比对 2种方式

 

第一种方式,不对任何列进行case

 

select name,case when age>16 then ‘成年

when age<16 then ‘未成年 end as ‘成年

 from Student

 

如果在判断多个值得时候,when(条件),谁先满足就执行谁

相当于C#里面的if else

 

 

第二种方式,直接case

 

select case id

when 1 then ‘第一排

when 2 then ‘第二排

when 3 then ‘第三排

end from Student

相当于C#里面的switch case

 

 

1.多个then后面的数据类型要一致

 

子查询

 

在一个查询中,有另一个查询结果,这个查询就叫做主查询的子查询

 select * from Student where id=(select id from class where name =‘一班)

小括号里面查询的列必须要一个列

一般子查询都是用在where条件后面的

 

EXists

select * from Student where exists(select * from class where class.id=Student.id)

 

 

 

select * from Student where exists(select ‘’ from class where class.id=Student.id)

EXISTS 是引用了主查询的数据进行子查询的一种方式,子查询中,只做条件判断,不做任何列的输出

 

分页查询

select * from( (select *,ROW_NUMBER() over(order by id) as row from Student) as t 

where t.row between 1 and 3 

 使用ROW_NUMBER()函数分出一列,然后在这一列上配合between and

表连接

Join

2张表或多张表的数据行按照指定的规则连接在一起

 

--查询学生所在的班级姓名年龄

 select Student.name,age from Student join class on Student.classID=class.id

Join连接时候要满足指定的条件,如果不满足就不会出现数据

 

select Student.name,age,math,english,chinese from Student 

join class on Student.classID=class.id 

join score on Student.id=score.stuId

连接3张表

 

  --查询学生的成绩不管有没有分数

  select * from Student left join score on Student.id=score.stuId

Left join 在普通的join基础上,优先显示左边的表,如果条件满足,就显示连接之后的右表的数据,如果不满足条件,还是会显示左表数据,右表值为NULL

 

Right join 在普通的join基础上,优先显示右边的表,如果条件满足,就显示连接之后的左表的数据,如果不满足条件,还是会显示右表数据,左表值为NULL

--查询考试的学生

   select * from Student right join score on Student.id=score.stuId

 

INNER join 其实就是join

CROSS join 会得出2张表的乘积行

视图·

视图是一张虚拟表,它表示一张表的部分数据或者多张表的综合数据,其结果和数据是建立在对表的查询基础上

当我们查询一个视图的时候,其实就是在查询”视图的查询的结果集”

这个结果集里面有什么列,就只能显示什么列

Insert 语句再不会影响多张表的前提下,可以用的(只影响一张表)

视图只用来做查询,一次增改才做只能针对一张表,新增进去的数据,还不能违反原始表的约束

删除一定会影响多张表的,所以是一定不可以的

 

 

DECLARE

DECLATR @变量名 数据类型

变量的默认值是NULL

 

赋值

SET @变量名=

SELECT @变量名=

 

取值    

PRINT @变量名

 

全局变量

@@ERROR 记录的是最后一个出现错误的错误号

@@IDENTITI 最后一次插入的标示值

@@MAX_CONNECTIONS 每台服务器可以同时创建的connection数量是有限的

@@ROWCOUNT  上一次语句受影响的行数

IF ELSEif((select COUNT(id) from student)>2)

begin 

print ‘好多人啊

end

else

begin 

print ‘人好少啊

end

 

事务

BEGIN  TRANSACTION----开始事务

ROLLBACK TRANSACTION---放弃事务,放弃操作

COMMIT TRANSACTION ------提交事务

 

存储过程

存储过程其实就像C#里面的方法,只不过实在数据库里面的方法

创建存储过程

create proc GetStu

as 

select * from Student

 

执行存储过程

exec GetStu

 

alter proc GetStu  --带参数的存储过程

@id int=0

as

begin

select *from Student where id=@id

end

 

exec GetStu 2 --调用带参数的存储过程

 

 

触发器

新增 修改 删除 查询没有触发器的

 

create trigger tgclass on class

after insert

as 

begin 

print ‘新增了一行

end

 

create trigger tgclasss on class

after update

as 

begin 

print ‘修改了一行

end

 

create trigger tgclasss on class

after delete

as 

begin 

print ‘删除了一行

end

 

黑马自学SQLSERVER进阶

标签:

原文地址:http://www.cnblogs.com/WZLYA/p/4882705.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!