# Filtering (WHERE) and Sorting Data (ORDER BY)

• Print
This chapter is from the book

## Exam Prep Questions

1. What is the symbol < called in this query?

2. `SELECT TITLE, RANK FROM MOVIE WHERE RANK < 1000;`
1. Logical operator

2. Comparison condition

3. Comparison operator

4. Logical condition

5. None of the above

Answer B, comparison condition, is the correct answer. A, logical operator, should be called a logical condition, and those are NOT, AND, and OR. C contradicts B and is thus incorrect. Because B is correct, E is incorrect.

3. This query will cause an error. Why?

4. `SELECT TITLE, RANK, REVIEW_RANK FROM MOVIE WHERE RANK/100 > 0.5;`
1. RANK/100 cannot be compared with 0.5 using the > operator.

2. The FROM clause is incorrect.

3. The WHERE clause should appear before the FROM clause.

4. Too many columns are selected.

5. The query will not cause an error.

There is nothing wrong with this query, and thus answer E is correct. The WHERE clause, its expression, and the FROM clause are fine; thus A, B, and C are not correct answers. D is incorrect because there is no limitation on the number of columns selected; the only limitation is that they must exist.

5. What will this query find? Select the best answer.

6. `SELECT TITLE FROM MOVIE WHERE TITLE LIKE 'B%e%';`
1. All rows with TITLE beginning with the letter B.

2. It will cause an error.

3. All movies containing an e in their title.

4. The intersecting rows from answers A and C.

5. None of the above.

Answer D is correct because it is the "best" answer. The query will return only movie titles beginning with B and containing an e. Both answer A and answer C are partially correct because only some rows could be returned for each due to the possibility of rows without both characters. Both answer B and answer E are therefore incorrect as well.

1. Both IN and EXISTS can compare two expressions.

2. IN compares two expressions.

3. IN compares a single expression against a list of values.

4. EXISTS compares a single expression with a Boolean (true or false) result.

5. All of the above.

IN compares two expressions; EXISTS produces a Boolean result for a single expression. Therefore, A is wrong, and E is thus incorrect as well. B, C, and D are all correct.

8. Assume that the MOVIE table contains titles with YEAR column values in all three of the years 1998, 1999, and 2000. Which of these queries produces the least number of rows?

1. SELECT TITLE FROM MOVIE WHERE YEAR = ANY(1998,1999,2000);

2. SELECT TITLE FROM MOVIE WHERE YEAR = SOME(1998,1999,2000);

3. SELECT TITLE FROM MOVIE WHERE YEAR = ALL(1998,1999,2000);

C is correct because it will produce zero rows. A and B will produce at least three rows each (at least one for each year). Why? ANY and SOME require that the YEAR must match at least one of the three years 1998, 1999, and 2000. ALL, on the other hand, requires that every movie must have three values in the YEAR column: 1998, 1999, and 2000. This is of course impossible, and thus C produces no rows at all, the least number of rows.

9. What type of a query is this?

10. ```SELECT * FROM
(SELECT TITLE FROM MOVIE ORDER BY RANK DESC) WHERE ROWNUM < 4;```

Valid answers are Top-N, TopN, Top-N query, TOPN query, in uppercase, lowercase, or mixed case.

11. How many rows will this query find?

12. ```SELECT * FROM
(SELECT TITLE FROM MOVIE ORDER BY RANK DESC)
WHERE ROWNUM > 4;```

Valid answers are 0, zero, none, no rows, in any case. ROWNUM > 4 is invalid. Only ROWNUM < 4 is valid. This is because ROWNUM is a pseudocolumn generated as the query is produced. It is impossible to tell what is greater than when values greater than 4 have not yet been reached.

13. How many rows will this query produce?

14. ```SELECT TITLE, RANK FROM MOVIE
WHERE RANK BETWEEN 1000 AND 900;```

Valid answers are 0, zero, none, no rows. Why? RANK BETWEEN 1000 AND 900 equates to the expression: RANK >=1000 AND RANK <= 900. We cannot find >=1000 and <=900 using BETWEEN.

15. What is wrong with this query?

16. ```SELECT TITLE FROM MOVIE
WHERE YEAR = 2000 AND RANK > 1000 OR REVIEW_RANK > 4;```
1. Not enough columns are selected.

2. The second and third comparisons should be replaced with BETWEEN.

3. Precedence!

4. There is nothing wrong with this query.

5. None of the above.

The correct answer is C; the problem is precedence and lack of parentheses, (... AND ...). A coder examining this query should spot the lack of parentheses before anything else.

17. For this query, if some rows have NULL valued GENDER columns, where will those NULL valued rows appear in the sorted order?

18. ```SELECT GENDER, TYPECAST, NAME FROM ACTOR
ORDER BY TYPECAST DESC NULLS FIRST;```
1. First

2. Last

3. Never

4. In the middle

The correct answer is A. By default, NULL values are not sorted and Oracle Database returns them at the end of a query, appearing as the final rows returned. Both the DESC and the NULLS FIRST clauses force NULL rows to be returned as the beginning rows of the query. Therefore, answers B, C, and D are all incorrect.