常用的命令查询

1.查询指令

查询数据记录(Select)

语法:Select * 字段串行 From table Where 字段=’内容’例子:想从book表中找出作者为"cancer"的所有记录,SQL语句便如下:

select * from book where author=’cancer’

"*"是取出book表所有的字段,如查询的字段值为数字,则其后的"内容"便无须加上单引号,如是日期,则在Access中用(#)包括,而在SQL server中则用(’)包括,如:
select * from book where id=1

select * from book where pub_date=#2002-1-7# (Access)

select * from book where pub_date=’2002-1-7’ (SQL Server)

提示:
日期函数to_date不是标准sql文,不是所有的数据库适用,所以大家在使用的时候要参考数据库具体
语法
另外如果是查询传入的变量,则如下:
strau=request.form("author")

strsql="select * from book where
author=’"&strau&"’"如果查询的是数字,则:
intID=request.form("id")

strsql="select * from book where id="&intID在很多数据库中,如:oracle,上面的语句是可以写成:

strsql="select * from book where id='"&intID&"'"的。但是字符型一定不能按照数字格式写,需要注意。

2.添加指令

添加记录(Insert)

语法:Insert into table(field1,field2,....) Values(value1,value2,....) 例子:添加一作者是"cancer"的记录入book表:

insert into book (bookno,author,bookname) values (’CF001’,’cancer’,’Cancer无组件上传程序’)
同样,如果用到变量就如下:
strno=request.form("bookno")

strau=request.form("author")

strname=request.form("bookname")

strsql="insert into book (bookno,author,bookname) values
(’"&strno&"’,’"&strau&"’,’"&strname&"’)"

3.修改指令

修改数据记录(Update)

语法:updatetable set field1=value1,field2=value2,...where fieldx=valuex 例子:update book set author=’babycrazy’where bookno=’CF001’

如果用到变量就如下:
strno=request.form("bookno")

strau=request.form("author")

strsql="update book set author=’"&strau&"’ where
bookno=’"&strno"’

4.删除指令

删除一条记录(Delete)

语法:Delete table where field=’value’例子:删除book表中作者是cancer的记录

delete book where author=’cancer
高速删除记录(truncatetable)

例子:删除book表中作者是cancer的记录
truncate table book whereauthor=’cancer

5.去重指令

去除重复数据(Distinct)

例子:查询教师所有的单位即不重复的Depart列

SELECT DISTINCT Depart FROM TEACHER;

6.数值之间指令

介于两个值之间的数据范围(Between 值and 值)

例子:查询Score表中成绩在60到80之间的所有记录
SELECT * FROM SCORE WHERE DEGREE BETWEEN 60 AND80

7.查询多值(in/ or)

IN 操作符允许我们在WHERE 子句中规定多个值。

例子:查询Score表中成绩为85,86或88的记录
SELECT * FROM SCORE WHERE DEGREE IN (85,86,88)
例子:查询Student表中“95031”班或性别为“女”的同学记录。
SELECT * FROM STUDENT WHERE CLASS='95031' ORSSEX='女';

8.过滤数据

Where 
And 不止一个过滤列
Not 否定其后说跟的任何条件
In 指定范围匹配
Or 匹配任意一条行,若第一条件满足不在执行第二条件

9.分组与排序

降序查询(ORDER BY 值 DESC)
例子:以Class降序查询Student表的所有记录
SELECT * FROM STUDENT ORDER BY CLASS DESC

升序查询(ORDERBY 值 ASC)

例子:以Class降序查询SCORE表的所有记录
SELECT * FROM SCORE ORDER BY CNO ASC
分组显示(Groupby)

10.聚集数据

返回合计数值(count)

例子:查询“95031”班的学生人数

SELECT  COUNT(*) FROMSTUDENT WHERE CLASS='95031';

最大值(MAX)

例子:查询Score表中的最高分的学生学号和课程号

SELECT SNO,CNO FROM SCORE WHERE DEGREE=(SELECT MAX(DEGREE)FROM SCORE);

平均值(AVG

例子:查询‘3-105’号课程的平均分

SELECT AVG(DEGREE) FROM SCORE WHERECNO='3-105'

最小值(Min

返回某列最小值

和(Sum

返回某列值之和

11.联结查询

内联结(Innerjoin)又称等值联结,返回等值的结果,没有匹配不返回结果

外联结(right/leftjoin)返回等值还包括没有关联的行 ,没有匹配返回联结的结果

均用on代替where

12.创建视图

为什么要视图?

创建视图本身不包含数据,因此返回的数据是从其他表中检索出来的。且可以直接调用视图,简化复杂的查询。

Create view +查询语句

13.分组数据

Group by 结合合计函数,根据一个或多个列对结果集创建分组,

例子:查询Score表中至少有5名学生选修的并以3开头的课程的平均分数

select avg(degree),cno from score where cno like '3%' group by cno

having count(sno)>= 5

系统监控和诊断

1.常规诊断命令

LSELECT * Osys.sysprocesses

SELECT * FROMsys.syslockinfo –查看锁死程序

select * fromsys.sysusers --查用户相关信息

Select sql_handle,* from sys.dm_exec_requests --查请求的ID,请求的状态。如:后台。请求是后台线程,例如资源监视器或死锁监视器。

Select * fromsys.dm_exec_connections  --此命令可以看到连接情况

2.SQL CPU 占用过高说明书(需修改)

一般排查都是用下面的脚本,一般会用到三个视图sys.sysprocesses ,dm_exec_sessions ,dm_exec_requests

1 USE master
2 GO
3 --如果要指定数据库就把注释去掉
4 SELECT * FROM sys.[sysprocesses] WHERE [spid]>50 --AND DB_NAME([dbid])='gposdb'
5 SELECT COUNT(*) FROM [sys].[dm_exec_sessions] WHERE [session_id]>50

看一下当前的数据库用户连接有多少

然后使用下面语句看一下各项指标是否正常,是否有阻塞,这个语句选取了前10个最耗CPU时间的会话

1 SELECT TOP 10
2 [session_id],
3 [request_id],
4 [start_time] AS '开始时间',
5 [status] AS '状态',
6 [command] AS '命令',
7 dest.[text] AS 'sql语句',
8 DB_NAME([database_id]) AS '数据库名',
9 [blocking_session_id] AS '正在阻塞其他会话的会话ID',
10 [wait_type] AS '等待资源类型',
11 [wait_time] AS '等待时间',
12 [wait_resource] AS '等待的资源',
13 [reads] AS '物理读次数',
14 [writes] AS '写次数',
15 [logical_reads] AS '逻辑读次数',
16 [row_count] AS '返回结果行数'
17 FROM sys.[dm_exec_requests] AS der
18 CROSS APPLY
19 sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
20 WHERE [session_id]>50 AND DB_NAME(der.[database_id])='gposdb'
21 ORDER BY [cpu_time] DESC

如果想看具体的SQL语句可以执行下面的SQL语句,记得在SSMS里选择以文本格式显示结果

1 --在SSMS里选择以文本格式显示结果
2 SELECT TOP 10
3 dest.[text] AS 'sql语句'
4 FROM sys.[dm_exec_requests] AS der
5 CROSS APPLY
6 sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
7 WHERE [session_id]>50
8 ORDER BY [cpu_time] DESC