【网学网提醒】:网学会员鉴于大家对十分关注,论文会员在此为大家搜集整理了“SQL语句的循序渐进写法”一文,供大家参考学习
SQL语句的循序渐进写法
燕子老师发表于2007-8-2918:41:00
二级VF考试中,SQL语言部分占了很大比例,可以说该部分掌握好坏直接关系到整个考试的成败。
在上机考试中,初学者在进行SQL语言查询时常常丢三拉四,或是标点符号的全角半角搞错了,或丢掉了某些必要步骤,导致很长时间也无法得到正确输入。
那么,如何能书写好的复杂SQL查询语句呢?
本人归纳了一套循序渐进的书写方法,对于初学者非常有效。
1)SQL语句的格式可以归纳为:
select字段from表;
where筛选条件;
groupby分组字段;
having分组条件;
orderby排序字段asc,desc
2)学习语言可以认为是一个学习填空的过程。语言的框架已经在设计语言编译器时就给定了,用户不可违背,必须遵守语言提供好的规范,用户做的就是把自己需要表达的东西以填空的方式填入其中。
2.1)分析数据源,尝试在命令窗口运行基本框架直到正确。
单表可以在命令窗口中输入:select*from表
双表可以在命令窗口中输入:select*from表1,表2where表1.联接字段=表2.联接字段
三表需要分析表如何链接然后在命令窗口中输入:select*from表1,表2,表3where表1.联接字段=表2.联接字段and表2.联接字段=表3.联接字段
如果采用超联接模式书写,
双表模式可以书写为:select*from表1join表2on表1.联接字段=表2.联接字段
三表模式可以书写为:select*from表1join表2join表3on表2.联接字段=表3.联接字段and表1.联接字段=表2.联接字段
2.2)分析筛选条件,将其转换为逻辑表达式。
光标移动到上一步骤命令末尾,补充筛选条件,然后回车检查。
如果出现错误或同预期结果不同,说明刚才输入语句有问题,修改后继续回车检查。
2.3)补充筛选字段,具体操作类似上一步,光标移动到上一步骤命令末尾,补充筛选条件,然后回车检查。
如果出现错误或同预期结果不同,说明刚才输入语句有问题,修改后继续回车检查。
2.4)补充排序条件
以上操作看似烦琐,实则不然:每次增加的部分不是全部SQL语句重新输入,而是在已经成功的命令行基础上予以修订和补充。上一步骤已经正确完成了,出现错误的话只能是本步骤操作失误造成的,修改增加部分即可。
相反,由于初学者对SQL语法格式不熟悉,书写SQL语句巴不得一气呵成,一旦发生错误,往往会用大量时间去调试,反而欲速而不达。
根据题目要求还可以继续补充:
2.5)补充分组字段,增加groupby语句,查看能否正确分组,但这时一定注意,select*from表groupby分组字段弹出每一行记录除少数字段有意义外,因此最好随后修改显示字段
2.6)在增加分组
字段正确后,补充having条件
2.7)最后补充其它信息,如top短语、intotable等短语等
以下题为例采用循序渐进法予以说明:
例:以表employee.dbf和orders.dbf中数据为基础,使用SQL命令检索订单数最多的前三名男职工的职工号、、订单数,检索结果按订单数降序存入表newcoun.dbf中。
employee(职工号,,性别,年龄)
orders(订单号,订购物品,订购单位,订购日期,职工号)
分析:首先打开两表,发现两表属于1对多关系,一个职工对应多个订单。没有订单数字段,只能按照职工号分组然后通过COUNT计数后求出订单数量。
操作:
1)搭建框架,在命令窗口中输入基本框架:select*fromemployeeejoinordersoone.职工号=o.职工号
2)补充筛选字段,光标移动到上一行末尾,补充为:select*fromemployeeejoinordersoone.职工号=o.职工号where性别="男"
3)补充分组字段,光标移动到上一行末尾,补充为:select*fromemployeeejoinordersoone.职工号=o.职工号where性别="男"groupbye.职工号
4)修改显示字段:selecte.职工号,,count(*)as订单数fromemployeeejoinordersoone.职工号=o.职工号where性别="男"groupbye.职工号
5)没有having分组条件,补充top短语:selecttop3e.职工号,,count(*)as订单数fromemployeeejoinordersoone.职工号=o.职工号where性别="男"groupbye.职工号
6)补充查询去向:selecttop3e.职工号,,count(*)as订单数fromemployeeejoinordersoone.职工号=o.职工号where性别="男"groupbye.职工号intotablenewcoun
大家可以把这种方法推广到其它方面,也可在查询设计器中套用该方法。总之,操作不可急于求成,要按部就班,循序渐进。