常用的命令查询
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
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时间的会话
4 [start_time] 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 '等待的资源',
15 [logical_reads] AS '逻辑读次数',
16 [row_count] AS '返回结果行数'
17 FROM sys.[dm_exec_requests] AS der
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里选择以文本格式显示结果
4 FROM sys.[dm_exec_requests] AS der
6 sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
8 ORDER BY [cpu_time] DESC