常用sql语句范文

2022-06-06

第一篇:常用sql语句范文

审计模式下常用的SQL查询语句示例

随着信息技术的不断发展,被审计对象的财务和业务系统也大多使用了专用软件进行计算机管理,如果暂不考虑计算机软硬件本身的系统审计,那么我们所面对的审计也就分为了以财务账套为基础的账套式审计模式和直接对数据本身(包括财务数据和业务数据)审计的数据式审计模式。但不论是何种审计模式,最根本的还是要使用计算机语句对具体问题进行查询分析,即通过数据库的SQL查询语句对数据库中的数据表进行查询分析。

虽然SQL语句的功能很多,且不同数据库环境下的具体使用也会因为所遵循的官方标准不同而略有差别,但多数情况下的使用是相通的。同时因为审计工作的特点,所使用的SQL语句也多是对数据的查询,一般并不会包括对原始数据的增加、删除、修改等操作,所以在计算机审计中重点需要掌握的内容就是灵活利用SQL语句的查询功能。实际审计工作当中,在数据审计模式下我们所常用的是如下所示的语句,也是从实际审计工作中收集出具有代表性的语句,并且所有语句都基于Access数据库,在AO现场审计实施系统中可正常使用。

一、对单个表的条件查询,用where指定查询条件,也有不使用where的情况,多用于对原始表的统计、分类等

该类情况下SQL语句的语法是“select * from 表名 where 条件”。可以指定单个条件或多个条件,并可配合其他函数或关键字使用,常用到的类型有如下几类。

(一)对单个条件的简单查询:

select * from 存款表 where 金额>=100000; 该情况的使用较为简单,适用于任何单条件查询。

(二)对多个条件的查询,各条件间可能是and或or的关系:

select * from 存款表 where金额>=100000 and 存款时间 >= #2006-1-1#;

该情况常用于对多个条件的查询,根据关键字and或or来决定是同时满足所有条件还是仅满足某些条件。

(三)对多个条件的查询,得到符合条件的某字段的合计值:

select sum(金额) from 存款表 where金额>=100000 and 存款时间 >= #2006-1-1# and 存款时间<= #2006-12-31# order by 金额 desc, 存款时间 asc;

该情况一般用于统计某种条件下的合计值,常用于对某种情况下的总金额情况进行了解。

(四)用集函数按条件查询:

select count(* ) from 凭证表 where 金额>=100000; select max(发生金额) from 存款表; select avg(发生金额) from 存款表;

该情况类似于上面求和函数的使用,可根据具体需求进行应用。

(五)对关键字的内容进行查询:

select * from 凭证表 where 摘要 like „%招待费%‟; 该情况较为常用,查询包含某些关键字的所有记录,也可结合关键字and或or等查询多个条件。

(六)查询内容是否包含在给定的范围内:

select * from 科目代码表 where 科目代码 in („101‟,‟102‟); 该情况用于所关心的字段包含内容类别较少的情况,常用在已基本确定查询范围之后。当所关心内容类别较多时可使用下面将提到的两张表的嵌套查询。

(七)对某个字段进行分组,查询各字段属性分别对应的发生次数,并按发生次数进行排序:

select 款项代码, count(款项代码) as 次数from大额现金支取表 group by 款项代码 order by count(款项代码) desc; 该情况常用于对某个所关心字段的分类统计,得出每个类别所发生的次数,并可按发生次数进行排序。

(八)按某个字段的长度进行分类并进行排序:

select len(科目代码) as 发生次数from 科目代码表 group by len(科目代码) order by len(科目代码) desc;

该情况用于了解某字段的长度分组情况,可对所取得的原始数据进行验证,以证实原始数据的规范性或找出不规范情况的问题所在。

(九)分组查询,group与having联用:

select 客户号,count(*) as 发生次数

from 存款表

where 发生金额>=100000 group by 客户号 having count(*)>1;

该类语句常用于要列出所关心某字段的某一个或几个条件限制下发生次数超出某范围的情况。如查询发生多次(即同一关键字发生的记录数大于1)大额存取的客户号及其存取次数,查询结果按客户号分组。

以上各类对单个表的查询结果并未直接存储成新表,不利于对查询结果的进一步分析利用,我们可以使用“select * into 新表名 from 表名 where 条件”这种语句格式把查询结果保存成新表,如

