tags:

views:

39

answers:

2

As someone who comes from the world of Object Orientation, I find it rather difficult to wrap my head around SQL. Recently, however, I realized that the classical SQL construct

select X from Y where Z

is basically equivalent to the following OOP construct:

List<SomeType> results = db.query(new Matcher<SomeType> () {
  public boolean match(SomeType candidate) {
    return ...; // checks condition Z on candidate, returns true for match
  }
};

So my question is: What are the OOP equivalents for other SQL constructs, such as joins?

+1  A: 

What are the OOP equivalents for other SQL constructs, such as joins?

Imagine that we have a query like following:

SELECT * FROM tableA JOIN tableB ON tableA.b_id = tableB.id WHERE tableA.someFld < 50;

So you need to fetch every record from tableA that match condition from WHERE clause (tableA.someFld < 50). Then for every record from result set check whole tableB to find records that match ON clause.

// Pseudo-code
Query query = new Query();
query.where(new Matcher....);
query.join(new Matcher<SomeType>() {
  public boolean match(SomeType tableACandidate, SomeType tableBCandidate) {
    return tableACandidate.getBId() == tableBcaididate.getId();
  }
});

ResultSet result = query.execute();
Crozin
+2  A: 

I think Microsoft's LINQ (Language Independent Query) has made an attempt at creating a language that can be used as an object-oriented version of SQL. Hibernate's HQL would be another. I'd recommend exploring both of those if SQL is giving you problems. Maybe they can make it clearer to you.

duffymo