sql中的不常见查询
1.对于CROSS APPLY 和 OUTER APPLY 的应用:
CROSS APPLY 类似于INNER JOIN 但是,可以规定对于满足条件的数据需要关联几行,应用场景: 每个零件把第一个工单关联出来;
OUTER APPLY 类似于LEFT JOIN ,不同之处同上;
--inner join
SELECT a.part_no,b.workorder FROM dbo.sys_part a INNER JOIN dbo.g_workorder_detail b ON a.part_id =b.part_id
---执行结果:
part_no workorder
1144514
1912900
1912900
1912900
1912900
1912900
1144514
---cross apply
SELECT a.part_no,c.workorder FROM dbo.sys_part a CROSS APPLY
(SELECT TOP 1 * FROM dbo.g_workorder_detail b WHERE a.part_id =b.part_id ORDER BY b.workorder_id) AS c
执行结果:
part_no workorder
1144514
1912900
---outer apply
SELECT a.part_no,c.workorder FROM sys_part a OUTER APPLY
(SELECT TOP 1 * FROM dbo.g_workorder_detail b WHERE a.part_id =b.part_id ORDER BY b.workorder_id) AS c
---执行结果:
part_no workorder
90740 NULL
90789 NULL
369832 NULL
507994 NULL
2.SQL语句执行结果增加列显示:
--其中对于over之后的排序为整个语句显示信息的排序
SELECT TOP 5 ROW_NUMBER() OVER(ORDER BY part_id) AS row_id ,part_no FROM sys_part
3.SQL语句对于锁表的查询:
SELECT b.name AS [database], a.spid, a.blocked, a.waittime / 1000 AS wait_time, a.loginame,CONVERT(VARCHAR(50),login_time,120) login_time,
CONVERT(VARCHAR(50),last_batch,120) last_batch, open_tran, a.status, hostname, program_name, cmd
FROM sys.sysprocesses a
JOIN sys.sysdatabases b ON a.dbid = b.dbid
WHERE spid IN ( SELECT blocked
FROM sys.sysprocesses
WHERE blocked > 0 AND spid != blocked )
UNION
SELECT b.name AS [database], a.spid, a.blocked, a.waittime / 1000 AS wait_time,a.loginame, CONVERT(VARCHAR(50),login_time,120) login_time,
CONVERT(VARCHAR(50),last_batch,120) last_batch, open_tran, a.status, hostname, program_name, cmd
FROM sys.sysprocesses a
JOIN sys.sysdatabases b ON a.dbid = b.dbid
WHERE blocked > 0 AND waittime >0 AND spid != blocked
ORDER BY spid
--对于得到的具体spid可以根据语句来得到具体的sql语句: DBCC INPUTBUFFER(SPID)
4.SQL中对于登录信息的获取:
SELECT
s.[host_name],
con.client_net_address,
s.login_name,
s.[program_name]
FROM sys.dm_exec_connections AS con INNER JOIN sys.dm_exec_sessions AS s
ON con.session_id=s.session_id AND s.session_id=@@SPID ---当前执行此内容的SPID
5.对于表碎片的查看,决定是否要重建索引:
DBCC SHOWCONTIG(sys_part)
---显示结果:
DBCC SHOWCONTIG scanning 'sys_part' table...
Table: 'sys_part' (308912172); index ID: 0, database ID: 46
TABLE level scan performed.
- Pages Scanned................................: 276
- Extents Scanned..............................: 39
- Extent Switches..............................: 38
- Avg. Pages per Extent........................: 7.1
- Scan Density [Best Count:Actual Count].......: 89.74% [35:39] ---此百分比越大越好
- Extent Scan Fragmentation ...................: 33.33% ---扩展盘区扫描碎片,越小越好
- Avg. Bytes Free per Page.....................: 2542.0
- Avg. Page Density (full).....................: 68.59% ------------每叶的密度 --此值太低,就得考虑索引重建
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
---如需要重建索引,可执行: DBCC DBREINDEX(sys_part)
6.对于JOB 方面的查询,归属,及其执行的内容
---对于Job是归属那个账号 在执行的查询
SELECT a.name AS job_name,b.loginname,a.date_created AS job_createtime,a.date_modified AS jobmodifytime
FROM msdb.dbo.sysjobs a INNER JOIN master.dbo.syslogins b ON a.owner_sid =SUSER_SID(B.loginname)
WHERE 1=1
AND A.enabled =1 --表示启用的JOB
AND B.loginname='sa' --账号
ORDER BY a.job_id
--关于在运行中的job执行的语句
SELECT a.name AS job_name,b.step_name,b.database_name,b.step_id,b.command
FROM msdb.dbo.sysjobs a INNER JOIN msdb.dbo.sysjobsteps b ON a.job_id=b.job_id
WHERE 1=1
AND a.enabled =1
ORDER BY a.job_id,b.step_id
sql中的不常见查询的更多相关文章
- SQL 中的多条件查询
在应用程序开发中,多条件查询是个经常遇到的情况,最简单最麻烦的方法是把所有的可能情况都考虑到,但是无疑是繁琐的,而且很容易漏掉可能的情形,下面是SQL语句实现多条件查询的情况 select * fro ...
- SQL中的SELECT_简单查询语句总结
--以scott用户下的dept和emp表为例 --注意:如果scott用户不能使用,请使用system用户登录--解锁scott用户ALTER USER SCOTT ACCOUNT UNLOCK;- ...
- sql中的跨库查询
在sql查询时,需要关联2个服务器上的不同数据库,只需要在所需查询的表名前加上服务器地址即可. 例如:在 192.168.0.15,8020的db110库 和 192.168.0.150,8082的d ...
- SQL中的join连接查询
inner join(交集 ,自然连接, 简写成join) 是最普通的连接查询,相当于早期根据where条件连接的查询 outer join(并集或部分并集,左表 + 右表) le ...
- SQL中对连表查询的建议
多表连查时,如果存在多个唯一键可以做关联,尽可能选择有意义的code或name,能不选择无意义的id或者uuid最好! 所以在存储的时候也是这样,并且从始至终保持一致性.这样既降低了维护和阅读的难度, ...
- SQL中新建注释、查询注释和说明
1.查询注释 SELECT A.name AS table_name, B.name AS column_name, C.value AS column_description FROM sys.ta ...
- SQL中的多表查询,以及JOIN的顺序重要么?
说法是,一般来说,JOIN的顺序不重要,除非你要自己定制driving table. 示例: SELECT a.account_id, c.fed_id, e.fname, e.lname -> ...
- linq to ef(相当于sql中in的用法)查询语句
select * from DoctorInfo doctor where doctor.HosDepartId in (select Id from HospitalDepartment hd wh ...
- sql中给逗号分隔的查询结果替换单引号
技术交流群:233513714 第一种方法: SELECT * FROM pay_inf_config a WHERE a.id IN ( SELECT REPLACE ( concat('''', ...
随机推荐
- Go - WaitGroup
package main import ( "fmt" "sync" ) //WaitGroup用于等待一组线程的结束.父线程调用Add方法来设定应等待的线程的 ...
- MFC程序打包方法
目录 1. 新建工程 2. 设置信息 3. 其他设置 4. 生成安装包 1. 新建工程 在同一个解决方案下,新建一个Setup工程,工程名为SetupVSR. (1)在"解决方案资源管理器& ...
- return,break,continue三者区别
详解:http://www.cnblogs.com/yangdabao/p/6172210.html return:直接结束这个方法,后面所有代码不再执行,不管循坏外,还是循环内,全部停止,直接返回 ...
- tomcat之虚拟目录
一般我们都是直接引用webapps下面的web项目,如果我们要部署一个在其它地方的WEB项目,这就要在TOMCAT中设置虚拟路径了,Tomcat的加载web顺序是先加载 $Tomcat_home$\c ...
- Taro 生命周期
Taro 新加的生命周期 说明 网址 componentDidShow() 在此生命周期中通过 this.$router.params,可以访问到程序初始化参数 https://nervjs.gith ...
- devexpress gridview代码设置
39 //绑定DataTable 40 gridControl1.DataSource = dt; 41 gridView1.OptionsCustomization.AllowColumnMovin ...
- E4A 与JS交互事件无反应
今天碰到一个问题,E4A与JS的交互,调用JS函数后,事件没有任何反应,给JS赋值,会看到浏览框中有内容显示,但是事件为什么就没反应呢. 把官方的例程打开编译试了也不行. 后来在群中问了,原来是这里设 ...
- PCI9054 总结(讲解非常清楚)
转载自:http://blog.csdn.net/lg2lh/article/details/8042008 PCI的基本协议这里就不介绍了,因为一般的芯片协议都是集成好的,我只需要大体了解就行,不需 ...
- java 通信
UDP package com.le; import org.junit.Test; import java.io.IOException; import java.net.DatagramPacke ...
- qt5程序打包含qml
Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行. 因此 Qt 官方开发环境里自带了一 ...