问题 问答题

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。

  【说明】

  天津市某银行信息系统的数据库部分关系模式如下所示:

  客户(客户号,姓名,性别,地址,邮编,电话)

  账户(账户号,客户号,开户支行号,余额)

  支行(支行号,支行名称,城市,资产总额)

  交易(交易号,账户号,业务金额,交易日期)

  其中,业务金额为正值表示客户向账户存款;为负值表示取款。

(1)现银行决策者希望查看在天津市各支行开户且2009年9月使用了银行存取服务的所有客户的详细信息,请补充完整相应的查询语句。

 

(2)假定一名客户可以申请多个账户,给出在该银行当前所有账户余额之和超过百万的客户信息并按客户号降序排列。

答案

参考答案:

(1) (d)支行.城市=’天津市’ (e)交易.交易日期 LIKE’2009-09-%’或 等价表示 注:(d)(e)次序无关 (f)(SELECT*FROM 支行WHERE 城市=’天津市’) (g)(SELECT*FROM 交易WHERE 交易日期 LIKE’2009-09%’)或 等价表示 (2) (h)客户号 IN (i)HAVING SUM(余额)>1000000.00 或 等价表示 (j)客户号 DESC

解析:

SQL查询通过SELECT语句实现。  (1)根据问题2要求应在表连接条件的基础上,需要添加两个条件:①支行关系的城市属性值为"天津市",即支 行.城市='天津市';②在2009年9月存在交易记录,由于交易日期形式为'2000-01-01',所以需要通过模糊匹配来实现,用LIKE关键词和 通配符表示,即交易,交易日期LIKE'2009-09-%'。  WHERE子句中条件的先后顺序会对执行效率产生影响。假如解析器是按照先后顺序依次 解析并列条件,优化的原则是:表之间的连接必须出现在其他WHERE条件之后,那些可以过滤掉最多条记录的条件尽可能出现在WHERE子句中其他条件的前 面。要实现上述优化过程,可以重新组织WHERE条件的顺序或者通过嵌套查询以缩小连接记录数目的规模来实现。  根据问题2要求,考生需要添加两个子查 询以缩小参与连接的记录的数目,即筛选出天津市的所有支行(SELECT*FROM支行WHERE城市='天津市'),而且找到2009年9月发生的交易 记录(SELECT*FROM交易WHERE交易日期LIKE'2009-09-%'),然后再做连接查询。  (2)根据问题2要求,可通过子查询实 现"所有账户余额之和超过百万的客户信息"的查询;对SUM函数计算的结果应通过HAVING条件语句进行约束;降序通过DESC关键字来实现。

单项选择题
填空题