public
Description: A relational database using <table> tags and jQuery
Clone URL: git://github.com/nkallen/jquery-database.git
Search Repo:
Nick Kallen (author)
Tue Apr 08 01:02:34 -0700 2008
commit  96ed31fe17663d385749aaa5394977e3093879e8
tree    4f18a49cfe782873f62d32e1f70fa9c91c2f8d3a
parent  4e30c5e560cff3c5309169856cb6c699d3fd124e
name age message
folder README Tue Apr 08 01:02:34 -0700 2008 documentation [Nick Kallen]
folder example.html Tue Apr 08 01:02:34 -0700 2008 documentation [Nick Kallen]
folder jquery.db.js Tue Apr 08 00:25:16 -0700 2008 added source [Nick Kallen]
README
Today I was thinking aloud about [Tree Regular 
Expressions](http://research.microsoft.com/Users/luca/Slides/2003-11-13%20Transitions%20in%20Programming%20Models%20\(Li
sbon\).pdf) and how they might make a nice query language for document databases like CouchDB. Someone pointed out that 
CSS3 selectors might make a great concrete syntax for this. One thing lead to another and I thought, why not build a 
relational database in HTML? So I did. I even got **inner joins** working.

Let's start with a few tables:

    <table class="users">
      <tr>
        <td class="id">1</td>
        <td class="first_name">amy</td>
        <td class="last_name">bobamy</td>
      </tr> 
      ...
    </table>
    <table class="photos">
      <tr>
        <td class="id">1</td>
        <td class="user_id">1</td>
        <td class="url">http://www.example.com/foo.png</td>
      </tr> 
    </table>

Now we can express some queries:

    $('.users')
      .where('.id:eq(1)')
      .select('*')

This is equivalent to `SELECT * FROM users WHERE id = 1`

    $('.users')
      .where('.id:eq(1)')
      .select('.id, .name')

This is equivalent to `SELECT id, name FROM users WHERE id = 1`. Here is something slightly more complicated:

    $('.users')
      .where('.name:contains(a)')
        .and('.name:contains(c)')
      .select('*')

But here is **the crowning glory**, the inner join:

    $('.users')
      .join('.photos')
      .where('.photos.user_id:eq(.users.id)')
        .and('.users.id:eq(1)')
      .select('.photos.url')

This is equivalent to:

    SELECT photos.url FROM users, photos
    WHERE photos.user_id = users.id
      AND users.id = 1
      
[Download the fun](http://github.com/nkallen/jquery-database/tree/master) at Github.