SQL语句在审计中的简单应用
SELECT语句是SQL语言中使用频率最高的语句,完全可以说SELECT语句是SQL的灵魂。SELECT语句的作用就是让数据库服务器根据用户的要求搜索出所需要的信息资料,并按规定的格式进行整理,再返回给用户。在计算机审计中,面对繁杂的数据,可以充分利用SQL语句对数据进行筛选和比较,提取组成我们可用的审计中间表,大大提高审计效率。
一、SELECT语句的基本组件和描述: 
SELECT        指明要检索的数据的列。
FROM          指明从哪(几)个表中检索行。
WHERE        指明返回数据必须满足的标准(条件)。
GROUP  BY    对于集合查询,指明返回的列数据通过这些列来形成组(分组查询)。
HAVING      对于集合查询,指明返回的集合值必须满足的标准。
ORDER  BY    指明返回的排序顺序(排序查询)。
例如:
⑴简单查询数据库表hzbb中的以下几列,并将查询结果的每一行都返回在选定列中显示,可用以下SQL语句表示:
SELECT id, lname, fname, state, zip, contract  FROM  hzbb
(前面的列名即字段名如用*表示所有列) 即为:SELECT  *  FROM  hzbb
⑵添加WHERE条件子句,以缩小检索范围。如只返回显示state列中含有‘CA’字符,并且同时满足contract列中值为0的报有记录(行)。可用以下SQL语句表示:
SELECT id, lname, fname, state, zip, contract 
FROM  hzbb
WHERE state =‘CA’AND  contract = 0 
(逻辑操作符AND表示与的意思,而OR表示或的意思,如使用AND则返回的行必须满足AND两边的条件,OR操作符则要求OR两边至少满足一个条件)
虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下:
SELECT  select_list
[ INTO 新表名 ]
  FROM表一 ,[表二]……
    [ WHERE 条件表达式 ]
        [ GROUP BY 分组列 ]
          [ HAVING 指定组或聚合应满足的搜索条件]
              [ ORDER BY指定要排序的列[ ASC(升序)| DESC(降序)] ]
