> Is there any theoretically stronger expressive power one gets from Prolog over SQL,
I guess this is best illustrated by examples.
In prolog, you can define how people are related using "facts" or data:
person_parent(alfred, benny).
person_parent(benny, carl).
This then forms relationships. In SQL you could write:
CREATE TABLE persons ( name TEXT NOT NULL, parent TEXT NOT NULL);
The difference lies in how you query said data.
Let's say I want to know if "carl" is the grandparent of "alfred", in Prolog I would first write a rule to define what a grandparent is:
grandparent(X, Y):- person_parent(X, Z), person_parent(Z, Y).
Then query if "carl" is the grandparent of "alfred":
grandparent(alfred, carl). --> true
Now, the interesting thing is that I can use the same rule to ask how many grandkids carl has:
grandparent(X, carl). --> X = alfred (and any other kid)
Or, I could ask how many grandparents alfred has
grandparent(alfred, Y). --> Y = carl (and any other grandparent)
Or I could ask for any combinations of kids and their grandparents
grandparent(X, Y). --> X = alfred, Y = carl (and any other combination).
In SQL, on the other hand, you'd have to write each of these queries by hand.
A more powerful example, is defining the rules of suduko and then asking prolog to finish solving a board for you. I will not even begin to suggest how that would be done in SQL (partly because you simply would not use SQL for that).