select * into 大额存款发生情况表 from 存款表 where 金额>=100000;

二、对多个表的条件查询,一般需根据各表的相应关键字进行连接

这种情况下必须对各表的对应关键字进行关联,一般情况下是对两张表的关联查询,当有更多张表要操作时可以每次对两张表操作后再和剩余的表关联操作,也可以扩展SQL语句同时对两个以上的表操作,以下只列出对两张表操作的情况。

(一)两张结构相同的表合并并生成新表,使用关键字union进行联合查询:

select * into 中间表 from

(select * from 原始表1 union select * from 原始表2); 该情况常用于对多个原始表的整理以生成中间表,便于后续的查询工作。如合并采集到的原始数据,将原本分月存储的数据表全并成分年度存储的数据表。

(二)两张表的连接,生成新的中间表:

select a.*,b.客户名称into 含客户名称的现金支取表 from现金支取表 as a, 客户基本信息表 as b where a.款项代码=b.款项代码; 使用该类语句的前提是两张表存在相关联的关键字,常用于一张表根据两表的连接关键字引入另一张表的某些字段,为后续的查询准备好中间表。其中使用别名可以简化SQL语句的输入。如财务数据中采集到的凭证表是两张表时,可连接两表引入摘要字段等。

(三)两张表的关联查询,可加入多个条件:

select a.*,b.科目代码 from 对公活期存款明细表 as a, 活期存款账户动态表 as b where a.款项代码=b.款项代码 and 科目代码 like ‟201%‟;

该情况可看作对两张表连接的扩展,即根据where所限定的条件来对两张表关联查询。

(四)两张表的嵌套查询,两层查询间要使用关键字in:

select * into频繁发生大额现金支取

from大额现金支取

where 交易金额>=100000 and 款项代码 in (

select 款项代码

from款项代码发生次数_大额现金支取

where 次数 >= 10 )

order by 款项代码,交易金额,记账日期;

这种情况也可理解为简单查询,不同的是其中where所指定的某个条件是由另一张表的又一个查询所指定的,与单表查询的语句

select * from 科目代码表 where 科目代码 in („101‟,‟102‟); 进行对比后发现,可将两张表的嵌套查询看作如上语句的扩展。如利用大额现金支取表和大额现金支取的款项代码发生次数表查询交易金额大且发生次数多的情况。再比如利用贷款表和股东表查询贷款表中含股东贷款的情况。

(五)多表的连接操作

多表连接可分为内连接、外连接、自身连接、交叉连接。其中内连接又分为等值连接、不等连接和自然连接,外连接又分为左连接、右连接和全连接。实际审计工作当中所用到的多是内连接与外连接,较少用到自身连接与交叉连接。多表的连接使用需根据具体情况而定,下面列出部分示例。

1.内连接的等值连接:

select * from 存款表 as a inner join 客户信息表 as b on a.款项代码=b.款项代码;

以上语句用于列出存款表和客户信息表中款项代码相同的记录。

2.外连接的左连接。

select * from 存款表 as a left join 客户信息表 as b on a.款项代码=b.款项代码; 左连接的特点是显示全部左边表中的所有项目,即使其中有些项中的数据未填写完全。右连接与此类似,其特点是显示全部右边表中的所有项目,甚至是左边表中没有和它匹配的记录。

以上列出的是数据审计模式下根据实际工作总结出的常用SQL语句,虽然所列内容并不全面,更不可能完全体现SQL查询的全面功能与精妙所在,但只要能够很好地分析出审计需求,把用自然语言表达的审计思路转化为计算机的SQL查询语句,并结合以上的常用语句适当组合运用,一定能使数据审计模式下的工作达到事半功倍的效果,更好地推动计算机审计的快速发展。

第二篇:Sql语句查询

sql语句多表连接查询

在程序开发过程中,不仅可以对单一数据表进行查询,还可以进行多表查询,用户通过多表查询从多个表中提取出需要的数据。

多表查询可以分为内连接查询、外连接查询以及联合查询。

1.内连接查询

连接查询是指通过各个表之间共同列的关联性查询数据。连接查询分为内连接查询和外连接查询。内连接是将两个相互交叉的数据集合中重叠部分的数据行连接起来,返回表示两个数据集合之间匹配连接关系的数据行。

可以在FORM子句中使用INNER JOIN„ON„建立内连接,也可以在WHERE子句中指定连接条件建立内连接,例如:

