1. 子查询:把一个结果集让别人继续分析查询的就叫子查询
  2. 子查询如果定义了别名,在查询引用时,必须使用别名
  3. --子查询定义了别名,引用就必须用别名
    select id,n
    from Person,(select depname as n from Depment ) as d

    常用运算符:

  4. in:表示对多个单列结果进行条件匹配
  5. --in例子
    
    select name,age
    from Person
    where Age in(select Age from Person where Age < 19) --any例子:与运算符结合使用,大于表示要大于查询到的结果集 select name,age
    from Person
    where Age <any(select Age from Person where Age < 19)

    exists

  6. --exists:判断是否为空,为空false,否则true
    
    select * from Person
    where exists(select * from Depment where id='') select * from Person
    where exists(
    select * from Depment d where d.id = Person.DepID
    )

    将结果集直接在数据库插入一张新表,多数据插入

    1. --数据量多插入数据:列必须前后对应
      
      create table person3(id int primary key,name varchar(30),age int, depid varchar(20))
      
      insert into person3( id,name,age,depid)
      select ID,Name,Age,DepID from person

      更新,删除类似

  7. Sql注入攻击问题,采用参数化传参形式可解决
  8. 事务:保证数据原子性、一致性、隔离性、持久性
  9. 开窗函数:可以对每一行结果都返回一个值,避免了group by必须分组的问题
    1. select count(*) over() from 表名
    2. select COUNT(*) over(partition by city) from shakerecode  参数意思是根据城市来分组显示出城市的数量

  10. 连接池:访问数据库时所产生的链接验证成功后,当释放连接对象时,数据库就把此连接对象放到了连接池,下次使用时先从连接池找,如果连接池有这个连接对象直接使用,减少验证等消耗。
    1. 打开数据库连接对象的时间要正好,使用完连接对象要尽快释放,这样连接池的利用率高
    2. 连接字符串默认自动打开连接池,如果就想关闭连接池加语法pooling=false;
  11. 子查询分页
  12. --子查询分页
    --between (页码-1)*每页条数+1 and 页码*每页条数
    select * from
    (
    select ROW_NUMBER() over(order by id) as num, * from Student
    ) t
    where t.num between (1-1)*10+1 and 1*10

    创建视图、修改视图分页

go
create view vw_student
as
select * from
(
select ROW_NUMBER() over(order by id) as num, * from Student
) t
where t.num between (1-1)*10+1 and 1*10
go --修改视图 alter view vw_student
as
select * from
(
select ROW_NUMBER() over(order by id) as num, * from Student
) as t
go select * from vw_student where num between 10 and 20
  • 事务
--事务

--三个步骤:开始事务,提交事务,或者回滚事务

begin transaction

commit transaction

rollback transaction

set @@error  --记录最近一次数据操作的错误,如果没有错误默认是0

select @@error
  • 存储过程
  • 存储过程结合事务+变量+参数返回值,执行转账例子
go
create proc usp_BankToBank
@from nvarchar(10),
@to nvarchar(10),
@money money,
@issuccess int output
as
declare @myError int
set @myError = 0
begin
begin tran
update Bank set MoneyVal-=@money where ID = @from
set @myError = @myError+@@ERROR
update Bank set MoneyVal += @money where ID=@to
set @myError = @myError+@@ERROR
if @myError > 0
begin
set @issuccess = 0
rollback tran
end
else
begin
set @issuccess = 1
commit tran
end
end
go declare @res int
exec usp_BankToBank '','',200,@res output
select @res
  • 存储过程分页
create proc usp_StudentPage
@pageIndex int,
@pageCount int
as
begin
select * from
(
select ROW_NUMBER() over(order by id) as num,* from Student
) t
where t.num between (@pageIndex-1)*@pageCount + 1 and @pageIndex*@pageCount
end
go; exec usp_StudentPage 2,20
  • 触发器
alter trigger tr_删除触发器 on bank
after
delete
as
insert into Bank(ID,moneyval)
select * from deleted;
  • 获取新增数据本身值
  • -获取最近一次插入数据的值
    
    insert into Bank(ID,MoneyVal) output inserted.* values('',20)

