{"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\/pt\/a-sql-implementation\/","title":{"rendered":"Uma implementa\u00e7\u00e3o do SQL++"},"content":{"rendered":"<h2><strong>Resumo<\/strong><\/h2>\n<p>Com a prolifera\u00e7\u00e3o de bancos de dados JSON nos \u00faltimos anos, uma nova linguagem de consulta <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/sqlplusplus\/\">SQL++<\/a> come\u00e7ou a surgir para padronizar a forma de acessar essas fontes de dados.  Na verdade, a linguagem j\u00e1 existe h\u00e1 alguns anos, mas tem existido principalmente no \u00e2mbito acad\u00eamico. O Couchbase N1QL, uma linguagem SQL para dados JSON, foi lan\u00e7ado em 2015. A empresa continuou a desenvolver sua linguagem N1QL\/SQL++ e, em outubro de 2018, lan\u00e7ou\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/announcing-couchbase-6-0\/\">anunciado<\/a>\u00a0o lan\u00e7amento do Couchbase Analytics.\u00a0\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Donald_D._Chamberlin\">Don Chamberlin<\/a>co-inventor do SQL original, tamb\u00e9m \u00e9 autor de um\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\">Livro tutorial de SQL++<\/a>\u00a0com exemplos pr\u00e1ticos que funcionam com o Couchbase Analytics.<\/p>\n<h2><b>Vis\u00e3o geral<\/b><\/h2>\n<p><span style=\"font-weight: 400\">O SQL++ \u00e9 uma linguagem de consulta de banco de dados projetada para trabalhar com dados estruturados e semiestruturados. A linguagem \u00e9 baseada no SQL original com extens\u00f5es para trabalhar com banco de dados de documentos JSON. Em bancos de dados relacionais, os dados s\u00e3o representados em forma de tabela. Cada uma das linhas de uma tabela tem a mesma estrutura de registro simples, com nomes e tipos de campo id\u00eanticos (de acordo com o esquema da tabela). Os bancos de dados semiestruturados relaxam essas restri\u00e7\u00f5es, permitindo que os registros sejam aninhados, tenham nomes e tipos de campos diferentes e n\u00e3o exijam um esquema. Dessa forma, o SQL++ \"estende\" o SQL, o padr\u00e3o de linguagem de consulta usado no mundo relacional, relaxando suas restri\u00e7\u00f5es no modelo de dados. Ao fazer isso, o SQL++ mant\u00e9m os benef\u00edcios do SQL, incluindo sua natureza declarativa de alto n\u00edvel, ao mesmo tempo em que permite lidar com as estruturas mais flex\u00edveis comumente encontradas no mundo semiestruturado. Fornecedores de bancos de dados relacionais como IBM, Microsoft e Oracle, bem como sistemas de c\u00f3digo aberto como PostgreSQL e MySQL, estenderam suas pr\u00f3prias vers\u00f5es do SQL para trabalhar com dados JSON. Eles adicionam extens\u00f5es (geralmente espec\u00edficas do sistema) para JSON como um tipo de coluna, bem como novas fun\u00e7\u00f5es e, em alguns casos, nova sintaxe, para permitir a manipula\u00e7\u00e3o de documentos JSON<\/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\"> O pr\u00f3prio padr\u00e3o ANSI\/ISO SQL foi ampliado de forma semelhante em 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\">Por outro lado, conforme explicado acima, o SQL++ foi desenvolvido relaxando o modelo de dados de destino do SQL para chegar a uma linguagem de consulta em que os dados JSON s\u00e3o tratados como dados de \"primeira classe\" e em que os dados relacionais s\u00e3o um caso especial cujos registros s\u00e3o regulares, de tipo id\u00eantico e n\u00e3o aninhados.<\/span><a href=\"https:\/\/forward.ucsd.edu\/index.html\"><span style=\"font-weight: 400\">[7]<\/span><\/a><\/p>\n<h2><b>Hist\u00f3rico<\/b><\/h2>\n<p>O SQL++ foi originalmente desenvolvido por Yannis Papakonstantinou e outros na Universidade da Calif\u00f3rnia, em San Diego<sup id=\"cite_ref-8\"><a href=\"https:\/\/arxiv.org\/abs\/1405.3631\">[8]<\/a><\/sup>.  O SQL++ tamb\u00e9m foi usado no projeto FORWARD, financiado pela NSF<sup id=\"cite_ref-9\"><a href=\"https:\/\/www.nsf.gov\/awardsearch\/showAward?AWD_ID=1447943&amp;HistoricalAwards=false\">[9]<\/a><\/sup>\u00a0na UCSD.<\/p>\n<h2><b>Aplicativos<\/b><\/h2>\n<p><span style=\"font-weight: 400\">Um dos primeiros a adotar o SQL++ foi <a href=\"https:\/\/asterixdb.apache.org\/\">Apache AsterixDB<\/a><\/span><span style=\"font-weight: 400\">um sistema de gerenciamento de Big Data de c\u00f3digo aberto, originalmente co-desenvolvido por uma equipe de professores, funcion\u00e1rios e alunos da UC Irvine e UC Riverside em 2009. Outro dos primeiros a adotar o SQL++ \u00e9 a Couchbase, Inc., um fornecedor de banco de dados JSON dimension\u00e1vel cuja vers\u00e3o 6.0 adotou o SQL++ para o 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\"> oferta.<\/span><\/p>\n<h2><strong>Livros<\/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\">um dos principais projetistas da especifica\u00e7\u00e3o original da linguagem SQL,<\/span><span style=\"font-weight: 400\">\u00a0criou um tutorial para a linguagem SQL++<\/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\"> que inclui exemplos pr\u00e1ticos para mostrar como a linguagem funciona com o Couchbase Analytics.<\/span><\/p>\n<h2><b>Exemplos<\/b><\/h2>\n<h3><span style=\"font-weight: 400\">SELECIONAR E SELECIONAR VALOR<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Uma das principais diferen\u00e7as entre o SQL e o SQL++ est\u00e1 no formato do resultado. O SQL padr\u00e3o, projetado para linha e tabela, retorna o conjunto de resultados em um formato de tabela. O SQL++, por outro lado, retorna o conjunto de resultados no formato JSON.<\/span><\/p>\n<p><span style=\"font-weight: 400\">(Q1) Liste a identifica\u00e7\u00e3o do cliente, o nome, o CEP e a classifica\u00e7\u00e3o de cr\u00e9dito de todos os clientes, em ordem por identifica\u00e7\u00e3o do cliente.<\/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\nResultado:\r\n[\r\n  { \"custid\" : \"C13\",\r\n\t\"Nome\" : \"T. Cruise\",\r\n\t\"Zipcode\" (CEP) : \"63101\",\r\n\t\"Classifica\u00e7\u00e3o\" : 750\r\n  },\r\n  { \"custid\" : \"C25\",\r\n\t\"Nome\" : \"M. Streep\",\r\n\t\"Zipcode\" (CEP) : \"02340\",\r\n\t\"Rating\" : 690\r\n  }\r\n]\r\n\r\n\r\n<\/pre>\n<p><span style=\"font-weight: 400\">(Q2) Encontre os nomes dos clientes com uma classifica\u00e7\u00e3o maior que 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) Mostra os efeitos de SELECT VALUE (compare com 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>Uma consulta SELECT VALUE pode ser usada com um construtor de objetos para criar r\u00f3tulos ou para dar alguma estrutura a um resultado de consulta, como no exemplo a seguir.<\/p>\n<p>(Q4) Liste os clientes com classifica\u00e7\u00e3o de cr\u00e9dito superior a 650, em ordem decrescente de classifica\u00e7\u00e3o de cr\u00e9dito, e novamente em ordem crescente por CEP.<\/p>\n<pre class=\"lang:default decode:true\">SELECT VALUE\r\n{ \"clientes de alta classifica\u00e7\u00e3o, ordenados por classifica\u00e7\u00e3o\":\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\" (clientes de alta classifica\u00e7\u00e3o, ordenados por CEP):\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\nResultado:\r\n[\r\n   { \"clientes de alta classifica\u00e7\u00e3o, ordenados por classifica\u00e7\u00e3o\":\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    \"clientes com classifica\u00e7\u00e3o alta, ordenados por CEP\":\r\n    [ { \"zipcode\": \"02115\", \"custid\": \"C37\", \"name\": \"T. Hanks\" },\r\n      { \"zipcode\" (c\u00f3digo postal): \"02340\", \"custid\": \"C25\", \"name\": \"M. Streep\" },\r\n      { \"zipcode\" (c\u00f3digo postal): \"63101\", \"custid\": \"C13\", \"name\": \"T. Cruise\" }\r\n    ]\r\n   }\r\n]<\/pre>\n<h4><span id=\"GROUPING,_AGGREGATION_and_UNNEST\">GROUPING, AGGREGATION e UNNEST<\/span><\/h4>\n<p>O SQL++ suporta o mesmo conceito SQL de agrupamento e agrega\u00e7\u00e3o. O UNNEST pega o conte\u00fado de arrays aninhados, ou seja, pedidos, e os une ao seu objeto pai, ou seja, clientes.<\/p>\n<p>(Q6) Liste o primeiro pedido por n\u00famero de pedido e n\u00famero de item, juntamente com a quantidade total de todos os pedidos feitos em 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 pedidos 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\" (quantidade): 95\r\n  }\r\n]\r\n<\/pre>\n<h4><span id=\"GROUP_AS\">GRUPO COMO<\/span><\/h4>\n<p>Uma consulta pode gerar dados de sa\u00edda em n\u00edvel de resumo. A defini\u00e7\u00e3o do n\u00edvel \u00e9 fornecida na cl\u00e1usula GROUP BY. A consulta Q6 gera um resumo de pedidos no n\u00edvel do n\u00famero do pedido e do n\u00famero do item do pedido. Muitas vezes, voc\u00ea desejar\u00e1 gerar uma sa\u00edda que inclua dados de resumo e itens de linha nos resumos. Para essa finalidade, o SQL++ oferece suporte a v\u00e1rias extens\u00f5es importantes dos recursos de agrupamento tradicionais do SQL. As cl\u00e1usulas GROUP BY e HAVING, j\u00e1 conhecidas, ainda est\u00e3o presentes e s\u00e3o unidas por uma nova cl\u00e1usula chamada GROUP AS.<\/p>\n<p>(Q7) Liste todos os pedidos por n\u00famero de pedido e n\u00famero de item, juntamente com a quantidade total de todos os pedidos feitos em 01\/05\/2017, incluindo tamb\u00e9m todos os pedidos e itens de pedido feitos para cada linha de resumo. (Compare com a 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 pedidos 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\" (quantidade): 95\r\n  }\r\n]<\/pre>","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>","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.2 (Yoast SEO v26.2) - 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\/pt\/a-sql-implementation\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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 minutos\" \/>\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\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/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\/pt\/a-sql-implementation\/","og_locale":"pt_BR","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\/pt\/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 minutos"},"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","articleSection":["Uncategorized"],"inLanguage":"pt-BR","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":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/a-sql-implementation\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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":"pt-BR","@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 \u00e9 gerente de produto principal do servi\u00e7o Couchbase Query. Antes da Couchbase, ele trabalhou na Oracle e liderou a equipe de gerenciamento de produtos para Sales Cloud Analytics e CRM OnDemand. Binh \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o pela Universidade de Brighton, no Reino Unido.","url":"https:\/\/www.couchbase.com\/blog\/pt\/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 \u00e9 gerente de produto principal do servi\u00e7o de consulta do Couchbase. Antes da Couchbase, ele trabalhou na Oracle e liderou a equipe de gerenciamento de produtos para Sales Clould Analytics e CRM OnDemand. Binh \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o pela Universidade de Brighton, no Reino Unido."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/11258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/26326"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=11258"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/11258\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=11258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=11258"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=11258"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=11258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}