Datalog is a database query language based on the logic programming paradigm; it has been designed and intensively studied through the last five years. We present the syntax and semantics of Datalog and its use for querying a relational database. Then, we classify optimization methods for achieving efficient evaluations of Datalog queries, and present the most relevant methods. Finally, we discuss various enhancements of Datalog, currently under study, and indicate what is still needed in order to extend Datalog's applicability to the solution of real-life problems The aim of this paper is to provide a self-contained tutorial, addressed also to those members of the database community who are not too familiar with logic programming concepts. The paper is divided into two parts. Part One contains Sections 1, 2, 3, and the bibliography. In Section 2 we presented the foundations of Datalog; in Section 3 we explained how Datalog is used as a query language over relational database. Part Two is thus organized: Section 4 presents a taxonomy of the various optimization methods: in Section 5, we introduce some representative evaluation methods and optimization techniques. In Section 6, we present several formal extensions to Datalog. Finally, in Section 7 we attempt an evaluation of what will be required to make Datalog more attractive and usable. For the list of references, the reader is referred to Part 1 (Issue No. 4, pp. 20-38, 1991).