à la 
SQL 
SQL and NoSQL: 
Better Together 
Alasql.js approach to process 
complex JSON data within SQL 
© 2014, Andrey Gershun
Content 
 SQL and NoSQL 
 JSON objects in SQL 
 JSON tables 
 Find 
 Insert 
 Update 
 Remove
SQL + NoSQL: historical perspective 
 SQL databases 
 NoSQL databases 
 Mongo 
 Key-Value Storages 
 IndexedDB 
 SQL + NoSQL 
 PostgreSQL approach 
 Others SQL Servers 
 JavaScript + NoSQL
Pourquois pas? 
 NoSQL 
 Documents – NoSQL 
 JavaScript objects – NoSQL 
 SQL 
 Regular normalized data – SQL 
 Data with schema – SQL 
 NoSQL + SQL 
 Complex calculations and aggregations (with optimization) - SQL 
 Web applications with complex data 
 One database instead two…
JSON objects in Alasql SQL 
(since version 0.0.25) 
https://github.com/agershun/alasql/tree/version-0.0.25 
 @ prefix (like in Objective-C) 
 @1 
 @”one” 
 @true 
 @[1,2,3] 
 @{a:1,b:2} 
 @[{a:1},{a:2}] 
 @{a:@[1,2]} – “@[“ - is necessary for arrays (because of 
column names)
JSON with expressions 
 CREATE TABLE one; 
 INSERT INTO one VALUES @{b:1}, @{b:2} 
 SELECT @{a:@[2014,(2014+1),(2014+b)]} FROM one 
 [{a:[2014,2015,2015]}, {a:[2014,2015,2016]}]
CREATE TABLE AND INSERT VALUES 
 JSON table 
 CREATE TABLE one; 
 INSERT INTO one VALUES @{a:1}, @{b:2}, @{a:1,b:2}, @1, 
@”String” 
 JSON object 
 CREATE TABLE two (a JSON); 
 INSERT INTO one VALUES (1), (‘two’), (@{b:’three’}), 
@[‘F’,’O’,’U’,’R’]
SELECT JSON 
 SELECT * FROM one 
 [{a:1}, {b:2}, {a:1,b:2}, 1, ”String”] 
 SELECT a FROM one 
 [{a:1}, {a:undefined}, {a:1}, {a:undefined},{a:undefined}] 
 SELECT * FROM one WHERE a=1 
 [{a:1},{a:1,b:2}]
Property 
 Property operator -> 
 INSERT INTO one VALUES @{a:5, b:{c:[4,5]}} 
 SELECT * FROM one WHERE a->b->0 = 4 
 Expression 
 SELECT * FROM one WHERE a->(LCASE(“B”))->(1-1) = 4
? parameters value 
 alasql(‘INSERT INTO one VALUES @{year:?, b:1}’,[2014]); 
 alasql(“select * from sales where dt == @{year:?}”, [2014])
Deep equal (==, !==) 
 SELECT @{a:1} == @{a:1} 
 True 
 SELECT * FROM one WHERE a=1 
 INSERT INTO one VALUES {a:[5,6]} 
 SELECT * FROM one WHERE a==@[5,6]
Deep Clone 
 SELECT a FROM one 
 SELECT deepClone(a) FROM one 
 See test 139 for more details 
 https://github.com/agershun/alasql/blob/version-0.0.25/test/test139.js
Search a la MongoDB 
JavaScript interface like MongoDB 
 Proposed Syntax 
 See in version > 0.0.26 
 https://github.com/agershun/alasql/tree/version-0.0.26
WHERE JSON a la MongoDB 
 table.find(mongo-style-json) 
 “SELECT * FROM one WHERE @{mongo-style-object}” 
 SELECT * FROM one WHERE @{yearid:2014} 
 SELECT * FROM one WHERE @{yearid:{$gt:2014}} 
 SELECT * FROM one WHERE @{yearid:@[2014,2015]}
Alasql NoSQL interface 
 var db = alasql.create(“test”) => CREATE DATABASE test 
 var tb = db.create(“one”); => CREATE TABLE one 
 tb.insert({a:1}); => INSERT INTO one VALUES @{a:1} 
 tb.find({a:[1,2,3]}); => SELECT * FROM one WHERE 
@{a:@[1,2,3]} 
 tb.update({b:1},{a:[1,2,3]}); => UPDATE one SET @{b:1} 
WHERE @ @{a:@[1,2,3]} 
 tb.remove({a:[1,2,3]}); => DELETE FROM one WHERE 
@{a:@[1,2,3]}
Download 
 Download and try SQL with NoSQL in Alasql 
 https://github.com/agershun/alasql/tree/version-0.0.25

SQL and NoSQL Better Together in Alasql

  • 1.
    à la SQL SQL and NoSQL: Better Together Alasql.js approach to process complex JSON data within SQL © 2014, Andrey Gershun
  • 2.
    Content  SQLand NoSQL  JSON objects in SQL  JSON tables  Find  Insert  Update  Remove
  • 3.
    SQL + NoSQL:historical perspective  SQL databases  NoSQL databases  Mongo  Key-Value Storages  IndexedDB  SQL + NoSQL  PostgreSQL approach  Others SQL Servers  JavaScript + NoSQL
  • 4.
    Pourquois pas? NoSQL  Documents – NoSQL  JavaScript objects – NoSQL  SQL  Regular normalized data – SQL  Data with schema – SQL  NoSQL + SQL  Complex calculations and aggregations (with optimization) - SQL  Web applications with complex data  One database instead two…
  • 5.
    JSON objects inAlasql SQL (since version 0.0.25) https://github.com/agershun/alasql/tree/version-0.0.25  @ prefix (like in Objective-C)  @1  @”one”  @true  @[1,2,3]  @{a:1,b:2}  @[{a:1},{a:2}]  @{a:@[1,2]} – “@[“ - is necessary for arrays (because of column names)
  • 6.
    JSON with expressions  CREATE TABLE one;  INSERT INTO one VALUES @{b:1}, @{b:2}  SELECT @{a:@[2014,(2014+1),(2014+b)]} FROM one  [{a:[2014,2015,2015]}, {a:[2014,2015,2016]}]
  • 7.
    CREATE TABLE ANDINSERT VALUES  JSON table  CREATE TABLE one;  INSERT INTO one VALUES @{a:1}, @{b:2}, @{a:1,b:2}, @1, @”String”  JSON object  CREATE TABLE two (a JSON);  INSERT INTO one VALUES (1), (‘two’), (@{b:’three’}), @[‘F’,’O’,’U’,’R’]
  • 8.
    SELECT JSON SELECT * FROM one  [{a:1}, {b:2}, {a:1,b:2}, 1, ”String”]  SELECT a FROM one  [{a:1}, {a:undefined}, {a:1}, {a:undefined},{a:undefined}]  SELECT * FROM one WHERE a=1  [{a:1},{a:1,b:2}]
  • 9.
    Property  Propertyoperator ->  INSERT INTO one VALUES @{a:5, b:{c:[4,5]}}  SELECT * FROM one WHERE a->b->0 = 4  Expression  SELECT * FROM one WHERE a->(LCASE(“B”))->(1-1) = 4
  • 10.
    ? parameters value  alasql(‘INSERT INTO one VALUES @{year:?, b:1}’,[2014]);  alasql(“select * from sales where dt == @{year:?}”, [2014])
  • 11.
    Deep equal (==,!==)  SELECT @{a:1} == @{a:1}  True  SELECT * FROM one WHERE a=1  INSERT INTO one VALUES {a:[5,6]}  SELECT * FROM one WHERE a==@[5,6]
  • 12.
    Deep Clone SELECT a FROM one  SELECT deepClone(a) FROM one  See test 139 for more details  https://github.com/agershun/alasql/blob/version-0.0.25/test/test139.js
  • 13.
    Search a laMongoDB JavaScript interface like MongoDB  Proposed Syntax  See in version > 0.0.26  https://github.com/agershun/alasql/tree/version-0.0.26
  • 14.
    WHERE JSON ala MongoDB  table.find(mongo-style-json)  “SELECT * FROM one WHERE @{mongo-style-object}”  SELECT * FROM one WHERE @{yearid:2014}  SELECT * FROM one WHERE @{yearid:{$gt:2014}}  SELECT * FROM one WHERE @{yearid:@[2014,2015]}
  • 15.
    Alasql NoSQL interface  var db = alasql.create(“test”) => CREATE DATABASE test  var tb = db.create(“one”); => CREATE TABLE one  tb.insert({a:1}); => INSERT INTO one VALUES @{a:1}  tb.find({a:[1,2,3]}); => SELECT * FROM one WHERE @{a:@[1,2,3]}  tb.update({b:1},{a:[1,2,3]}); => UPDATE one SET @{b:1} WHERE @ @{a:@[1,2,3]}  tb.remove({a:[1,2,3]}); => DELETE FROM one WHERE @{a:@[1,2,3]}
  • 16.
    Download  Downloadand try SQL with NoSQL in Alasql  https://github.com/agershun/alasql/tree/version-0.0.25