{"id":11258,"date":"2018-11-25T00:00:18","date_gmt":"2018-11-25T08:00:18","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=11258"},"modified":"2023-09-15T09:29:27","modified_gmt":"2023-09-15T16:29:27","slug":"a-sql-implementation","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/","title":{"rendered":"A SQL++ Implementation"},"content":{"rendered":"<h2><strong>Summary<\/strong><\/h2>\n<p>With the proliferation of JSON databases in recent years, a new query language <a href=\"https:\/\/www.couchbase.com\/sqlplusplus\/\">SQL++<\/a> has begun to emerge that could standardize on how to access these data sources.\u00a0 In fact the language has been around for a number of years now, but has existed mostly in the academic realm. Couchbase N1QL, a SQL language for JSON data, was released in 2015. The company has continued to develop its N1QL\/SQL++ language and in October 2018, it\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/announcing-couchbase-6-0\/\">announced<\/a>\u00a0the release of Couchbase Analytics.\u00a0\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Donald_D._Chamberlin\">Don Chamberlin<\/a>, co-inventor of the original SQL, has also authored a\u00a0<a href=\"https:\/\/www.amazon.com\/SQL-Users-Tutorial-Don-Chamberlin\/dp\/0692184503\/ref=sr_1_3?s=books&amp;ie=UTF8&amp;qid=1542735380&amp;sr=1-3&amp;keywords=SQL%2B%2B\">SQL++ tutorial book<\/a>\u00a0with practical examples that work with Couchbase Analytics.<\/p>\n<h2><b>Overview<\/b><\/h2>\n<p><span style=\"font-weight: 400\">SQL++ is a database query language that is designed to work with both structured and semi-structured data. The language is based on the original SQL with extensions for it to work with JSON document database. In relational databases, data is represented in a tabular fashion. The rows in a table each have the same flat record structure, with identical field names and field types (according to the table\u2019s schema). Semistructured databases relax these constraints, allowing records to be nested, to have different field names and types, and do not require a schema. Accordingly, SQL++ \u201cextends\u201d SQL, the query language standard used in the relational world, by relaxing its restrictions on the data model. By doing so, SQL++ retains the benefits of SQL, including its high-level declarative nature, while allowing it to handle the more flexible structures commonly found in the semi-structured world. Relational database vendors like IBM , Microsoft, and Oracle, as well as open-source systems like PostgreSQL and MySQL, have extended their own versions of SQL to work with JSON data. They add (often system-specific) extensions for JSON as a column type as well as new functions, and in some cases new syntax, to enable the manipulation of JSON documents<\/span><a href=\"https:\/\/www.ibm.com\/developerworks\/data\/library\/techarticle\/dm-1306nosqlforjson1\/index.html\"><span style=\"font-weight: 400\">[1]<\/span><\/a><a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/t-sql\/functions\/json-functions-transact-sql?view=sql-server-2017\"><span style=\"font-weight: 400\">[2]<\/span><\/a><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/12.2\/adjsn\/generation.html#GUID-C0F8F837-EE36-4EDD-9261-6E8A9245906C\"><span style=\"font-weight: 400\">[3]<\/span><\/a><a href=\"https:\/\/www.postgresql.org\/docs\/9.3\/functions-json.html\"><span style=\"font-weight: 400\">[4]<\/span><\/a><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/json.html\"><span style=\"font-weight: 400\">[5]<\/span><\/a><span style=\"font-weight: 400\"> The ANSI\/ISO SQL standard itself was extended in a similar fashion in 2016<\/span><a href=\"https:\/\/www.ansi.org\/search_results?menuid=search_results&amp;cx=016411134356970301196:ufdyk3moz48&amp;cof=FORID:11&amp;q=JSON&amp;sa=Search\"><span style=\"font-weight: 400\">[6]<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">In contrast, as explained above, SQL++ was developed by relaxing SQL\u2019s target data model in order to arrive at a query language where JSON data is treated as \u201cfirst class\u201d data and where relational data is a special case whose records are regular, identically typed, and not nested.<\/span><a href=\"https:\/\/forward.ucsd.edu\/index.html\"><span style=\"font-weight: 400\">[7]<\/span><\/a><\/p>\n<h2><b>History<\/b><\/h2>\n<p>SQL++ was originally developed by Yannis Papakonstantinou and others at the University of California, San Diego<sup id=\"cite_ref-8\"><a href=\"https:\/\/arxiv.org\/abs\/1405.3631\">[8]<\/a><\/sup>.\u00a0 SQL++ was also used in the NSF funded FORWARD project<sup id=\"cite_ref-9\"><a href=\"https:\/\/www.nsf.gov\/awardsearch\/showAward?AWD_ID=1447943&amp;HistoricalAwards=false\">[9]<\/a><\/sup>\u00a0at the UCSD.<\/p>\n<h2><b>Applications<\/b><\/h2>\n<p><span style=\"font-weight: 400\">One of the early adopters of SQL++ was <a href=\"https:\/\/asterixdb.apache.org\/\">Apache AsterixDB<\/a><\/span><span style=\"font-weight: 400\">, an open source Big Data Management System, originally co-developed by a team of faculty, staff, and students at UC Irvine and UC Riverside in 2009. Another early SQL++ adopter is Couchbase, Inc., a scalable JSON database vendor whose 6.0 release has adopted SQL++ for its Couchbase Analytics\u00a0<\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Draft:SQL++#cite_note-8\"><span style=\"font-weight: 400\">[8]<\/span><\/a><span style=\"font-weight: 400\"> offering.<\/span><\/p>\n<h2><strong>Books<\/strong><\/h2>\n<p><a href=\"https:\/\/en.wikipedia.org\/w\/index.php?title=Donald_D._Chamberlin\"><span style=\"font-weight: 400\">Donald D Chamberlin<\/span><\/a><span style=\"font-weight: 400\">, one of the principal designers of the original SQL language specification,<\/span><span style=\"font-weight: 400\">\u00a0authored a tutorial for the SQL++ language<\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Draft:SQL%2B%2B#cite_note-11\"><span style=\"font-weight: 400\">[11]<\/span><\/a><span style=\"font-weight: 400\"> that includes practical examples to show how the language works with Couchbase Analytics.<\/span><\/p>\n<h2><b>Examples<\/b><\/h2>\n<h3><span style=\"font-weight: 400\">SELECT &amp; SELECT VALUE<\/span><\/h3>\n<p><span style=\"font-weight: 400\">One of the key differences between SQL and SQL++ is in the format of the result. Standard SQL, designed for row and table, returns the result set in a table format. SQL++, on the other hand, returns the result set in JSON format.<\/span><\/p>\n<p><span style=\"font-weight: 400\">(Q1) List the customer id, name, zipcode, and credit rating of all customers, in order by customer id.<\/span><\/p>\n<pre class=\"width:200 lang:default decode:true\">SELECT custid, name, address.zipcode, rating \r\nFROM customers ORDER BY custid LIMIT 2; \r\n\r\nResult: \r\n[ \r\n  { \t\"custid\"\t: \"C13\", \r\n\t\"Name\"\t\t: \"T. Cruise\", \r\n\t\"Zipcode\"\t: \"63101\",\r\n\t\"Rating\"\t: 750 \r\n  }, \r\n  {     \"custid\"\t: \"C25\", \r\n\t\"Name\"\t\t: \"M. Streep\", \r\n\t\"Zipcode\"\t: \"02340\",\r\n\t\"Rating\"\t: 690 \r\n  }\r\n]\r\n\r\n\r\n<\/pre>\n<p><span style=\"font-weight: 400\">(Q2) Find the names of customers with a rating greater than 650. <\/span><\/p>\n<pre class=\"lang:default decode:true\">SELECT name FROM customers WHERE rating &gt; 650;\r\n\r\nResult:\r\n[   \r\n  { \"name\": \"T. Cruise\" },\r\n  { \"name\": \"M. Streep\" },\r\n  { \"name\": \"T. Hanks\"  } \r\n]<\/pre>\n<p>(Q3) Shows the effects of SELECT VALUE (compare to Q2).<\/p>\n<pre class=\"lang:default decode:true\">SELECT VALUE name FROM customers Queries WHERE rating &gt; 650;\r\n\r\nResult:\r\n[ \"T. Cruise\", \"M. Streep\", \"T. Hanks\" ]<\/pre>\n<p>A SELECT VALUE query can be used with an object constructor to create labels or to give some structure to a query result, as in the following example.<\/p>\n<p>(Q4) List customers with credit rating greater than 650, in order by descending credit rating, and again in ascending order by zipcode.<\/p>\n<pre class=\"lang:default decode:true \">SELECT VALUE \r\n{ \"high-rated customers, ordered by rating\": \r\n  (SELECT c.rating, c.custid, c.name \r\n      FROM customers AS c WHERE c.rating &gt; 650 \r\n      ORDER BY c.rating DESC), \r\n  \"high-rated customers, ordered by zipcode\": \r\n  (SELECT c.address.zipcode, c.custid, c.name \r\n      FROM customers AS c WHERE c.rating &gt; 650 \r\n      ORDER BY c.address.zipcode) \r\n};\r\nResult:\r\n[ \r\n   { \"high-rated customers, ordered by rating\": \r\n    [ { \"rating\": 750, \"custid\": \"C13\", \"name\": \"T. Cruise\" }, \r\n      { \"rating\": 750, \"custid\": \"C37\", \"name\": \"T. Hanks\" }, \r\n      { \"rating\": 690, \"custid\": \"C25\", \"name\": \"M. Streep\" } \r\n    ], \r\n    \"high-rated customers, ordered by zipcode\": \r\n    [ { \"zipcode\": \"02115\", \"custid\": \"C37\", \"name\": \"T. Hanks\" }, \r\n      { \"zipcode\": \"02340\", \"custid\": \"C25\", \"name\": \"M. Streep\" }, \r\n      { \"zipcode\": \"63101\", \"custid\": \"C13\", \"name\": \"T. Cruise\" } \r\n    ] \r\n   } \r\n]<\/pre>\n<h4><span id=\"GROUPING,_AGGREGATION_and_UNNEST\">GROUPING, AGGREGATION and UNNEST<\/span><\/h4>\n<p>SQL++ supports the same SQL concept of grouping and aggregation. The UNNEST takes the contents of nested arrays, i.e. orders and join them with their parent object, i.e. customers.<\/p>\n<p>(Q6) List the first order by order number and item number, together with total quantity for all the orders made on 2017-05-01.<\/p>\n<pre class=\"lang:default decode:true \">SELECT   o.orderno, \r\n         i.itemno AS item_number,\r\n         sum(i.qty) AS quantity\r\nFROM orders AS o \r\n  UNNEST o.items AS i\r\nWHERE o.order_date = \"2017-05-01\"\r\n  GROUP BY o.orderno, i.itemno \r\n  ORDER BY o.orderno, item_number\r\nLIMIT 1;\r\nResult:\r\n[\r\n  {\r\n    \"orderno\": 1002,\r\n    \"item_number\": 460,\r\n    \"quantity\": 95\r\n  }\r\n]\r\n<\/pre>\n<h4><span id=\"GROUP_AS\">GROUP AS<\/span><\/h4>\n<p>A query can generate output data at summary level. The level definition is provided in the GROUP BY clause. The Q6 query generates a summary of orders at the order number and order item number level. Often you will want to generate output that includes both summary data and line items within the summaries. For this purpose, SQL++ supports several important extensions to the traditional grouping features of SQL. The familiar GROUP BY and HAVING clauses are still there, and they are joined by a new clause called GROUP AS.<\/p>\n<p>(Q7) List all orders by order number and item number, together with total quantity for all the orders made on 2017-05-01, also include all the orders and order items that made for each summary line. (Compare to Q6)<\/p>\n<pre class=\"lang:default decode:true\">SELECT   o.orderno, \r\n         i.itemno AS item_number,\r\n         sum(i.qty) AS quantity,\r\n         od\r\nFROM orders AS o \r\n  UNNEST o.items AS i\r\nWHERE o.order_date = \"2017-05-01\"\r\n  GROUP BY o.orderno, i.itemno \r\n  GROUP AS od\r\nLIMIT 1;\r\n\r\nResult:\r\n[\r\n  {\r\n    \"od\": [\r\n      {\r\n        \"o\": {\r\n          \"custid\": \"C13\",\r\n          \"items\": [\r\n            {\r\n              \"itemno\": 460,\r\n              \"price\": 100.99,\r\n              \"qty\": 95\r\n            },\r\n            {\r\n              \"itemno\": 680,\r\n              \"price\": 8.75,\r\n              \"qty\": 150\r\n            }\r\n          ],\r\n          \"order_date\": \"2017-05-01\",\r\n          \"orderno\": 1002,\r\n          \"ship_date\": \"2017-05-03\"\r\n        },\r\n        \"i\": {\r\n          \"itemno\": 460,\r\n          \"price\": 100.99,\r\n          \"qty\": 95\r\n        }\r\n      }\r\n    ],\r\n    \"orderno\": 1002,\r\n    \"item_number\": 460,\r\n    \"quantity\": 95\r\n  }\r\n]<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Summary With the proliferation of JSON databases in recent years, a new query language SQL++ has begun to emerge that could standardize on how to access these data sources.\u00a0 In fact the language has been around for a number of [&hellip;]<\/p>\n","protected":false},"author":26326,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[8919],"class_list":["post-11258","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>A SQL++ Implementation - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A SQL++ Implementation\" \/>\n<meta property=\"og:description\" content=\"Summary With the proliferation of JSON databases in recent years, a new query language SQL++ has begun to emerge that could standardize on how to access these data sources.\u00a0 In fact the language has been around for a number of [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-25T08:00:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-15T16:29:27+00:00\" \/>\n<meta name=\"author\" content=\"Binh Le\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Binh Le\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/\"},\"author\":{\"name\":\"Binh Le\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63\"},\"headline\":\"A SQL++ Implementation\",\"datePublished\":\"2018-11-25T08:00:18+00:00\",\"dateModified\":\"2023-09-15T16:29:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/\"},\"wordCount\":819,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/\",\"name\":\"A SQL++ Implementation - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2018-11-25T08:00:18+00:00\",\"dateModified\":\"2023-09-15T16:29:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A SQL++ Implementation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63\",\"name\":\"Binh Le\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"caption\":\"Binh Le\"},\"description\":\"Binh Le is a Principal Product Manager for Couchbase Query service. Prior to Couchbase, he worked at Oracle and led the product management team for Sales Cloud Analytics and CRM OnDemand. Binh holds a Bachelor's Degree in Computer Science from the University of Brighton, UK.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/binh-le-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"A SQL++ Implementation - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/","og_locale":"en_US","og_type":"article","og_title":"A SQL++ Implementation","og_description":"Summary With the proliferation of JSON databases in recent years, a new query language SQL++ has begun to emerge that could standardize on how to access these data sources.\u00a0 In fact the language has been around for a number of [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-11-25T08:00:18+00:00","article_modified_time":"2023-09-15T16:29:27+00:00","author":"Binh Le","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Binh Le","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/"},"author":{"name":"Binh Le","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63"},"headline":"A SQL++ Implementation","datePublished":"2018-11-25T08:00:18+00:00","dateModified":"2023-09-15T16:29:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/"},"wordCount":819,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/","url":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/","name":"A SQL++ Implementation - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2018-11-25T08:00:18+00:00","dateModified":"2023-09-15T16:29:27+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"A SQL++ Implementation"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63","name":"Binh Le","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7","url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","caption":"Binh Le"},"description":"Binh Le is a Principal Product Manager for Couchbase Query service. Prior to Couchbase, he worked at Oracle and led the product management team for Sales Cloud Analytics and CRM OnDemand. Binh holds a Bachelor's Degree in Computer Science from the University of Brighton, UK.","url":"https:\/\/www.couchbase.com\/blog\/author\/binh-le-2\/"}]}},"authors":[{"term_id":8919,"user_id":26326,"is_guest":0,"slug":"binh-le-2","display_name":"Binh Le","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","author_category":"","last_name":"Le","first_name":"Binh","job_title":"","user_url":"","description":"Binh Le is a Principal Product Manager for Couchbase Query service. Prior to Couchbase, he worked at Oracle and led the product management team for Sales Clould Analytics and CRM OnDemand. Binh holds a Bachelor's Degree in Computer Science from the University of Brighton, UK."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/11258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/26326"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=11258"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/11258\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=11258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=11258"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=11258"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=11258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}