SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
SQL Proficiente
SQL Proficiente
Recursos de manipula¸c˜ao de dados
Leonardo Cezar
DATAPREV - PostgreSQL Brasil
31 de maio de 2010
Leonardo Cezar SQL Proficiente
SQL Proficiente
Introdu¸c˜ao
Conte´udo
1 Introdu¸c˜ao
Objetivo
2 Padr˜ao SQL
Defini¸c˜ao
Organiza¸c˜ao do SQL:2008
Conformidade
3 Recursos do PostgreSQL
Gerenciamento de Dados Externos
Common Table Expression (CTEs)
Window Functions
Full Text Search
Mais recursos
Leonardo Cezar SQL Proficiente
SQL Proficiente
Introdu¸c˜ao
Objetivo
Objetivo
• Conhecer alguns recursos da linguagem para manipula¸c˜ao de
dados e otimizar o acesso a esses dados atrav´es do padr˜ao
ISO/IEC 9075 e das extens˜oes do PostgreSQL
Leonardo Cezar SQL Proficiente
SQL Proficiente
Introdu¸c˜ao
Objetivo
Desafios
• Reduzir a carga de processamento na aplica¸c˜ao
• Diminuir o tr´afego de rede
• Migrar algoritmos complexos para o servidor de banco de
dados
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padr˜ao SQL
Conte´udo
1 Introdu¸c˜ao
Objetivo
2 Padr˜ao SQL
Defini¸c˜ao
Organiza¸c˜ao do SQL:2008
Conformidade
3 Recursos do PostgreSQL
Gerenciamento de Dados Externos
Common Table Expression (CTEs)
Window Functions
Full Text Search
Mais recursos
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padr˜ao SQL
Defini¸c˜ao
Estrutura
• Criado nos anos 80 pelo ISO/IEC
• Comitˆe gestor JTC-1 (information technology)
• Especifica uma base para os dialetos SQL
• Define features opcionais e obrigat´orios
• Define packages de funcionalidades
• Dividido em 9 subse¸c˜oes
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padr˜ao SQL
Organiza¸c˜ao do SQL:2008
Partes do ISO/IEC SQL:2008
• 9075-1: SQL/Framework (n´ucleo)
• Implementa o conceito sistem´atico da linguagem e
processadores de resultado
• 9075-2: SQL/Foundation (n´ucleo)
• Implementa a especifica¸c˜ao de manipuladores de dados
• 9075-3: SQL/CLI (externo - ODBC)
• Define camada de acesso externa (exceto java)
• 9075-4: SQL/PSM (externo - PL/pgPSM)
• Define a semˆantica de instru¸c˜oes de linguagens procedurais
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padr˜ao SQL
Organiza¸c˜ao do SQL:2008
Partes do ISO/IEC SQL:2008
• 9075-9: SQL/MED (n´ucleo)
• Define extens˜oes para suportar gerenciamento de fonte de
dados externa atrav´es de datalink
• 9075-11: SQL/Schemata (n´ucleo)
• Implementa a cria¸c˜ao e acesso aos dados
• 9075-13: SQL/JRT (externo - PL/Java)
• Fun¸c˜oes e tipos utilizando Java
• 9075-14: SQL/XML (n´ucleo)
• Suporte XML
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padr˜ao SQL
Organiza¸c˜ao do SQL:2008
E quanto as outras sequˆencias do ISO/IEC 9075?
• 9075-5: SQL/Bindings (n´ucleo)
• Migrado para 9075-2 em 2003
• 9075-6: SQL/Transaction (XA)
• Cancelado em 1999
• 9075-7: SQL/Temporal
• Cancelado
• 9075-10: SQL/OLB
• Especifica a s´ıntaxe para incorporar SQL na linguagem Java
atrav´es de amarra¸c˜oes.
• 9075-12: SQL/Replication (n´ucleo)
• Cancelado
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padr˜ao SQL
Conformidade
Crit´erios de conformidade
• Conformidade m´ınima (Core SQL)
• SQL/Foundations e SQL/Schemata
• Conformidade em partes
• Implementar todas as features de uma parte (ex.: ISO/IEC
9075-9 SQL/MED)
• Conformidade com features
• Implementar a funcionalidade e suas subfuncionalidades em
sua totalidade
• Conformidade com Packages
• Agrupamento de features opcionais
• Implementar todas as features da Package
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padr˜ao SQL
Conformidade
Consultando as features implementadas
A vis˜ao sql features
postgres=# d information_schema.sql_features
Table "information_schema.sql_features"
Column | Type | Modifiers
------------------+-----------------------------------+-----------
feature_id | information_schema.character_data |
feature_name | information_schema.character_data |
sub_feature_id | information_schema.character_data |
sub_feature_name | information_schema.character_data |
is_supported | information_schema.yes_or_no |
is_verified_by | information_schema.character_data |
comments | information_schema.character_data |
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padr˜ao SQL
Conformidade
Consultando as Packages implementadas
A vis˜ao sql packages
postgres=# d information_schema.sql_packages
Table "information_schema.sql_packages"
Column | Type | Modifiers
----------------+-----------------------------------+-----------
feature_id | information_schema.character_data |
feature_name | information_schema.character_data |
is_supported | information_schema.yes_or_no |
is_verified_by | information_schema.character_data |
comments | information_schema.character_data |
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Conte´udo
1 Introdu¸c˜ao
Objetivo
2 Padr˜ao SQL
Defini¸c˜ao
Organiza¸c˜ao do SQL:2008
Conformidade
3 Recursos do PostgreSQL
Gerenciamento de Dados Externos
Common Table Expression (CTEs)
Window Functions
Full Text Search
Mais recursos
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Gerenciamento de Dados Externos
Dados Externos
• ISO/IEC 9075-9:2003 SQL/MED
• M´etodos de acess a dados armazenados em fontes externas
• SGBDs
• MS SQLServer
• MySQL
• Oracle
• Arquivos
• XML
• YAML
• CSV
• Outras instˆancias PostgreSQL
• Unificar acesso externo (DBI, dblink, PLProxy)
• Maior controle na administra¸c˜ao de links externos
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Gerenciamento de Dados Externos
Dados Externos
MED
postgres=# CREATE FOREIGN DATA
WRAPPER pgday VALIDATOR postgresql_fdw_validator;
postgres=# CREATE SERVER srvpgday FOREIGN DATA WRAPPER pgday
OPTIONS (host ’srv-pgday’, dbname ’pgday’, port ’5432’);
postgres=# CREATE USER MAPPING FOR lhcezar SERVER srvpgday
OPTIONS (user ’lhcezar’, password ’lhcezar’);
postgres=$ SELECT dblink_connect(’pgday_c’, ’srvpgday’);
postgres=$ SELECT * from dblink(’pgday_c’, ’SELECT * FROM pgday’) AS
(id int, palestra varchar);
id | palestra
----+-----------------
1 | SQL Proficiente
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Common Table Expression (CTEs)
WITH RECURSIVE
• ISO/IEC 9075-2:2003
• Permite reaproveitar express˜oes pr´eviamente definidas em uma
mesma instru¸c˜ao
• Semelhante a utiliza¸c˜ao de uma vis˜ao
• Permite gerar chamadas recursivas
• Utilizado para percorrer uma lista finita de valores em uma
express˜ao
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Common Table Expression (CTEs)
WITH RECURSIVE - s´erie de Fibonacci
WITH RECURSIVE t ( x , y ) AS (
VALUES(0 ,1)
UNION ALL
SELECT GREATEST( x , y ) , x + y AS a FROM t
WHERE y < 5
)
SELECT a AS f i b o n a c c i FROM t ;
+-----------+
| fibonacci |
+-----------+
| 0 |
| 1 |
| 1 |
| 2 |
| 3 |
+-----------+
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Common Table Expression (CTEs)
WITH RECURSIVE - sequˆencias vazias
postgres=# SELECT id, descricao FROM produtos;
+----+-----------+
| id | descricao |
+----+-----------+
| 1 | Televis~ao |
| 3 | Blue Ray |
| 4 | DVD |
| 10 | Bicileta |
+----+-----------+
(4 rows)
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Common Table Expression (CTEs)
WITH RECURSIVE - sequˆencias vazias
WITH RECURSIVE cte ( n ) AS
(
SELECT p r o d u t o s p a i . i d + 1
FROM produtos p r o d u t o s p a i
WHERE NOT EXISTS
(SELECT NULL
FROM produtos p r o d u t o s f i l h o
WHERE p r o d u t o s f i l h o . i d = p r o d u t o s p a i . i d +1)
AND p r o d u t o s p a i . i d < (SELECT MAX( i d ) FROM produtos )
UNION ALL
SELECT cte . n +1
FROM cte
WHERE NOT EXISTS
(SELECT NULL
FROM produtos r
WHERE r . i d = cte . n + 1)
)
SELECT n AS v a z i a s FROM cte ;
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Common Table Expression (CTEs)
WITH RECURSIVE - sequˆencias vazias
postgres=# i ~/Apresenta¸c~oes/SQLProficiente/cte.sql
+--------+
| vazias |
+--------+
| 2 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+--------+
(6 rows)
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Window Functions
Window functions
• ISO/IEC 9075-2
• Efetivar c´alculos para determinado agrupamento de linhas
• N˜ao limita a sa´ıda das tuplas com opera¸c˜oes GROUP BY
• Utiliza a cl´ausula OVER e PARTITION BY (SQL ANSI)
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Window Functions
OVER — PARTITION BY
SELECT nspname AS esquema ,
relname AS tabela ,
r e l t u p l e s AS l i n h a s ,
−− windows frame c r i a d o para cada grupo de esquemas
SUM( r e l t u p l e s )
OVER (PARTITION BY nspname ) AS t o t a l l i n h a s
FROM p g c l a s s r
JOIN pg namespace n
ON r . relnamespace = n . oid
WHERE r e l k i n d = ’ r ’
AND nspname
NOT IN( ’ pg catalog ’ , ’ information schema ’ ) ;
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Window Functions
Total de registros por esquema
+---------+------------------+--------+--------------+
| esquema | tabela | linhas | total_linhas |
+---------+------------------+--------+--------------+
| ator | address | 603 | 2111 |
| ator | city | 600 | 2111 |
| ator | country | 109 | 2111 |
| ator | customer | 599 | 2111 |
| ator | actor | 200 | 2111 |
| filme | payment | 0 | 4587 |
| filme | inventory | 4581 | 4587 |
| filme | language | 6 | 4587 |
| public | rental | 16044 | 39575 |
| public | film_category | 1000 | 39575 |
| public | film | 1000 | 39575 |
| public | store | 2 | 39575 |Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Full Text Search
FTS
• Busca atrav´es de similaridade
• Classificar resultados pela relevˆancia
• Consulta baseada em dicion´arios
• Defini¸c˜ao de stop words
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Full Text Search
FTS - Exemplo de consulta
SELECT t i t l e , t s h e a d l i n e ( d e s c r i p t i o n ,
t o t s q u e r y ( ’ f a t e&i n d i a ’ ))
FROM f i l m
WHERE f u l l t e x t @@ t o t s q u e r y ( ’ f a t e&i n d i a ’ ) ;
+--------------------+---------------------------------------------------------
| title | ts_headline
+--------------------+---------------------------------------------------------
| ANTITRUST TOMATOES | <b>Fateful</b> Yarn of a Womanizer in Ancient <b>India</
| EASY GLADIATOR | <b>Fateful</b> Story of a Monkey Ancient <b>India</b>
| SLEUTH ORIENT | <b>Fateful</b> Character Study of a <b>India</b>
+--------------------+---------------------------------------------------------
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Mais recursos
Outras ´areas a se explorar
• Particionamento
• XML
• Procedimentos Armazenados (CREATE FUNCTION)
• Fun¸c˜oes anˆonimas
• Dom´ınios (CREATE DOMAIN)
• Tipo (CREATE TYPE [...])
• Agrega¸c˜ao (CREATE AGGREGATE [...])
• Replica¸c˜ao (Streaming/Hot Standby)
• Contrib
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Mais recursos
• D´uvidas?
• Sugest˜oes?
• Cr´ıticas?
Leonardo Cezar SQL Proficiente