二、审计实务中的SQL例句说明
1、在SELECT语句中,“*”表示表中所有的列。
如:select  *  from  凭证库  该语句表示选择凭证库(表)中所有列的记录。
2、使用TOP关键字用于指定只返回前面一定数量的数据。
当查询到的数据非常多(如有100万行),但又没有必要对所有数据进行浏览时,使用TOP关键字可以大大减少查询的时间。
如: SELECT  TOP  20  FROM  HZK 表示从数据库HZK中返回前面20行的数据。
SELECT  TOP 20  PERCENT  FROM HZK 表示从数据库表HZK中搜索返回前20%的数据。
3、使用DISTINCT关键字。
使用DISTINCT关键字可从返回的结果数据集合中删除重复的行,使返回的结果更加简洁。如:select  distinct 科目编码from  凭证库,该语句表示从凭证库中选择科目编码以及使用distinct关键字后去掉那些重复的科目编码,使每个科目编码都是唯一。
注意:在使用DISTINCT关键字后,如果表中存在多个NULL的数据,服务器将会把这些数据视为相等。
4、灵活运用SQL语句使用计算列。
在进行审计数据分析和查询时经常需要对查询的数据进行再计算,这里审计人员可充分运用SELECT语句的功能来直接使用计算列对审计数据进行运算,而计算列并不存在于表格所存储的数据中,它是通过对某些列的数据进行计算而得出的结果列。
由于计算列没有列名,所以返回的结果看不到它的字段名字。在计算列上,允许使用+、-、*、/、%和逻辑运算符。
5、操作查询的列名。
SELECT语句可以根据实际的需要对查询数据的列标题进行修改,或者为设立没有标题的列增加临时的标题。对列名进行操作的方法有三种:
一是在列表达式后面直接给出列名。SELECT title_id ‘商品代号’, price‘原价’, price – price * 0.3‘现价’FROM  title
二是使用SQL支持的“=”符号来连接列表达式。SELECT ‘商品代号’=title_id , ‘原价’=price, ‘现价’=price – price * 0.3 from  title
三是在指定列标题时,使用AS关键字来连接列表达式和指定的列名。SELECT title_id  AS‘图书代号’, price  AS‘原价’, price – price * 0.3  AS ‘现价’ FROM  title
以上三种语句返回结果相同。
注意:在对列名进行操作时,有以下几个问题值得注意:当使用中文列名时,可以不写引号,但决不能使用全角引号,否则查询结果出错;当使用的英文列名超过两个单词时,必须使用引号将列名括起来;可以联合使用本节介绍的3种方法,返回结果相同。
另外,审计人员还可通过应用函数方式直接对表列进行操作。如语句:
Select sum(jfje), sum(dfje)  from  pzk  该语句是将pzk(凭证库)中所有凭证的借方发生额求和和贷方发生额求和,借以查看pzk表中借贷发生额是否平衡。
6、使用WHERE条件子句。
使用WHERE子句的目的是从表的数据集中筛选出符合审计人员设定条件的行。使用WHERE子句可以限制查询的范围,提高查询效率。使用时注意WHERE子句必须紧跟FROM子句之后。WHERE子句中的条件表达式包括算术表达式和逻辑表达式。
算术表达式:=(等于); <(小于);>(大于);<>(不等于);!>(不大于);
!<(不小于);  >=(大于等于);  <=(小于等于); !=(不等于)。
例1:查询数据库表title中,返回商品的价格打了9折后仍大于150元的商品代码、商品种类及商品的原价。Select  title_id  As  商品代码,type  As  商品种类,price  As  商品原价  from  title  Where  price  - price * 0.1 > 150
例2:通过对摘要字段内容的选择筛选出其中与招待费有关的所有凭证。
Select科目编码,科目名称,摘要,凭证日期,借方金额,贷方金额 from 凭证库 where 摘要 like  \'%招待费%\' 
例3:在凭证库中统计7到12月份现金的借贷发生总额。
Select sum(借方金额) as  现金借方发生总额 , sum(贷方金额) as  现金贷方发生总额  from  凭证库  where 科目编码 like \'101%\' and  凭证日期 between #2004-07-01 #  and  #2004-12-31# 
7、使用BETWHEEN关键字。
使用BETWHEEN关键字可以方便地限制查询数据的范围(即包含在两个边界内的值),NOT  BETWHEEN (不包含在两个边界内的值)。
使用BETWHEEN表达式进行查询的效果可以使用>=和<=的逻辑表达式来代替;使用NOT  BETWHEEN进行查询的效果可以使用>和<的逻辑表达式来代替。
如:Select  商品代码,商品种类,商品价格  from  titles  Where  商品价格  BETWHEEN  $10  AND  $15
也可用:select  商品代码,商品种类,商品价格  from  titles  where  商品价格  >= $10  AND  商品价格  <=$15
如果要查商品价格大于15元和小于10元的商品的代码、种类和价格,可用以下查询:
select  商品代码,商品种类,商品价格  from  titles  where  商品价格< $15  or  商品价格>$20
也可用:where  NOT  BETWHEEN  15  AND  20
注意:在使用BETWHEEN 限制查询数据范围时,同时包括了边界值,而使用NOT BETWHEEN进行查询时没有包括边界值。
8、使用IN关键字。
同BETWHEEN关键字一样,IN关键字的引入也是为方便地限制检索数据的范围,灵活使用IN关键字,可以用简洁的语句实现较复杂的查询。
如:select  pz_id,  pz_date,  pz_fname, pz_zy  from  hzk 
where  state = ‘招待费’  or  state =’餐费’  or  state =’酒水费’
如用IN关键字可替代以上语句:
select  pz_id,  pz_date,  pz_fname, pz_zy  from  hzk
where  state  IN ( ‘招待费’ ,  ‘餐费’  , ‘酒水费’ )
如果要查询不在列表中的值,可使用NOT  IN ,方法同上。
9、使用LIKE子语句进行模糊查询。
审计人员往往在实际应用中不一定总是能够就很快地给出精确的查询条件,因此经常需要根据一些并不确定的线索来排查被审数据,LIKE子句就是用来进行模糊查询的语句,数据库简单吗
在LIKE子句使用中,通常与通配符配合使用。
      SQL提供了四种通配符供用户实现复杂的查询条件:
      %  (百分号):表示从0到n 个任意字符。
      _  (下划线):表示单个任意字符。
      [ ]  (封闭方括号):表示方括号内列出的任意一个字符。
      [∧]  :表示任意一个没有在方括号内列出的字符。
如:where  科目名称  like  ‘%费’就是查询条件以“费”结尾的科目字段。
下列将查询出所有满足tel_id的前面两个字母为“72”、第4个字母为“—”的人员姓名和电话号码:
Select  tel_lanme,  tel_fname,  phone,  tle_id  from  TEL Where  tel_id  like  ‘72_—%’

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。