Uso Common Table Expressions (CTE) para criação de relatórios. São
descritos os dois tipos de CTEs: as convencionais e as recursivas. Sendo assim,
o artigo apresenta aos leitores iniciantes e avançados possibilidades
oferecidas por CTEs, que são a criação de conjuntos de dados temporários e
também a definição de rotinas recursivas.
Em que situação o tema é útil?
Criação de relatórios que
envolvam lógicas muito extensas e/ou que requeiram recursos de recursividade.
Resumo DevMan
Em muitos momentos durante o
desenvolvimento de aplicações que acessam o banco de dados nos deparamos com
situações em que consultas SQL bastante complexas para a construção de
relatórios se fazem necessárias. Códigos longos e que podem gerar confusões
durante a sua leitura são comuns.
É para essas situações que
utilizamos o recurso conhecido como CTE – Common
Table Expressions. Uma CTE é um recurso implementado no padrão ANSI SQL e,
por consequência, aceito em praticamente todos os sistemas de gerenciamento de
banco de dados.
Neste artigo veremos como
implementar uma CTE e também faremos uma análise da performance de sua
utilização. Veremos também como implementar CTE para consultas recursivas e
também analisaremos sua performance.
Estamos
de volta com o quarto artigo da série sobre criação de relatórios. Desta vez,
vamos falar de expressões de tabela, definidas como Common Table Expressions (CTE), um recurso estabelecido pelo padrão
ANSI SQL (ver Nota DevMan 1) e que
nos dias atuais está disponível em praticamente qualquer sistema gerenciador de
banco de dados (SGBD).
CTEs
são bastante úteis principalmente por simplificarem a leitura de consultas
complexas, como veremos a seguir. Mas as CTEs oferecem também uma
funcionalidade ímpar: permite criação de lógicas recursivas dentro do SQL! Este
artigo apresenta os conceitos, as sintaxes e avalia o uso destes recursos.
Nota DevMan 1: ANSI SQL
SQL é a abreviação para Structured Query Language, ou Linguagem
Estruturada de Consultas. É uma linguagem de programação projetada para
gerenciar dados em sistemas de gerenciamento de banco de dados relacional
(SGBDR, do inglês RDBMS - Relational
Database Management System).
Originalmente baseado em álgebra
relacional e cálculo relacional de tuplas, o seu âmbito inclui inserir,
consultar, atualizar e excluir dados, criação e modificação de esquema e
controle de acesso a dados. SQL foi uma das primeiras linguagens comerciais
para o modelo relacional idealizado por Edgar Frank Codd, como descrito em seu
artigo datado de 1970 "Um Modelo Relacional de Dados para os grandes
bancos de dados compartilhados" ("A
Relational Model of Data for Large Shared Data Banks").
SQL se tornou um padrão da American National Standards Institute
(ANSI) em 1986, e da International Organization
for Standards (ISO) em 1987. Desde então, o padrão tem sido reforçado
constantemente com recursos adicionais. No entanto, questões de portabilidade
de código SQL entre os principais SGBDRs ainda existem devido à falta de
cumprimento integral, ou diferentes interpretações da norma. Entre as razões
mencionadas são o enorme tamanho e especificação incompleta da norma.
SQL foi desenvolvido
inicialmente na IBM por Donald D. Chamberlin e Raymond F. Boyce no início de
1970. Esta versão, chamada inicialmente de SEQUEL (Structured English Query Language - Linguagem Estruturada de
Consultas em Inglês), foi projetada para manipular e recuperar dados
armazenados no sistema de gerenciamento de banco de dados "quase"
relacional da IBM, o System R, que um grupo do laboratório de pesquisas da IBM
em San Jose tinha desenvolvido durante a década de 1970. A sigla SEQUEL foi
posteriormente alterada para SQL porque "SEQUEL" era uma marca de uma
empresa de aeronaves sediada no Reino Unido.
O primeiro Sistema de Gerenciamento
de Banco de Dados Relacional foi o RDMS, desenvolvido no MIT (Massachusetts Institute of Technology -
Instituto de Tecnologia de Massachusetts) na década de 1970, logo seguido pelo
RDBMS Ingres, desenvolvido em 1974 na UC Berkeley. O Ingres implementava uma
linguagem de consulta conhecida como QUEL, que mais tarde foi substituída no
mercado pelo SQL.
O SQL 2008 é a sexta revisão
para os padrões ISO e ANSI para a linguagem de consulta de banco de dados SQL e
foi formalmente adotado em Julho de 2008. O padrão SQL 2008 é dividido em
várias partes, cobrindo o Framework,
Conceitos, a Camada de Interface de Chamadas, Módulos de Persistência e
Armazenamento, Gerenciamento de Dados Externos, Linguagem de Ligação de
Objetos, Informação e Definição de Esquemas, Rotinas e Tipos usando Java, e
várias "Especificações relacionadas."
O padrão SQL não está disponível
gratuitamente. Todo o padrão pode ser adquirido a partir da ISO como ISO/IEC
9075 (1-4,9-11,13,14): 2008. O nível mínimo de conformidade com o padrão SQL
2008 para que um produto possa ser chamado de "Core SQL 2008" se
limita a definições especificadas em duas partes da norma: Conceito e
Informação e Definição de Esquemas.
Como
mencionei em todos os números anteriores desta série, este material foi criado
a partir de uma palestra que apresentei aos meus colegas de trabalho sobre o
uso do DB2. Porém, isso não deve causar impacto algum para o leitor que usa
outro SGBD, uma vez que as CTEs são recursos estabelecidos pelo padrão ANSI SQL
e sua implementação deve ser praticamente idêntica em qualquer SGBD relacional.
Neste
artigo tratamos dos seguintes tópicos:
·
Definição e criação de uma CTE;
·
Exemplos de CTEs simples;
·
Avaliando performance de consultas CTEs simples;
·
Recursividade;
·
Como implementar CTEs recursivas;
·
Exemplos de CTEs recursivas;
·
Avaliando performance de consultas CTEs recursivas.
Para
situarmos os recursos SQL que vamos estudar, é preciso ter uma base de dados
como amostra. Temos usado nestes artigos uma base com dados fictícios de
demanda de produtos farmacêuticos. A Figura
1 mostra o modelo desta base.
Figura 1:
Modelo de dados da base de exemplo
Assumimos
neste artigo que o leitor já está familiarizado com conceitos básicos de
programação, além de já dominar os conceitos da linguagem SQL apresentados nos
artigos anteriores desta série.
Definição
e criação de CTEs
Uma
CTE, por definição, é um conjunto de dados temporário que recebe um nome e que
é derivado de consultas simples e pode ser usado em declarações de leitura,
escrita, atualização ou exclusão de dados (SELECT/INSERT/UPDATE/DELETE).
Um
detalhe fundamental é que uma CTE existirá apenas até a execução da próxima
declaração SQL. Depois disso, este objeto temporário não existe mais.
A
declaração de uma CTE exige o uso da palavra reservada WITH, conforme se vê na Listagem 1.
Listagem 1. Sintaxe para de uma CTE simples.
--definição da CTE
WITH nome_da_cte (coluna_saida1, coluna_saida2, ... )
AS (SELECT .....)
-- seguida pela chamadada CTE em um declaração qualquer
SELECT ....
FROM tabela1, nome_da_cte;
Oferta válida para todos os planos durante o mês de dezembro
+3 MESES
Grátis
Veja os resultado dos nossos alunos
Conquistas reais de quem está aplicando o método
<Perguntas frequentes>
Carreira
Por onde devo iniciar os estudos?
Recomendamos começar pelo Plano de Estudo Carreira Programador Front-End. Essa área da programação é mais visual e intuitiva, tornando-a ideal para iniciantes. No Front-End, você aprenderá a criar a parte visual dos sites, como layout, cores e interatividade. Depois de dominar o Front-End, você pode avançar para Programador Back-End, onde aprenderá a lidar com a lógica e o funcionamento interno dos sites, e, finalmente, para Programador Mobile, focando no desenvolvimento de aplicativos para smartphones. Nossa metodologia é estruturada de forma progressiva para garantir que você desenvolva confiança e experiência ao criar projetos reais, como sites estáticos e dinâmicos.
Em quanto tempo vou me tornar um programador?
O tempo necessário para se tornar um programador varia de acordo com a dedicação de cada estudante. Com nossa metodologia, que inclui um Plano de Estudo detalhado e suporte contínuo, você pode se tornar um programador de 6 meses a um ano, dependendo do seu ritmo e esforço. Nossa abordagem prática e orientada a projetos ajudará a acelerar seu aprendizado.
Eu preciso de um diploma de faculdade para começar a atuar como programador?
Não. Ser programador é uma excelente oportunidade para quem não possui diploma de faculdade. Muitas empresas contratam baseadas nas habilidades técnicas e experiência prática, não necessariamente em diplomas. Após conquistar uma vaga, você pode optar por complementar sua formação com um diploma.
Por que a programação se tornou a profissão mais promissora da atualidade?
A necessidade de programadores cresceu exponencialmente, especialmente após a pandemia de Covid-19, que forçou muitas empresas a se adaptarem ao digital. Com o crescimento das empresas de tecnologia, a demanda por programadores aumentou. Atualmente, há mais de 200 mil vagas abertas no Brasil devido à falta de profissionais qualificados.
Metodologia
Quais são os principais diferenciais da DevMedia?
Didática e Metodologia
Com mais de 20 anos de experiência, nossa metodologia foca em menos aulas e mais prática. Desenvolvemos dezenas de projetos e exercícios para ajudar você a se tornar um programador completo. Nossos projetos são desafiadores e autênticos, não apenas exercícios repetitivos.
Projetos reais e exercícios
Você desenvolverá diversos projetos práticos em cada carreira (Front-End, Back-End e Mobile), recebendo mentoria e suporte contínuo. A prática é essencial, e oferecemos milhares de exercícios para ajudar você a fixar o conteúdo e melhorar sua posição no ranking.
Suporte ao aluno
Nossa plataforma oferece suporte dedicado com professores experientes, respondendo suas dúvidas em menos de uma hora. Isso garante que você receba a ajuda necessária durante toda a sua jornada de aprendizado.
Gamificação
A DevMedia utiliza gamificação para tornar o aprendizado mais envolvente e motivador. Você acumula pontos e moedas por acertos, que podem ser trocados por produtos e customizações no seu card pessoal. Além disso, o sistema de ranking mensal incentiva a competição amigável e a melhoria contínua.
O que eu irei aprender estudando pela DevMedia?
Ao estudar conosco, você se tornará um programador Full Stack, dominando Front-End, Back-End e Mobile. Utilizamos a linguagem JavaScript, a mais utilizada no mercado, preparando você para criar sistemas webs e aplicativos celulares. Nossa abordagem prática inclui exercícios para fixar o conhecimento e desenvolvimento de projetos reais que te preparam, para o mercado de trabalho.
Quais as vantagens de aprender programação através da linguagem JavaScript?
Ela é Multiplataforma, ela vai te permitir programar para web e para celulares utilizando praticamente a mesma sintaxe.
Elá é Full Stack. Ela te permite criar aplicações Front-end, Back-end e Mobile. Isso acelera muito sua carreira e aumenta suas possibilidades de pegar trabalhos autônomos e conquistar uma vaga no mercado.
Ela é fácil de aprender. Como ela não exige conhecimento inicial em “Orientação a Objetos” ela se torna mais simples com uma curva de aprendizado suave e vai te permitir começar a programar mais rápido do que outras linguagens
A plataforma oferece certificados?
Sim, oferecemos dois tipos de certificados: o certificado de conclusão, que você adquire ao consumir o conteúdo, e o certificado de autoridade, que você obtém ao acertar exercícios. Ambos possuem carga horária, que pode ser utilizada para fins acadêmicos, como atividades complementares na faculdade, e também para comprovações em processos seletivos ou no seu currículo.
A plataforma tem suporte ao aluno, como funciona?
Sim, temos uma equipe de programadores pronta para ajudar com todas as suas dúvidas! Durante o horário comercial, o tempo médio de resposta é de até 10 minutos. E não se preocupe, também oferecemos suporte à noite e nos finais de semana, com um prazo de resposta um pouco maior.
A DevMedia me forma como programador Full Stack?
Sim! Oferecemos uma formação completa, do zero até Full Stack. Nosso foco é na prática, então você vai encontrar muitos exercícios e projetos reais ao longo do curso. Garantimos que você sairá com a autonomia necessária para desenvolver seus próprios projetos com confiança!
Tem horário para as aulas?
Não, não temos horários fixos para as aulas. Todo o nosso conteúdo está disponível para você acessar a qualquer momento, permitindo que você estude conforme sua própria disponibilidade e ritmo. Dessa forma, você pode integrar o aprendizado à sua rotina de maneira mais flexível e eficaz.
Por que a DevMedia não usa videoaulas em sua didática?
Nosso foco principal é formar programadores de verdade. Sabemos que o dia a dia de um programador envolve muita leitura, interpretação e escrita de código. Por isso, nosso conteúdo é desenvolvido para ambientar você nesse processo desde o início, proporcionando mais autonomia e acelerando seu aprendizado.
Na vídeo-aula é o professor que está lendo, interpretando e escrevndo o código para você, isso limita o seu progresso. Ao ler e interagir diretamente com o conteúdo, você exercita sua capacidade de leitura e concentração, além de poder avançar no seu próprio ritmo. Dessa forma, você se torna um programador mais independente e preparado para os desafios reais do mercado.
Preciso de um computador específico para estudar na DevMedia?
Não é necessário nada específico. Qualquer computador com processador atual e memória de 8 GB é suficiente.
Eu consigo estudar pelo celular?
Sim, a DevMedia possui um aplicativo que te permite seguir com seus estudos de qualquer lugar.
A DevMedia tem aplicativo?
Sim, nosso aplicativo está disponível na Play Store e na Apple Store, permitindo que você estude de forma prática e conveniente em qualquer lugar.
Preciso estar na faculdade para acompanhar os estudos na DevMedia?
Não, a faculdade não é necessária. Você não precisa de nenhum conhecimento prévio para iniciar os estudos na nossa plataforma.
Assinatura e Pagamentos
Quais são os planos de assinatura disponíveis?
Oferecemos o plano anual, o valor total é lançado no cartão de crédito, parcelado em 12 vezes, e você precisa dispor do valor total no limite do seu cartão. Você também pode optar por pagar no PIX
Adquirindo o plano, terei acesso a todo o conteúdo?
Sim, ao assinar nossa plataforma, você desbloqueia acesso total a todo o nosso conteúdo, sem precisar comprar nada separadamente.
A plataforma tem planos vitalícios?
Não, nossos planos são anuais, garantindo que você tenha acesso contínuo às atualizações mais recentes e aos novos conteúdos. A tecnologia evolui rapidamente, e um plano vitalício oferece um conteúdo estático que se tornará ultrapassado em pouco tempo. Com nossos planos anuais, você está sempre à frente, aprendendo as novidades e tendências mais atuais no mundo da programação.
A DevMedia tem fidelidade?
Sim, nosso plano tem uma fidelidade de 12 meses, o que garante o tempo ideal para você explorar nosso conteúdo e desenvolver a autonomia necessária para trabalhar com programação.
Como funciona o cancelamento?
Nós garantimos seu direito de cancelamento com reembolso total dentro dos primeiros 7 dias.
Para que você aproveite ao máximo seu investimento, oferecemos suporte personalizado para orientá-lo na utilização da plataforma. Também temos a opção de transferência de titularidade do plano, permitindo que outra pessoa aproveite o restante do seu período de assinatura.
Cadastro
Como excluir meus dados da plataforma?
Para excluir seus dados da plataforma, acesse o link : https://www.devmedia.com.br/fale-conosco/ e abra um protocolo de 'Exclusão de dados'. Nossa equipe processará a solicitação e removerá todas as informações do seu cadastro.
Compartilhe esse conteúdo com um amigo!
Faça login para ganhar recompensas.
Ou
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.