Mais conteúdo relacionado

Mais procurados

[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto DesempenhoEiti Kimura
 
Manipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCManipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCAntonio Passos
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBCEduardo Mendes
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 
Sobre programas e funções: pensando em abstração
Sobre programas e funções: pensando em abstraçãoSobre programas e funções: pensando em abstração
Sobre programas e funções: pensando em abstraçãoArthur Xavier
 
Programação Estruturada 2 - Aula 03 - Código Fonte
Programação Estruturada 2 - Aula 03 - Código FonteProgramação Estruturada 2 - Aula 03 - Código Fonte
Programação Estruturada 2 - Aula 03 - Código Fontethomasdacosta
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 
MySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoMySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoGabriela Ferrara
 
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)Fabrício Catae
 
Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Androidjoaobmonteiro
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em JavaDevmedia
 
Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1Arley Rodrigues
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL BásicoIgor Alves
 
JavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com BolachaJavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com BolachaRafael Afonso
 

Mais procurados (20)

[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
 
Manipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCManipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBC
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBC
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Sobre programas e funções: pensando em abstração
Sobre programas e funções: pensando em abstraçãoSobre programas e funções: pensando em abstração
Sobre programas e funções: pensando em abstração
 
Programação Estruturada 2 - Aula 03 - Código Fonte
Programação Estruturada 2 - Aula 03 - Código FonteProgramação Estruturada 2 - Aula 03 - Código Fonte
Programação Estruturada 2 - Aula 03 - Código Fonte
 
Views Oracle Database
Views Oracle DatabaseViews Oracle Database
Views Oracle Database
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
MySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoMySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo Proveito
 
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
 
Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Android
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em Java
 
Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1
 
PHP e Mysql - DELETE
PHP e Mysql - DELETEPHP e Mysql - DELETE
PHP e Mysql - DELETE
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
 
JavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com BolachaJavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com Bolacha
 
PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
 
MySQL - O Comando SELECT
MySQL - O Comando SELECTMySQL - O Comando SELECT
MySQL - O Comando SELECT
 

Destaque

Imperial College - Early Stage Investment
Imperial College - Early Stage InvestmentImperial College - Early Stage Investment
Imperial College - Early Stage InvestmentMatthew Stafford
 
MiniBar Camp - Matthew Stafford
MiniBar Camp - Matthew StaffordMiniBar Camp - Matthew Stafford
MiniBar Camp - Matthew StaffordMatthew Stafford
 
Vyöhyke esittely vol2
Vyöhyke esittely vol2Vyöhyke esittely vol2
Vyöhyke esittely vol2Laukkanen1977
 
Fish on Toast @ Southamton University
Fish on Toast @ Southamton UniversityFish on Toast @ Southamton University
Fish on Toast @ Southamton UniversityMatthew Stafford
 
Power point passing
Power point passingPower point passing
Power point passingbokong
 

Destaque (8)

Imperial College - Early Stage Investment
Imperial College - Early Stage InvestmentImperial College - Early Stage Investment
Imperial College - Early Stage Investment
 
MiniBar Camp - Matthew Stafford
MiniBar Camp - Matthew StaffordMiniBar Camp - Matthew Stafford
MiniBar Camp - Matthew Stafford
 
Vyöhyke esittely vol2
Vyöhyke esittely vol2Vyöhyke esittely vol2
Vyöhyke esittely vol2
 
20141120 durham uni
20141120 durham uni20141120 durham uni
20141120 durham uni
 
Fish on Toast @ Southamton University
Fish on Toast @ Southamton UniversityFish on Toast @ Southamton University
Fish on Toast @ Southamton University
 
Power point passing
Power point passingPower point passing
Power point passing
 
Verb
VerbVerb
Verb
 
Verb
VerbVerb
Verb
 

Semelhante a Sql proficiente

Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLRaul Oliveira
 
Funcionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLFuncionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLMatheus Espanhol
 
Oracle Database 12c - Novas Características para DBAs e Desenvolvedores
Oracle Database 12c - Novas Características para DBAs e DesenvolvedoresOracle Database 12c - Novas Características para DBAs e Desenvolvedores
Oracle Database 12c - Novas Características para DBAs e DesenvolvedoresAlex Zaballa
 
Mapeamento brb 2013 em videoaulas do provas de ti google drive
Mapeamento brb 2013 em videoaulas do provas de ti   google driveMapeamento brb 2013 em videoaulas do provas de ti   google drive
Mapeamento brb 2013 em videoaulas do provas de ti google driveffabii
 
Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014MySQL Brasil
 
Google AppEngine: Desafios da adoção de cloud no mercado de seguros
Google AppEngine: Desafios da adoção de cloud no mercado de segurosGoogle AppEngine: Desafios da adoção de cloud no mercado de seguros
Google AppEngine: Desafios da adoção de cloud no mercado de segurosGustavo Concon
 
Postgresql como NewSQL - DevCamp 2014
Postgresql como NewSQL - DevCamp 2014Postgresql como NewSQL - DevCamp 2014
Postgresql como NewSQL - DevCamp 2014Matheus de Oliveira
 
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...Alex Zaballa
 
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...Alex Zaballa
 
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...tdc-globalcode
 
Plsql - Conceitos Básicos
Plsql - Conceitos BásicosPlsql - Conceitos Básicos
Plsql - Conceitos BásicosDanilo Braga
 
PL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosPL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosDanilo Braga
 
Isolamento e mvcc
Isolamento e mvccIsolamento e mvcc
Isolamento e mvccLocaweb
 
SQLCLR: Transformando o SQL Server em algo muito além de um banco de dados
SQLCLR: Transformando o SQL Server em algo muito além de um banco de dadosSQLCLR: Transformando o SQL Server em algo muito além de um banco de dados
SQLCLR: Transformando o SQL Server em algo muito além de um banco de dadosDirceu Resende
 
O Futuro do Data Dude (VS DBPro)
O Futuro do Data Dude (VS DBPro)O Futuro do Data Dude (VS DBPro)
O Futuro do Data Dude (VS DBPro)Igor Abade
 
Oracle e SQL Server na prática mitos, semelhanças e diferenças
Oracle e SQL Server na prática mitos, semelhanças e diferençasOracle e SQL Server na prática mitos, semelhanças e diferenças
Oracle e SQL Server na prática mitos, semelhanças e diferençasLeonardo Pedroso Costa
 
Desenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a DadosDesenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a DadosVitor Silva
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 

Semelhante a Sql proficiente (20)

Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQL
 
Funcionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLFuncionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQL
 
Oracle Database 12c - Novas Características para DBAs e Desenvolvedores
Oracle Database 12c - Novas Características para DBAs e DesenvolvedoresOracle Database 12c - Novas Características para DBAs e Desenvolvedores
Oracle Database 12c - Novas Características para DBAs e Desenvolvedores
 
Mapeamento brb 2013 em videoaulas do provas de ti google drive
Mapeamento brb 2013 em videoaulas do provas de ti   google driveMapeamento brb 2013 em videoaulas do provas de ti   google drive
Mapeamento brb 2013 em videoaulas do provas de ti google drive
 
Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014
 
Google AppEngine: Desafios da adoção de cloud no mercado de seguros
Google AppEngine: Desafios da adoção de cloud no mercado de segurosGoogle AppEngine: Desafios da adoção de cloud no mercado de seguros
Google AppEngine: Desafios da adoção de cloud no mercado de seguros
 
Postgresql como NewSQL - DevCamp 2014
Postgresql como NewSQL - DevCamp 2014Postgresql como NewSQL - DevCamp 2014
Postgresql como NewSQL - DevCamp 2014
 
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
 
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
 
Introdução ao BD Postgre
Introdução ao BD PostgreIntrodução ao BD Postgre
Introdução ao BD Postgre
 
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
 
Plsql - Conceitos Básicos
Plsql - Conceitos BásicosPlsql - Conceitos Básicos
Plsql - Conceitos Básicos
 
PL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosPL/SQL - Conceitos Básicos
PL/SQL - Conceitos Básicos
 
Isolamento e mvcc
Isolamento e mvccIsolamento e mvcc
Isolamento e mvcc
 
Pentaho PDI
Pentaho PDIPentaho PDI
Pentaho PDI
 
SQLCLR: Transformando o SQL Server em algo muito além de um banco de dados
SQLCLR: Transformando o SQL Server em algo muito além de um banco de dadosSQLCLR: Transformando o SQL Server em algo muito além de um banco de dados
SQLCLR: Transformando o SQL Server em algo muito além de um banco de dados
 
O Futuro do Data Dude (VS DBPro)
O Futuro do Data Dude (VS DBPro)O Futuro do Data Dude (VS DBPro)
O Futuro do Data Dude (VS DBPro)
 
Oracle e SQL Server na prática mitos, semelhanças e diferenças
Oracle e SQL Server na prática mitos, semelhanças e diferençasOracle e SQL Server na prática mitos, semelhanças e diferenças
Oracle e SQL Server na prática mitos, semelhanças e diferenças
 
Desenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a DadosDesenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a Dados
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 

Mais de Leonardo Cezar

Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLLeonardo Cezar
 
Versionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQLVersionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQLLeonardo Cezar
 
Funções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQLFunções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQLLeonardo Cezar
 
Situação da migração para PostgreSQL
Situação da migração para PostgreSQLSituação da migração para PostgreSQL
Situação da migração para PostgreSQLLeonardo Cezar
 
Interoperabilidade dados abertos
Interoperabilidade dados abertosInteroperabilidade dados abertos
Interoperabilidade dados abertosLeonardo Cezar
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 

Mais de Leonardo Cezar (8)

Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQL
 
Versionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQLVersionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQL
 
Funções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQLFunções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQL
 
Situação da migração para PostgreSQL
Situação da migração para PostgreSQLSituação da migração para PostgreSQL
Situação da migração para PostgreSQL
 
Interoperabilidade dados abertos
Interoperabilidade dados abertosInteroperabilidade dados abertos
Interoperabilidade dados abertos
 
Migracao colaborativa
Migracao colaborativaMigracao colaborativa
Migracao colaborativa
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 

Sql proficiente

  • 1. SQL Proficiente SQL Proficiente Recursos de manipula¸c˜ao de dados Leonardo Cezar DATAPREV - PostgreSQL Brasil 31 de maio de 2010 Leonardo Cezar SQL Proficiente
  • 2. SQL Proficiente Introdu¸c˜ao Conte´udo 1 Introdu¸c˜ao Objetivo 2 Padr˜ao SQL Defini¸c˜ao Organiza¸c˜ao do SQL:2008 Conformidade 3 Recursos do PostgreSQL Gerenciamento de Dados Externos Common Table Expression (CTEs) Window Functions Full Text Search Mais recursos Leonardo Cezar SQL Proficiente
  • 3. SQL Proficiente Introdu¸c˜ao Objetivo Objetivo • Conhecer alguns recursos da linguagem para manipula¸c˜ao de dados e otimizar o acesso a esses dados atrav´es do padr˜ao ISO/IEC 9075 e das extens˜oes do PostgreSQL Leonardo Cezar SQL Proficiente
  • 4. SQL Proficiente Introdu¸c˜ao Objetivo Desafios • Reduzir a carga de processamento na aplica¸c˜ao • Diminuir o tr´afego de rede • Migrar algoritmos complexos para o servidor de banco de dados Leonardo Cezar SQL Proficiente
  • 5. SQL Proficiente Padr˜ao SQL Conte´udo 1 Introdu¸c˜ao Objetivo 2 Padr˜ao SQL Defini¸c˜ao Organiza¸c˜ao do SQL:2008 Conformidade 3 Recursos do PostgreSQL Gerenciamento de Dados Externos Common Table Expression (CTEs) Window Functions Full Text Search Mais recursos Leonardo Cezar SQL Proficiente
  • 6. SQL Proficiente Padr˜ao SQL Defini¸c˜ao Estrutura • Criado nos anos 80 pelo ISO/IEC • Comitˆe gestor JTC-1 (information technology) • Especifica uma base para os dialetos SQL • Define features opcionais e obrigat´orios • Define packages de funcionalidades • Dividido em 9 subse¸c˜oes Leonardo Cezar SQL Proficiente
  • 7. SQL Proficiente Padr˜ao SQL Organiza¸c˜ao do SQL:2008 Partes do ISO/IEC SQL:2008 • 9075-1: SQL/Framework (n´ucleo) • Implementa o conceito sistem´atico da linguagem e processadores de resultado • 9075-2: SQL/Foundation (n´ucleo) • Implementa a especifica¸c˜ao de manipuladores de dados • 9075-3: SQL/CLI (externo - ODBC) • Define camada de acesso externa (exceto java) • 9075-4: SQL/PSM (externo - PL/pgPSM) • Define a semˆantica de instru¸c˜oes de linguagens procedurais Leonardo Cezar SQL Proficiente
  • 8. SQL Proficiente Padr˜ao SQL Organiza¸c˜ao do SQL:2008 Partes do ISO/IEC SQL:2008 • 9075-9: SQL/MED (n´ucleo) • Define extens˜oes para suportar gerenciamento de fonte de dados externa atrav´es de datalink • 9075-11: SQL/Schemata (n´ucleo) • Implementa a cria¸c˜ao e acesso aos dados • 9075-13: SQL/JRT (externo - PL/Java) • Fun¸c˜oes e tipos utilizando Java • 9075-14: SQL/XML (n´ucleo) • Suporte XML Leonardo Cezar SQL Proficiente
  • 9. SQL Proficiente Padr˜ao SQL Organiza¸c˜ao do SQL:2008 E quanto as outras sequˆencias do ISO/IEC 9075? • 9075-5: SQL/Bindings (n´ucleo) • Migrado para 9075-2 em 2003 • 9075-6: SQL/Transaction (XA) • Cancelado em 1999 • 9075-7: SQL/Temporal • Cancelado • 9075-10: SQL/OLB • Especifica a s´ıntaxe para incorporar SQL na linguagem Java atrav´es de amarra¸c˜oes. • 9075-12: SQL/Replication (n´ucleo) • Cancelado Leonardo Cezar SQL Proficiente
  • 10. SQL Proficiente Padr˜ao SQL Conformidade Crit´erios de conformidade • Conformidade m´ınima (Core SQL) • SQL/Foundations e SQL/Schemata • Conformidade em partes • Implementar todas as features de uma parte (ex.: ISO/IEC 9075-9 SQL/MED) • Conformidade com features • Implementar a funcionalidade e suas subfuncionalidades em sua totalidade • Conformidade com Packages • Agrupamento de features opcionais • Implementar todas as features da Package Leonardo Cezar SQL Proficiente
  • 11. SQL Proficiente Padr˜ao SQL Conformidade Consultando as features implementadas A vis˜ao sql features postgres=# d information_schema.sql_features Table "information_schema.sql_features" Column | Type | Modifiers ------------------+-----------------------------------+----------- feature_id | information_schema.character_data | feature_name | information_schema.character_data | sub_feature_id | information_schema.character_data | sub_feature_name | information_schema.character_data | is_supported | information_schema.yes_or_no | is_verified_by | information_schema.character_data | comments | information_schema.character_data | Leonardo Cezar SQL Proficiente
  • 12. SQL Proficiente Padr˜ao SQL Conformidade Consultando as Packages implementadas A vis˜ao sql packages postgres=# d information_schema.sql_packages Table "information_schema.sql_packages" Column | Type | Modifiers ----------------+-----------------------------------+----------- feature_id | information_schema.character_data | feature_name | information_schema.character_data | is_supported | information_schema.yes_or_no | is_verified_by | information_schema.character_data | comments | information_schema.character_data | Leonardo Cezar SQL Proficiente
  • 13. SQL Proficiente Recursos do PostgreSQL Conte´udo 1 Introdu¸c˜ao Objetivo 2 Padr˜ao SQL Defini¸c˜ao Organiza¸c˜ao do SQL:2008 Conformidade 3 Recursos do PostgreSQL Gerenciamento de Dados Externos Common Table Expression (CTEs) Window Functions Full Text Search Mais recursos Leonardo Cezar SQL Proficiente
  • 14. SQL Proficiente Recursos do PostgreSQL Gerenciamento de Dados Externos Dados Externos • ISO/IEC 9075-9:2003 SQL/MED • M´etodos de acess a dados armazenados em fontes externas • SGBDs • MS SQLServer • MySQL • Oracle • Arquivos • XML • YAML • CSV • Outras instˆancias PostgreSQL • Unificar acesso externo (DBI, dblink, PLProxy) • Maior controle na administra¸c˜ao de links externos Leonardo Cezar SQL Proficiente
  • 15. SQL Proficiente Recursos do PostgreSQL Gerenciamento de Dados Externos Dados Externos MED postgres=# CREATE FOREIGN DATA WRAPPER pgday VALIDATOR postgresql_fdw_validator; postgres=# CREATE SERVER srvpgday FOREIGN DATA WRAPPER pgday OPTIONS (host ’srv-pgday’, dbname ’pgday’, port ’5432’); postgres=# CREATE USER MAPPING FOR lhcezar SERVER srvpgday OPTIONS (user ’lhcezar’, password ’lhcezar’); postgres=$ SELECT dblink_connect(’pgday_c’, ’srvpgday’); postgres=$ SELECT * from dblink(’pgday_c’, ’SELECT * FROM pgday’) AS (id int, palestra varchar); id | palestra ----+----------------- 1 | SQL Proficiente Leonardo Cezar SQL Proficiente
  • 16. SQL Proficiente Recursos do PostgreSQL Common Table Expression (CTEs) WITH RECURSIVE • ISO/IEC 9075-2:2003 • Permite reaproveitar express˜oes pr´eviamente definidas em uma mesma instru¸c˜ao • Semelhante a utiliza¸c˜ao de uma vis˜ao • Permite gerar chamadas recursivas • Utilizado para percorrer uma lista finita de valores em uma express˜ao Leonardo Cezar SQL Proficiente
  • 17. SQL Proficiente Recursos do PostgreSQL Common Table Expression (CTEs) WITH RECURSIVE - s´erie de Fibonacci WITH RECURSIVE t ( x , y ) AS ( VALUES(0 ,1) UNION ALL SELECT GREATEST( x , y ) , x + y AS a FROM t WHERE y < 5 ) SELECT a AS f i b o n a c c i FROM t ; +-----------+ | fibonacci | +-----------+ | 0 | | 1 | | 1 | | 2 | | 3 | +-----------+ Leonardo Cezar SQL Proficiente
  • 18. SQL Proficiente Recursos do PostgreSQL Common Table Expression (CTEs) WITH RECURSIVE - sequˆencias vazias postgres=# SELECT id, descricao FROM produtos; +----+-----------+ | id | descricao | +----+-----------+ | 1 | Televis~ao | | 3 | Blue Ray | | 4 | DVD | | 10 | Bicileta | +----+-----------+ (4 rows) Leonardo Cezar SQL Proficiente
  • 19. SQL Proficiente Recursos do PostgreSQL Common Table Expression (CTEs) WITH RECURSIVE - sequˆencias vazias WITH RECURSIVE cte ( n ) AS ( SELECT p r o d u t o s p a i . i d + 1 FROM produtos p r o d u t o s p a i WHERE NOT EXISTS (SELECT NULL FROM produtos p r o d u t o s f i l h o WHERE p r o d u t o s f i l h o . i d = p r o d u t o s p a i . i d +1) AND p r o d u t o s p a i . i d < (SELECT MAX( i d ) FROM produtos ) UNION ALL SELECT cte . n +1 FROM cte WHERE NOT EXISTS (SELECT NULL FROM produtos r WHERE r . i d = cte . n + 1) ) SELECT n AS v a z i a s FROM cte ; Leonardo Cezar SQL Proficiente
  • 20. SQL Proficiente Recursos do PostgreSQL Common Table Expression (CTEs) WITH RECURSIVE - sequˆencias vazias postgres=# i ~/Apresenta¸c~oes/SQLProficiente/cte.sql +--------+ | vazias | +--------+ | 2 | | 5 | | 6 | | 7 | | 8 | | 9 | +--------+ (6 rows) Leonardo Cezar SQL Proficiente
  • 21. SQL Proficiente Recursos do PostgreSQL Window Functions Window functions • ISO/IEC 9075-2 • Efetivar c´alculos para determinado agrupamento de linhas • N˜ao limita a sa´ıda das tuplas com opera¸c˜oes GROUP BY • Utiliza a cl´ausula OVER e PARTITION BY (SQL ANSI) Leonardo Cezar SQL Proficiente
  • 22. SQL Proficiente Recursos do PostgreSQL Window Functions OVER — PARTITION BY SELECT nspname AS esquema , relname AS tabela , r e l t u p l e s AS l i n h a s , −− windows frame c r i a d o para cada grupo de esquemas SUM( r e l t u p l e s ) OVER (PARTITION BY nspname ) AS t o t a l l i n h a s FROM p g c l a s s r JOIN pg namespace n ON r . relnamespace = n . oid WHERE r e l k i n d = ’ r ’ AND nspname NOT IN( ’ pg catalog ’ , ’ information schema ’ ) ; Leonardo Cezar SQL Proficiente
  • 23. SQL Proficiente Recursos do PostgreSQL Window Functions Total de registros por esquema +---------+------------------+--------+--------------+ | esquema | tabela | linhas | total_linhas | +---------+------------------+--------+--------------+ | ator | address | 603 | 2111 | | ator | city | 600 | 2111 | | ator | country | 109 | 2111 | | ator | customer | 599 | 2111 | | ator | actor | 200 | 2111 | | filme | payment | 0 | 4587 | | filme | inventory | 4581 | 4587 | | filme | language | 6 | 4587 | | public | rental | 16044 | 39575 | | public | film_category | 1000 | 39575 | | public | film | 1000 | 39575 | | public | store | 2 | 39575 |Leonardo Cezar SQL Proficiente
  • 24. SQL Proficiente Recursos do PostgreSQL Full Text Search FTS • Busca atrav´es de similaridade • Classificar resultados pela relevˆancia • Consulta baseada em dicion´arios • Defini¸c˜ao de stop words Leonardo Cezar SQL Proficiente
  • 25. SQL Proficiente Recursos do PostgreSQL Full Text Search FTS - Exemplo de consulta SELECT t i t l e , t s h e a d l i n e ( d e s c r i p t i o n , t o t s q u e r y ( ’ f a t e&i n d i a ’ )) FROM f i l m WHERE f u l l t e x t @@ t o t s q u e r y ( ’ f a t e&i n d i a ’ ) ; +--------------------+--------------------------------------------------------- | title | ts_headline +--------------------+--------------------------------------------------------- | ANTITRUST TOMATOES | <b>Fateful</b> Yarn of a Womanizer in Ancient <b>India</ | EASY GLADIATOR | <b>Fateful</b> Story of a Monkey Ancient <b>India</b> | SLEUTH ORIENT | <b>Fateful</b> Character Study of a <b>India</b> +--------------------+--------------------------------------------------------- Leonardo Cezar SQL Proficiente
  • 26. SQL Proficiente Recursos do PostgreSQL Mais recursos Outras ´areas a se explorar • Particionamento • XML • Procedimentos Armazenados (CREATE FUNCTION) • Fun¸c˜oes anˆonimas • Dom´ınios (CREATE DOMAIN) • Tipo (CREATE TYPE [...]) • Agrega¸c˜ao (CREATE AGGREGATE [...]) • Replica¸c˜ao (Streaming/Hot Standby) • Contrib Leonardo Cezar SQL Proficiente
  • 27. SQL Proficiente Recursos do PostgreSQL Mais recursos • D´uvidas? • Sugest˜oes? • Cr´ıticas? Leonardo Cezar SQL Proficiente