黑马自学SQLSERVER进阶

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 [email protected]

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

时间: 2024-08-05 16:34:20

黑马自学SQLSERVER进阶的相关文章

php自学提升进阶路线

为了自己对php的系统全面深入的掌握,我通过个人经验,以及搜索网上高手经验,汇总了一份php自我学习路线规划,包括实战演练.学习建议.高手进阶.常见问题和测试总结五块.算是一个系统的学习计划和目标吧.避免盲目学习,对提高有所指引.希望自我加压,通过努力修炼达到高手水平.天道酬勤,自我勉励!此路线仅适合我本人. 部分摘自博客,参看:[原创]PHP程序员的技术成长规划 http://blog.csdn.net/heiyeshuwu/article/details/40098043这个php成长规划清

黑马自学10.10学习

数据库 数据类型 varchar 表示可变的 分离数据库:是将当前数据库文件和数据库引擎关系断开,没有任何关系了,这样我们就可以随意的拷贝,剪切 在数据库文件上右键-->任务-->分离-->勾选”删除链接”-->确定 脱机:告诉数据库引擎,暂停操作当前数据库,也可以随意拷贝,剪切 附加:把已经分离的数据库文件,重新让数据库引擎管理 主键:标识一张表里面数据行 主键分为逻辑主键和业务主键 业务主键就是具有真实意义的,比如身份证,银行卡,缺点:一旦变化,难以维护 逻辑主键:没有任何实际

黑马自学9.29学习

抽象类 抽象方法用abstract修饰 抽象方法不能有方法体 抽象方法不能实例化,因为有抽象成员,而抽象成员不能有方法体的 子类必须重写父类的抽象方法 在子类中无法通过base关键字调用父类的抽象方法 抽象方法是光说不做的,只是定义了具有这样的行为,但是具体的实现交给了子类 抽象类中可以拥有非抽象成员,为了继承给子类 抽象类中可以拥有虚方法 子类必须重写父类的方法,父类没有必要实例化,就用抽象类 抽象类是被继承的,是为了多态 抽象成员不能是私有的 接口 是一个特殊的抽象类 使用interface

黑马自学ADO学习

ADO.net  就是微软提供的一堆类库,这个类库里面有很多专门操作各种数据库的类,他们都是实现了统一口 组成部分 第一部分: 数据提供程序  命名空间:System.Data.SqlClient Connection   连接数据库的通道 Command    命令执行对象 DataReader   数据读取器 DataAdapter  数据适配器 第二部分: 数据集 命名空间:System.Data 本地化的结果集,就是把数据库查询之后的结果集,取出来存到本地内存中 ConnectionSt

黑马自学9.28学习

里氏转换原则:LSP子类可以替换父类的位置,并且程序的功能不受影响 父类有的功能子类都有,所以不影响程序的功能 父类变量指向了一个子类对象 当一个父类变量指向一个子类对象的时候,只能通过这个父类变量调用父类的成员,子类独有的成员无法调用 子类变量不能指向1个父类对象 必须要有继承关系,才可以使用强制转换 如果一个父类变量指向的就是一个父类对象,将这个父类对象转换为子类对象的会报异常 如果一个父类变量指向一个子类对象,那么可以将这个父类变量转换为子类对象 is 判断变量是否是指定的类型 如果没有继

黑马自学9.24学习

交错数组  行固定,但是每一行的列不固定 二维数组  行固定.列固定 构造方法 访问修饰符一般情况下是public,没有返回值,方法名与类名一样 构造函数是创建对象的时候CLR自动调用 程序员无法手动调用 构造函数可以有参数 如果我们希望在创建这个类的对象的同时需要执行一些代码,我们就可以把这些代码写到构造函数中 This关键字,代表当前对象,当前运行在内存里的那个对象 被partial关键字修饰的类.叫做部分类,或者伙伴类 C#编译器在编译的时候会将伙伴类编译成一个类,所以在另一个伙伴类中定义

黑马自学视频之System类

关于System的说明:  System不可以实例化,其中所有的成员都是静态成员,所有的方法都是静态方法 1.System的继承关系:java.lang.Object 2.System的静态成员:err 类型:java.io.PrintStream      -----错误输出对应显示器 out类型:java.io.PrintStream          ------标准输出对应显示器 in  类型 :java.io.InputStream      ------标准输入对应键盘 3.Syst

【黑马程序员】重新开始

因自学能力较差.自制力不强等原因,还有半年多就毕业找工作了实在不能让自己淡定下来. 7月初,决定报名参加了辅导班.刚开始想直接上就业班,结果基础测试不过关,很很的打击了我,决定从基础班开始学,重新开始系统性的学Java SE,学完后再上Android就业班. 开始报名参加黑马程序员--深圳双元课堂9期(0714)基础班.因为是校招,所以也要参加入学基础测试,就是视频前5天的视频内容. 写完自荐信,并获得分数的当天,就预约了入学电话面试及入学基础测试,这两项顺利通过.准备开班. 7.14开班了,一

Hadoop大数据挖掘从入门到进阶实战

1.概述 大数据时代,数据的存储与挖掘至关重要.企业在追求高可用性.高扩展性及高容错性的大数据处理平台的同时还希望能够降低成本,而Hadoop为实现这些需求提供了解决方案.面对Hadoop的普及和学习热潮,笔者愿意分享自己多年的开发经验,带领读者比较轻松地掌握Hadoop数据挖掘的相关知识.这边是笔者编写本书的原因.本书使用通俗易懂的语言进行讲解,从基础部署到集群管理,再到底层设计等内容均由涉及.通过阅读本书,读者可以较为轻松地掌握Hadoop大数据挖掘与分析的相关技术. 本书目前已在网上商城上