select a.UserName,b.BookName,b.Datetm from UserInfo as a inner join SellSheet as b on a.UserID= b.UserID

也可以用下面的语句实现。

select a.UserName,b.BookName,b.Datetm from UserInfo as a,SellSheet as b where a.UserID=b.UserID

2.外连接查询

外连接是对内连接的扩充,除了将两个数据集合中重叠部分以内的数据行连接起来之外,还可以根据要求返回左侧或右侧数据集合中非匹配的数据,即左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。

l左外连接LEFT OUTER JOIN

左外连接LEFT OUTER JOIN逻辑运算符除了返回两个数据表中满足连接条件的行,它还返回任何在后一个数据表中没有匹配行的前一个数据表中的行。非匹配行的部分字段列作为空值返回。

l右外连接RIGHT OUTER JOIN

右外连接RIGHT OUTER JOIN是左外连接的反向连接。它除了返回两个数据表中满足连接条件的行,还返回任何在前一个数据表中没有匹配行的后一个数据表中的行。非匹配行的部分字段列作为空值返回。

3.使用UNION进行联合查询

使用UNION运算符可以进行联合查询。UNION运算符连接多个SELECT语句,将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中所有查询的全部行。 使用UNION运算符遵循的规则如下:

(1)在使用UNION运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、算术表达式、聚集函数等)。

(2)在使用UNION组合的结果集中的相应列必须具有相同数据类型,或者两种数据类型之间必须存在可能的隐性数据转换,或者提供了显式转换。例如,在datetime数据类型的列和binary数据类型的列之间不能使用UNION运算符,除非提供了显式转换,而在money数据类型的列和int数据类型的列之间可以使用UNION运算符,因为它们可以进行隐性转换。

(3)结果集中列的名字或者别名是由第一个SELECT语句的选择列表决定的。

注意:对数据表进行联合查询时,结果集中行的最大数量是各表行数之“和”,而对数据表进行连接查询时,结果集中行的最大数量是各表行数之“积”。

第三篇:SQL语句大全

SQL练习

一、 设有如下的关系模式, 试用SQL语句完成以下操作:

学生(学号,姓名,性别,年龄,所在系)

课程(课程号,课程名,学分,学期,学时)

选课(学号,课程号,成绩)

1. 求选修了课程号为“C2”课的学生学号

2. 求选修了课程号为“C2”课的学生学号和姓名

3. 求没有选修课程号为“C2”课的学生学号

4. 求选修了课程号为“C2”,又选修了课程号为“C3”课的学生学号

5.求选修了课程号为“C2”或“C3”课的学生学号

6.求选修了全部课程的学生学号

7.求至少选修了学号为“98002”的学生所学过的所有课程的学生的学号和姓名。

8.查询学生选课表中的全部数据

9.查询计算机系学生的姓名、年龄

10.查询成绩在70—80分之间的学生的学号、课程号和成绩

11.查询计算机系年龄在18—20之间且性别为“男”的学生的姓名和年龄

12.查询成绩在80分以上的学生的姓名、课程号和成绩,并按成绩的降序排列结果。

13.查询哪些课程没有人选修,要求列出课程号和课程名。

14.查询数学系成绩在80分以上的学生的学号,姓名

15.查询课程号为“C02”的课程的最高分数。

16.查询计算机系学生的最大年龄和最小年龄。

17.统计每个系的学生人数。

18.统计每门课程的选课人数和考试最高分。

19.统计每个学生的选课门数和考试总成绩,并按选课门数的升序显示结果。

20.查询总成绩超过200分的学生,要求列出学号、总成绩。

21.用子查询实现如下查询:

(1) 查询选修了课程号“C01”的学生的姓名和所在系。

(2) 查询数学系成绩在80分以上的学生的学号和姓名。

(3) 查询计算机系考试成绩最高的学生的姓名。

22.删除选课成绩小于60分的学生的选课记录。

23.将所有选修了课程“C01”的学生的成绩加10分。

24.将计算机系所有选修了课程“计算机文化基础”课程的学生的成绩加10分。

25.创建查询学生的学号、姓名、所在系、课程号、课程名、课程学分的视图。

26.创建查询每个学生的平均成绩的视图,要求列出学生学号和平均成绩。

