Considere el siguiente esquema de base de datos:
BOOK(Book_id, Title, Publisher_name) BOOK_AUTHORS(Book_id, Author_name) PUBLISHER(Name, Address, Phone) BOOK_COPIES(Book_id, Branch_id, No_of_copies) BOOK_LOANS(Book_id, Branch_id, Card_no, Date_out, Due_date) LIBRARY_BRANCH(Branch_id, Branch_name, Address) BORROWER(Card_no, Name, Address, Phone)
Tenga en cuenta que BOOK_COPIES solo contiene entradas donde No_of_copies es al menos 1: si una sucursal no contiene ninguna copia de algún libro, no hay ninguna entrada en BOOK_COPIES (no una entrada con 0 copias).
Los atributos clave están subrayados. Las restricciones de clave externa son las siguientes:
- Publisher_name en BOOK se refiere al nombre en PUBLISHER.
- Los atributos Book_id en BOOK_AUTHORS, BOOK_COPIES y BOOK_LOANS hacen referencia al Book_id en BOOK.
- Los atributos Branch_id en BOOK_COPIES y BOOK_LOANS ambos se refieren a Branch_id en LIBRARY_BRANCH.
- El Card_no en BOOK_LOANS se refiere al Card_no en BORROWER.
Queremos encontrar los títulos de todos los libros escritos por los autores que han escrito la mayor cantidad de libros. ¿Cuál de las siguientes consultas no es correcta?
(Suponga que puede haber un empate).
(A)
SELECT DISTINCT Title FROM BOOK NATURAL JOIN BOOK_AUTHORS WHERE Author_name IN ( SELECT Author_name FROM BOOK NATURAL JOIN BOOK_AUTHORS GROUP BY Author_name HAVING COUNT(*) >= ALL ( SELECT COUNT(*) FROM BOOK NATURAL JOIN BOOK_AUTHORS GROUP BY Author_name ) )
(B)
SELECT DISTINCT Title FROM BOOK NATURAL JOIN BOOK_AUTHORS WHERE Author_name = ANY ( SELECT Author_name FROM BOOK NATURAL JOIN BOOK_AUTHORS GROUP BY Author_name HAVING COUNT(*) >= ALL ( SELECT COUNT(*) FROM BOOK NATURAL JOIN BOOK_AUTHORS GROUP BY Author_name ) )
(C)
SELECT DISTINCT Title FROM BOOK NATURAL JOIN BOOK_AUTHORS A WHERE ( SELECT COUNT(*) FROM BOOK_AUTHORS A2 WHERE A.Author_name=A2.Author_name ) >= ALL ( SELECT COUNT(*) FROM BOOK NATURAL JOIN BOOK_AUTHORS GROUP BY Author_name )
(D)
SELECT DISTINCT Title FROM BOOK NATURAL JOIN BOOK_AUTHORS WHERE Author_name = ( SELECT Author_name FROM BOOK NATURAL JOIN BOOK_AUTHORS GROUP BY Author_name HAVING COUNT(*) >= ALL ( SELECT COUNT(*) FROM BOOK NATURAL JOIN BOOK_AUTHORS GROUP BY Author_name ) )
Respuesta: (D)
Explicación: Tenga en cuenta que lo siguiente solo funciona si no hay un empate, es decir, hay un solo autor con la mayor cantidad de libros:
SELECT DISTINCT Title FROM BOOK NATURAL JOIN BOOK_AUTHORS WHERE Author_name = ( SELECT Author_name FROM BOOK NATURAL JOIN BOOK_AUTHORS GROUP BY Author_name HAVING COUNT(*) >= ALL ( SELECT COUNT(*) FROM BOOK NATURAL JOIN BOOK_AUTHORS GROUP BY Author_name ) )
La opción (D) es correcta.
Cuestionario de esta pregunta
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA