SqlServer子查询、高级
- 子查询:把一个结果集让别人继续分析查询的就叫子查询
- 子查询如果定义了别名,在查询引用时,必须使用别名
--子查询定义了别名,引用就必须用别名
select id,n
from Person,(select depname as n from Depment ) as d常用运算符:
- in:表示对多个单列结果进行条件匹配
--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
--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
)将结果集直接在数据库插入一张新表,多数据插入
--数据量多插入数据:列必须前后对应 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更新,删除类似
- Sql注入攻击问题,采用参数化传参形式可解决
- 事务:保证数据原子性、一致性、隔离性、持久性
- 开窗函数:可以对每一行结果都返回一个值,避免了group by必须分组的问题
- select count(*) over() from 表名
select COUNT(*) over(partition by city) from shakerecode 参数意思是根据城市来分组显示出城市的数量
- 连接池:访问数据库时所产生的链接验证成功后,当释放连接对象时,数据库就把此连接对象放到了连接池,下次使用时先从连接池找,如果连接池有这个连接对象直接使用,减少验证等消耗。
- 打开数据库连接对象的时间要正好,使用完连接对象要尽快释放,这样连接池的利用率高
- 连接字符串默认自动打开连接池,如果就想关闭连接池加语法pooling=false;
- 子查询分页
--子查询分页
--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子查询、高级的更多相关文章
- SQLSERVER 子查询中使用ORDER BY
SQLSERVER如何在子查询中使用ORDER BY 今天在使用公司的一个pager接口的时候,需要传递一个查询的SQL语句,因为我希望他能够在pager对他查询出来的结果排序之前自己先进行排序, 于 ...
- SQLServer子查询
in谓词子查询 select * from dbo.Worker where did in (select dID from DepartMent) 比较运算子查询 select * from Wor ...
- 相关子查询和嵌套子查询 [SQL Server]
SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提,假设Books表如下: 类编号 图书名 出版社 价格-------------- ...
- SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)
SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提, 假设Books表如下: 类编号 图书名 出版社 价格 ----------------------------------- ...
- SQL编程之高级查询(子查询)以及注意事项
SQL编程之高级查询(子查询)以及注意事项 1.什么是子查询? 当一个查询是另一个查询的条件时,称之为子查询.子查询可以使用几个简单命令构造功能强大的复合命令.子查询最常用于SELECT-SQL命 ...
- 【SqlServer系列】子查询
1 概述 1.1 已发布[SqlServer系列]文章 [SqlServer系列]SQLSERVER安装教程 [SqlServer系列]数据库三大范式 [SqlServer系列]表单查询 [Sq ...
- Oracle-3 - :超级适合初学者的入门级笔记--用户权限,set运算符,高级子查询
上一篇的内容在这里第二篇内容, 用户权限:创建用户,创建角色,使用grant 和 revoke 语句赋予和回收权限,创建数据库联接 创建用户:create user xxx identified b ...
- Oracle学习DayFour(高级子查询)
一.高级子查询 1.多列子查询 定义:主查询与子查询返回的多个列进行比较 多列子查询中的比较分为两种:成对比较:不成对比较 实例:查询与141号或174号员工的manager_id和departmen ...
- MySQL外键和高级查询(连接查询、联合查询、子查询、去重查询)
MySQL的外键 什么是外键,很简单保持数据一致性的一个约束键.如果你有两张表,第一张是学生表,第二张表是一个成绩表,我们来看看保持数据一致性,其实在Django等框架的模型中中也能做关联获取对象. ...
随机推荐
- BI实施的四个层次
满足业务需求 注重数据分析汇总 统一.高效的系统集成越来越麻烦.管理人员穿梭在具有不同风格.使用逻辑的系统间,越来越厌倦,众多系统之间的业务逻辑.数据含义不一致,使用户无法判 断数据的准确性.任何一个 ...
- (简单的物理题)Bungee Jumping
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1155 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- vs2008快捷键极其技巧
vs2008快捷键极其技巧 1. 工具: Microsoft Visual Studio 2008 Version 9.0.21022.8 RTM Microsoft .NET Framework V ...
- CDH源代码
CDH Packaging and Tarball Information http://www.cloudera.com/content/cloudera/en/documentation/core ...
- asp:Repeater数据源为空时处理方式
当Repeater的数据源为空时,会显示空白,界面不友好,以下方式可以简单处理. <asp:repeater runat="server" id="rplist2& ...
- 解决vs2017调试出现脚本错误(/Community/Common7/IDE/PrivateAssemblies/plugin.vs.js) 方法
原文地址:http://bkcoding.cn/post_1204.html 新装的vs2017编译时出现当前页面脚本错误 url:/Community/Common7/IDE/PrivateAsse ...
- .NET Core调用WCF的最佳实践
现在.NET Core貌似很火,与其他.NET开发者交流不说上几句.NET Core都感觉自己落伍了一样.但是冷静背后我们要也看到.NET Core目前还有太多不足,别的不多说,与自家的服务框架WCF ...
- 在VC++中执行VBS代码
此代码来自https://blog.csdn.net/zhu2695/article/details/13770671 作者: zhu2695 时间:2013年10月31日 13:08:41 #i ...
- C# PowerPoint操作的基本用法。
代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using OFFICECORE ...
- “全栈2019”Java多线程第四章:设置和获取线程名称
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...