一、原题
View the Exhibit and examine the structure of the CUSTOMERS table.
You want to generate a report showing the last names and credit limits of all customers whose last names start with A, B, or C, and credit limit is below 10, 000.
Evaluate the following two queries:
SQL> SELECT cust_last_name, cust_credit_limit
FROM customers
WHERE (UPPER(cust_last_name) LIKE ‘A%‘ OR UPPER(cust_last_name) LIKE ‘B%‘ OR UPPER(cust_last_name) LIKE ‘C%‘)
AND cust_credit_limit < 10000;
SQL>SELECT cust_last_name, cust_credit_limit FROM customers
WHERE UPPER(cust_last_name) BETWEEN ‘A‘ AND ‘C‘
AND cust_credit_limit < 10000;
Which statement is true regarding the execution of the above queries?
A. Only the first query gives the correct result.
B. Only the second query gives the correct result
C. Both execute successfully and give the same result.
D. Both execute successfully but do not give the required result.
答案:A
个人理解:
题目第一个条件,要求返回字母A,B,C开头的客户名,查询二没有返回符合要求的结果,原因解释居然有多种理解。根据个人理解,第二个查询返回的是以A和B开头(包括大小写!)的所有和单字母C(包括 大小写C)的用户名。
其实这个题我觉得都有点问题,既然只是判断首字母,那按惯例就不用UPPER函数,因为首字母按惯例已经是大写了,(这里用INITCAP不是更好理解?),那用了UPPER函数,是不是意味着还要返回小写字母a、b、c开头的姓名呢?(表中也没有说明该字段限定一定要用大写字母开头呀,惯例总不能直接默认了吧)而题干好像只是要求大写字母开头的,用了UPPER查询判断的又如何只返回大写字母开头的呢??除非还有另外一种解释,没加双引号的ABC字母表示是大写和小字的,而加了双引号都表示只包含大写??