27.创建查询每个学生的选课学分的视图,要求列出学生学号及总学分。

第四篇:用sql语句完成下面题目:

1. 创建数据库db_Student,在db_Student中创建四张表:

学生表tb_Student,字段:SID(编号),SName(姓名),Sage(年龄),SSex(性别)

教师表tb_Teacher,字段:TID(编号),TName(姓名)

课程表tb_Course,字段:CID(编号),CName(名称),TID(教师编号)

成绩表tb_Score,字段:SID(编号),CID(课程编号),Score(成绩)

要求:分析添加约束,如:主键约束,外键约束等(15分)

2. 给表添加一些数据。(10分)

3. 完成下列查询:(30分)

① 查询姓李的老师有多少位。

② 查询c#课程的平均分。

③ 查询sql最高分的学生编号,学生姓名及分数。

④ 查询sql课程超平均分的学生姓名及分数。

⑤ 查询没有考sql的学生编号及姓名。

⑥ 查询没有学王老师课程的学生编号及姓名。

⑦ 查询课程表的第5到第10条记录,条件为编号不连续。写两种方法。

⑧ 查询每个学生的编号,姓名,课程名称,成绩,老师信息。

⑨ 查询c#考试成绩前三名的学生,包含并列的行。(可能查询的结果超过三行) ⑩ 查询c#课程比sql课程的考试分数高的学生编号及姓名。

4. 写存储过程完成下列问题,并写出存储过程执行语句:(15分)

① 根据学生编号查询学生的各科成绩及所教课程的老师

② 根据教师编号,查询所教课程(教师编号,姓名,课程编号,课程名)。

③ 写一种分页的存储过程。

5. 将第3 题的查询⑧⑨两题写成视图,然后执行查询视图。(10分)

6. 创建存储过程,在存储过程里创建事务,执行删除课程表的行时,同时删除成绩表的相

应行。(10分)

7. 创建触发器,实现删除教师表的行时,同时删除课程表的相应行。(首先删除相应表的约

束)(10分)

第五篇:数据库SQL语句十题

作业十题

1. 查询所有学生的基本信息,并按学号降序排列

SELECT * FROM STUDENT

ORDER BY sno DESC;

2. 查询系别代码为“02”的女同学信息

SELECT * FROM STUDENT

WHERE ssex=’女’ and sdept=‘02’;

3. 查询学生的总人数

SELECT COUNT(*) AS 学生总人数

FROM STUDENT;

4. 所有选修课学生的姓名,课程名及成绩

SELECT sname,cname,grade

FROM STUDENT,COURSE,SC

WHERE STUDENT.sno=SC.sno and COURSE.cno=SC.cno;

5. 不及格学生姓名(合并重复项)

SELECT distinct sname

FROM SC,STUDENT

WHERE grade<=60 and STUDENT.sno=SC.sno;

6. 查询学号为“011110”的学生的哪些课程的成绩比他数据库的成绩要高 SELECT cno

FROM COURSE

WHERE sno=’011110’ and grade>(SELECT grade FROM COURSE,SC

WHERE cname=’数据库’ and sno=‘011110’ and

COURSE.cno=SC.cno);

7. 查询选修课在3门以上(包括3门)的学生学号及选课门数 SELECT sno,COUNT(*) AS 选修门数

FROM SC

GROUP BY sno HAVING COUNT(*)>=3;

8. 查询学号为“011110”的学生的平均成绩,并以平均成绩命名 SELECT AVG(grade) AS average grade

FROM SC

WHERE sno=’011110’;

9. 查询计算机系或英语系的所有学生的个人信息

SELECT*FROM STUDENT

WHERE sdeptIN(SELECT sdept FROM DEPT

WHERE sdname=’计算机系’OR sdname=’英语系’);

10. 查询与“罗宇波”同一个系的学生情况

SELECT * FROM STUDENT

WHERE sdept=(SELECT sdept FROM STUDENT

WHERE sname=’罗宇波’);

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【常用sql语句范文】相关文章:

sql常用语句范文06-06

常用的sql语句06-21

常用经典sql语句07-31

经典常用sql语句07-31

常用简单sql语句07-31

sql常用语句一览07-31

vf常用sql语句07-31

vf常用sql语句大全06-03

sql选择语句04-09

类sql语句04-16

上一篇:jsp内容总结范文下一篇:协会章程经典范文