SqlServer子查询、高级的更多相关文章

  1. SQLSERVER 子查询中使用ORDER BY

    SQLSERVER如何在子查询中使用ORDER BY 今天在使用公司的一个pager接口的时候,需要传递一个查询的SQL语句,因为我希望他能够在pager对他查询出来的结果排序之前自己先进行排序, 于 ...

  2. SQLServer子查询

    in谓词子查询 select * from dbo.Worker where did in (select dID from DepartMent) 比较运算子查询 select * from Wor ...

  3. 相关子查询和嵌套子查询 [SQL Server]

    SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提,假设Books表如下: 类编号  图书名         出版社               价格-------------- ...

  4. SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)

    SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提, 假设Books表如下: 类编号 图书名 出版社 价格 ----------------------------------- ...

  5. SQL编程之高级查询(子查询)以及注意事项

    SQL编程之高级查询(子查询)以及注意事项   1.什么是子查询? 当一个查询是另一个查询的条件时,称之为子查询.子查询可以使用几个简单命令构造功能强大的复合命令.子查询最常用于SELECT-SQL命 ...

  6. 【SqlServer系列】子查询

    1   概述 1.1  已发布[SqlServer系列]文章 [SqlServer系列]SQLSERVER安装教程 [SqlServer系列]数据库三大范式 [SqlServer系列]表单查询 [Sq ...

  7. Oracle-3 - :超级适合初学者的入门级笔记--用户权限,set运算符,高级子查询

    上一篇的内容在这里第二篇内容, 用户权限:创建用户,创建角色,使用grant  和 revoke 语句赋予和回收权限,创建数据库联接 创建用户:create user xxx identified b ...

  8. Oracle学习DayFour(高级子查询)

    一.高级子查询 1.多列子查询 定义:主查询与子查询返回的多个列进行比较 多列子查询中的比较分为两种:成对比较:不成对比较 实例:查询与141号或174号员工的manager_id和departmen ...

  9. MySQL外键和高级查询(连接查询、联合查询、子查询、去重查询)

    MySQL的外键 什么是外键,很简单保持数据一致性的一个约束键.如果你有两张表,第一张是学生表,第二张表是一个成绩表,我们来看看保持数据一致性,其实在Django等框架的模型中中也能做关联获取对象. ...

随机推荐

  1. windows server2012部署apache项目访问后台管理系统时tomcat就停了是怎么回事

    是由于环境变量没有配好的原因,找不到jre目录 tomcat的运行需要JRE,一般启动闪退都是因为找不到JRE,也就是说环境安装JDK时环境变量没有配置好. 我们首先打开”命令提示符“窗口,输入jav ...

  2. canvas里调用getImageData的报security的问题

    canvas元素支持绘制任意图片元素: var ctx = document.getElementById("canvas").getContext("2d") ...

  3. swift 学习之 UIAlertViewController

    // //  PushViewController.swift //  tab // //  Created by su on 15/12/7. //  Copyright © 2015年 tian. ...

  4. Head First iOS Programming

    内部分享: Head First iOS Programming http://www.slideshare.net/tedzhaoxa/head-first-ios-programming-4606 ...

  5. Unity3d中使用Lua

    对于手机游戏,如果可以在线更新以实现bug修复.新功能添加等等,其好处自不必多说. 通过C#的反射机制,也可以实现某种程度上的脚本级更新,具体可以参考 http://docs.unity3d.com/ ...

  6. Zero Clipboard js+swf实现的复制功能使用方法

    开发中经常会用到复制的功能,在 IE 下实现比较简单.但要想做到跨浏览器比较困难了.本文将介绍一个跨浏览器的库类 Zero Clipboard .它利用 Flash 进行复制,所以只要浏览器装有 Fl ...

  7. 关于Office软件中Word输入时卡顿无反应的解决办法!

    最近在安装office2013时遇到了这样一个问题,就是在激活office之后,打开Word输入内容时十分卡顿.也是狂搜网上各种办法,有说改注册表的,也有说在office选项里设置什么输入法的,全试了 ...

  8. stringBuilder类的一些用法

    对String对象进行处理的时候比如拼接.截取,会在内存中新建很多字符串对象.为了减少内存开支,可以使用StringBuilder类型. 创建StringBuiler实例: 用构造函数直接创建: St ...

  9. Java--下载历史版本登录账户

    目前在官网下载低于jdk1.8的java jdk的时候需要登陆,这边分享一个账号,方便下载 2696671285@qq.com 密码:Oracle123 转自-- jdk下载以前版本需要的账号(转) ...

  10. phonegap3.0+HTMLl5 开发 ipad app 总结

    忙碌了一段时间,终于完成了手上的这个ipad上的app ,app是用phonegap+ jquery mobile 开发的,不是用原生的objective c开发的.因为app有许多chart的渲染, ...