This monograph provides an intensive course for graduate students in computer science, as well as others interested in extensions of logic programming, on the theoretical foundations of disjunctive logic programming. Disjunctive logic programming permits the description of indefinite or incomplete information through a disjunction of atoms in the head of a clause. The authors describe model theoretic semantics, proof theoretic semantics, and fixpoint semantics for disjunctive and normal disjunctive programs (a normal disjunctive program permits negated atoms in the body of a clause) and present theories of negation. They conclude with selected applications to knowledge databases.