<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jennifer Omena</title>
    <description>The latest articles on DEV Community by Jennifer Omena (@gennipher).</description>
    <link>https://dev.to/gennipher</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F326423%2Fb167b7ef-31e6-4d4b-ba88-22227dc3bb37.png</url>
      <title>DEV Community: Jennifer Omena</title>
      <link>https://dev.to/gennipher</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gennipher"/>
    <language>en</language>
    <item>
      <title>SQL Conceitos Básicos. Postgres + Docker</title>
      <dc:creator>Jennifer Omena</dc:creator>
      <pubDate>Wed, 29 Jan 2020 14:42:38 +0000</pubDate>
      <link>https://dev.to/gennipher/sql-conceitos-basicos-postgres-docker-jbn</link>
      <guid>https://dev.to/gennipher/sql-conceitos-basicos-postgres-docker-jbn</guid>
      <description>&lt;p&gt;Criei este tutorial para aprimorar e obter meus conhecimentos na tecnologia SQL para uso no meu dia-a-dia como desenvolvedora.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JQyeHjrB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/787/0%2AxZfzHRVLm4z4NE5Z" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JQyeHjrB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/787/0%2AxZfzHRVLm4z4NE5Z" alt="sql"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured Query Language (SQL)&lt;/strong&gt; é uma linguagem que usamos para &lt;em&gt;“conversar”&lt;/em&gt; com o banco de dados. Ela é organizada em alguns subconjuntos, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DQL&lt;/strong&gt; — Data Query Language A Linguagem de Consulta de Banco de Dados define qual comando utilizar para fazer a consulta &lt;em&gt;(SELECT)&lt;/em&gt; dos dados;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DML&lt;/strong&gt; — Data Manipulation Language A Linguagem de Manipulação de Dados define os comandos para manipular os dados já contidos no banco &lt;em&gt;(INSERT, UPDATE e DELETE)&lt;/em&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DDL&lt;/strong&gt; — Data Definition Language A Linguagem de Definição de Dados define quais comandos usar para criar tabelas, views, índices &lt;em&gt;(CREATE)&lt;/em&gt;, atualizar &lt;em&gt;(ALTER)&lt;/em&gt; e/ou remover &lt;em&gt;(DROP)&lt;/em&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DCL&lt;/strong&gt; — Data Control Language A Linguagem de Controle de Dados define os comandos para controlar o acesso aos dados do banco, adicionando &lt;em&gt;(GRANT)&lt;/em&gt; e removendo &lt;em&gt;(REVOKE)&lt;/em&gt; permissões de acesso;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DTL&lt;/strong&gt; — Data Transaction Language A Linguagem de Transação de Dados define quais comandos gerenciam as transações executadas no banco de dados, como iniciar uma transação &lt;em&gt;(BEGIN)&lt;/em&gt;, confirmar uma transação &lt;em&gt;(COMMIT)&lt;/em&gt; ou desfazer uma transação &lt;em&gt;(ROLLBACK)&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Criação de Banco de Dados
&lt;/h3&gt;

&lt;p&gt;A sintaxe do banco de dados é bem intuitiva. Para iniciarmos, precisamo criar um banco de dados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;teste&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Para criarmos um banco eficiente e útil, precisamos seguir alguns passos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identificar o objetivo do banco de dados, ou fazer uma análise de requisitos;&lt;/li&gt;
&lt;li&gt;Organizar os dados em tabelas;&lt;/li&gt;
&lt;li&gt;Especificar chaves primárias e analisar relações;&lt;/li&gt;
&lt;li&gt;Padronizar as tabelas.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Identificar o objetivo do banco de dados.
&lt;/h3&gt;

&lt;p&gt;Precisamos compreender a finalidade do banco de dados para nos orientarmos durante todo o processo de criação, reunir dados existentes que serão incluídos, listar os tipos de dados, entidades, pessoas, eventos que serão armazenados.&lt;br&gt;
Exemplo: Lista Telefônica&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nome&lt;/li&gt;
&lt;li&gt;Sobrenome&lt;/li&gt;
&lt;li&gt;DDD&lt;/li&gt;
&lt;li&gt;Número do telefone
Depois de entender e saber quais dados serão incluídos em seu banco de dados, saber de onde esses dados vêm e como eles serão utilizados, podemos começar a planejar nosso banco de dados real.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Estruturando o banco de dados.
&lt;/h3&gt;

&lt;p&gt;Neste passo, é preciso entender como os bancos de dados relacionais são estruturados. Os dados relacionados são agrupados em tabelas, que possuem colunas &lt;em&gt;(campos ou atributos)&lt;/em&gt; e linhas &lt;em&gt;(tuplas ou registros)&lt;/em&gt; assim como uma planilha.&lt;br&gt;
Cada linha é chamada de registro e esse registro inclui dados sobre algo, como uma pessoa.&lt;br&gt;
As colunas contêm um único tipo de informação que aparece em cada registro.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_vPS3Vgw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/525/0%2A1k5Rm-tv6Lri6-b9" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_vPS3Vgw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/525/0%2A1k5Rm-tv6Lri6-b9" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Os tipos de dados são para manter os dados consistentes de um registro para outro. Vejamos os tipos de dados mais comuns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;INT — inteiro positivo ou negativo;&lt;/li&gt;
&lt;li&gt;CHAR — tamanho específico de texto;&lt;/li&gt;
&lt;li&gt;VARCHAR — texto de tamanhos variáveis;&lt;/li&gt;
&lt;li&gt;TEXTO — grande quantidade de texto;&lt;/li&gt;
&lt;li&gt;BOOL — boleanos;&lt;/li&gt;
&lt;li&gt;FLOAT, DOUBLE — números de pontos flutuantes.
‌Para criar uma visão geral do banco (diagrama entidade-relacionamento), cada tabela é uma caixinha do diagrama, o título de cada caixinha descreve o que essa tabela contém e nelas são listados seus atributos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lOlsuv5m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/261/0%2ABl6haAjbFZqAz6tu" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lOlsuv5m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/261/0%2ABl6haAjbFZqAz6tu" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após criar a visão geral da tabela, devemos decidir qual atributo será a chave primária &lt;em&gt;(PK)&lt;/em&gt;, se houver.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Primary Key (PK)&lt;/strong&gt; — Chave Primária é um identificador para uma determinada entidade que contem um valor único, imutável e sempre presente, não podendo nunca ser nulo ou vazio.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Criando relações entre entidades.
&lt;/h3&gt;

&lt;p&gt;Quando falamos em relações entre entidade falamos de cardinalidade e essa cardinalidade se refere à quantidade de elementos que interagem entre duas tabelas relacionadas. Ao identificar a cardinalidade, estamos garantindo a eficiência da divisão dos dados nas tabelas.&lt;br&gt;
Temos três tipos de relacionamentos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1:1
Cada um dos elementos de uma entidade só pode ser relacionar com apenas um elemento de outra entidade. Exemplo: Uma pessoa só pode ter um CPF e um CPF só pode pertencer a uma pessoa.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ELfhXD8J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/488/0%2A1LYS32SlX1r-tA-O" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ELfhXD8J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/488/0%2A1LYS32SlX1r-tA-O" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1:N
Cada elemento de uma entidade pode ter um relacionamento com vários elementos de outra entidade. Exemplo: Um departamento pode ter vários funcionários, mas um funcionário só pode pertencer a um departamento.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cQmKy9EU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/487/0%2Ajuh2cep51CkcnV8T" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cQmKy9EU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/487/0%2Ajuh2cep51CkcnV8T" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;N:N
Vários elementos de uma entidade podem se relacionar com vários elementos de outra entidade. Mas diferente dos outros dois relacionamentos, é sugerido criar uma tabela intermediária que relacionada as outras duas.
Exemplo: Um filme possui vários atores, e um ator pode atuar em vários filmes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_UKJGPMV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/770/0%2AqCEMDt2pDHcxGib4" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_UKJGPMV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/770/0%2AqCEMDt2pDHcxGib4" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;
  
  
  Vamos por em prática...
&lt;/h5&gt;


&lt;h2&gt;
  
  
  Primeiro, o que é um Docker?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pOKVn9UP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1300/0%2ANZvDAXlhaYgl5__e" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pOKVn9UP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1300/0%2ANZvDAXlhaYgl5__e" alt="docker"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Docker é uma plataforma open source de alto desempenho, desenvolvida em Go e criada pelo Google, que garante maior facilidade em criar e administrar ambientes isolados, assegurando rápida disponibilização de programas para o usuário final.&lt;br&gt;
Seu objetivo é criar, testar e implementar aplicações em um ambiente separado, chamado &lt;em&gt;container&lt;/em&gt;, permitindo que o desenvolvedor consiga empacotar o software de maneira padronizada, já que a plataforma disponibiliza código, bibliotecas, &lt;em&gt;runtime&lt;/em&gt; e ferramentas do sistema.&lt;/p&gt;
&lt;h3&gt;
  
  
  E por quê usar Docker?
&lt;/h3&gt;

&lt;p&gt;O maior benefício do uso da plataforma é agilizar até 7 vezes mais a disponibilização do software do que em virtualizações convencionais. Outros benefícios que podemos citar são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Possibilidade de configurar diferentes ambientes de forma rápida, diminuindo incompatibilidades entre sistemas disponíveis;&lt;/li&gt;
&lt;li&gt;Modularizar, permitindo desabilitar uma parte do dispositivo, para realizar atualizações de reparo ou adição de funcionalidades sem interromper todo o programa;&lt;/li&gt;
&lt;li&gt;Formar diversas camadas diferentes, onde se dividem em dois grupos: Imagens: o usuário pode compartilhar um aplicativo ou um conjunto de serviços em diversos ambientes. Quando há qualquer alteração na imagem, ou uso de um comando como executar ou copiar, é criada uma camada.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Containers&lt;/strong&gt;: é o local onde estão as modificações da aplicação que está em execução. Nele é onde o usuário pode modificar uma imagem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Reverter para recuperar a versão anterior. É possível por conta das camadas que foram criadas;&lt;/li&gt;
&lt;li&gt;Implantação rápida, pois o tempo e desempenho ocorrem simultaneamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  PostgreSQL
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Hh8_XNDK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/700/0%2AG2jQ9XpVHKTSCdn8" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Hh8_XNDK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/700/0%2AG2jQ9XpVHKTSCdn8" alt="Postgres"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O Postgres oferece opção de criar e executar instâncias por meio de containers Docker. &lt;/p&gt;
&lt;h3&gt;
  
  
  E por que escolhi o Postgres?
&lt;/h3&gt;

&lt;p&gt;Pela possibilidade de execução de sua ferramenta gráfica de administração a partir de um container.&lt;br&gt;
Antes de mais nada, precisamos ter uma imagem presente na máquina onde os containers existirão. Para isso vamos executar o seguinte código no terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull postgres
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Caso queira listar todas as imagens disponíveis no seu sistema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zNMzvvs1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/789/0%2AQ1d9H13D8fSq6F3p" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zNMzvvs1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/789/0%2AQ1d9H13D8fSq6F3p" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para manter o estado à medida que você vai trabalhando com o container, precisa commitar as alterações:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;//docker commit &lt;span class="o"&gt;[&lt;/span&gt;ID &lt;span class="k"&gt;do &lt;/span&gt;container] &lt;span class="o"&gt;[&lt;/span&gt;nome da imagem]
docker commit afd8110f1813 postgres
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Trabalhando com containers.
&lt;/h3&gt;

&lt;p&gt;Listando todos os seus containers atuais &lt;em&gt;(tantos os running quanto os non-running)&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y4U3Fw0e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1319/0%2ALz0CbT0w7jpM80d4" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y4U3Fw0e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1319/0%2ALz0CbT0w7jpM80d4" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Iniciando uma instância.
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;//docker run &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Nome &lt;span class="k"&gt;do &lt;/span&gt;seu banco de dados] &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;Senha &lt;span class="k"&gt;do &lt;/span&gt;seu banco de dados] &lt;span class="nt"&gt;-d&lt;/span&gt; postgres
docker run &lt;span class="nt"&gt;--name&lt;/span&gt; teste-postgres &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Postgres2019! &lt;span class="nt"&gt;-d&lt;/span&gt; postgres
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;E verifica se o docker foi instanciado em sua máquina:&lt;br&gt;
O comando &lt;code&gt;docker ps -a&lt;/code&gt; lista todas as instâncias.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8bWU5ZID--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1773/0%2ApGBW1ofDIKoRXbT_" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8bWU5ZID--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1773/0%2ApGBW1ofDIKoRXbT_" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora dê um start com &lt;code&gt;docker start [CONTAINER ID]&lt;/code&gt; e &lt;code&gt;docker ps&lt;/code&gt; para conferir se foi:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rBgKx7Ao--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1306/0%2AFOvDbxcX6YXSQEgt" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rBgKx7Ao--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1306/0%2AFOvDbxcX6YXSQEgt" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Plataforma de banco de dados
&lt;/h3&gt;

&lt;p&gt;Eu uso o &lt;strong&gt;dbeaver-ce&lt;/strong&gt; e vou utilizá-lo neste tutorial.&lt;/p&gt;

&lt;p&gt;Abra o &lt;strong&gt;dbeaver&lt;/strong&gt; e clique em &lt;strong&gt;New database connection&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ozc03ohy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/39/0%2Aa15ucT7M8-jQ-6lL" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ozc03ohy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/39/0%2Aa15ucT7M8-jQ-6lL" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Selecione &lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Nnqlvx5N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/99/0%2AQskp-RrWUXmIUAzk" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Nnqlvx5N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/99/0%2AQskp-RrWUXmIUAzk" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E configure sua conexão, nesse caso precisa apenas colocar a senha que colocamos ao dar &lt;code&gt;docker run&lt;/code&gt;, lá em iniciando uma instância.&lt;br&gt;
Password: &lt;em&gt;Postgres2019!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--unWr1Tx3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/817/0%2A0UxRlnHKEJz9-iFY" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--unWr1Tx3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/817/0%2A0UxRlnHKEJz9-iFY" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Antes de concluir, teste a conexão. Logo após pode dar ok e mãos a obra.&lt;/p&gt;
&lt;h3&gt;
  
  
  Criando Schemas.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GVfwSTj_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/204/0%2AHTGmGDiXk5TAIstE" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GVfwSTj_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/204/0%2AHTGmGDiXk5TAIstE" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você pode fazer de duas maneiras, uma é clicando com o botão direito sobre &lt;strong&gt;Schema &amp;gt; New Schema&lt;/strong&gt;; ou clicar com o botão direito sobre &lt;strong&gt;PostgreSQL — postgres &amp;gt; SQL Editor&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vamos com a segunda opção.&lt;/p&gt;

&lt;p&gt;Vai abrir uma janela igual da imagem abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gsDonggM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1793/0%2A18Y30Je8pSppixAC" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gsDonggM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1793/0%2A18Y30Je8pSppixAC" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nesta janela é onde vamos escrever nossos scripts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;‌Selecione tudo, dê &lt;code&gt;Ctrl + Enter&lt;/code&gt;, clique com o botão direito sobre &lt;strong&gt;PostgreSQL — postgres &amp;gt; Refresh&lt;/strong&gt;.&lt;br&gt;
Note que seu Schema foi criado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V4D8X5Us--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/210/0%2AdABwbYeDcH-pqp0X" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V4D8X5Us--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/210/0%2AdABwbYeDcH-pqp0X" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Criando Tabelas.
&lt;/h3&gt;


&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;SEQUENCE&lt;/span&gt; &lt;span class="n"&gt;sq_lista_telefonica&lt;/span&gt; &lt;span class="k"&gt;START&lt;/span&gt; &lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt;           &lt;span class="n"&gt;INT8&lt;/span&gt;             &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;nome&lt;/span&gt;         &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;sobrenome&lt;/span&gt;    &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ddd&lt;/span&gt;          &lt;span class="nb"&gt;CHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;telefone&lt;/span&gt;     &lt;span class="nb"&gt;CHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;CONSTRAINT&lt;/span&gt; &lt;span class="n"&gt;pk_lista_telefonica&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="k"&gt;CONSTRAINT&lt;/span&gt; &lt;span class="n"&gt;uk_lista_telefonica&lt;/span&gt;  &lt;span class="k"&gt;UNIQUE&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;UNIQUE&lt;/span&gt; &lt;span class="k"&gt;INDEX&lt;/span&gt; &lt;span class="n"&gt;ix_lista_telefonica&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Primeiro vamos entender o script acima.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;CREATE SEQUENCE sq_lista_telefonica START WITH 1;&lt;/code&gt; -&amp;gt; Vai fazer com que o id da sua tabela seja auto incrementado a partir do 1. Mas há uma observação sobre o sequence: rodando o script direto no banco pelo dbeaver, o sequence não é usado, mas na aplicação onde tem explicitamente essa ligação, funciona. Para funcionar tanto na aplicação quanto direto no banco, teríamos que usar default nextval('nome_da_sequencia') quando a tabela fosse criada ;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CREATE TABLE lista_telefonica&lt;/code&gt; -&amp;gt; cria uma tabela;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;( ... )&lt;/code&gt; -&amp;gt; Tudo o que estiver entre parêntesis serão dados de sua tabela;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;id / nome / sobrenome / ddd / telefone&lt;/code&gt; -&amp;gt; são suas colunas;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;INT8&lt;/code&gt; -&amp;gt; tipo inteiro com 8 bytes;
&lt;code&gt;VARCHAR(20)&lt;/code&gt; -&amp;gt; comprimento variável com limite e o limite fica entre ( );&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CHAR(2)&lt;/code&gt; -&amp;gt; comprimento fixo, completado com brancos;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NOT NULL&lt;/code&gt; -&amp;gt; ao usar not null, permitimos que valores sejam adicionados posteriormente;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CONSTRAINT pk_lista_telefonica PRIMARY KEY (ID)&lt;/code&gt; -&amp;gt; A restrição PRIMARY KEY (Chave Primária) indica que uma coluna ou grupo de colunas identifica de forma única cada registro em uma tabela;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CONSTRAINT uk_lista_telefonica UNIQUE (ddd, telefone)&lt;/code&gt; -&amp;gt; A restrição - &lt;code&gt;UNIQUE&lt;/code&gt; assegura que os dados sejam únicos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Puts, coloquei o tipo errado, e agora? Vamos supor que coloquei o tipo do id errado, ao invés de INT8, quero INT2:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G2kPfw1d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/311/0%2AhtAQ_qj8Gj56-OTp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G2kPfw1d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/311/0%2AhtAQ_qj8Gj56-OTp" alt=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;COLUMN&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;TYPE&lt;/span&gt; &lt;span class="n"&gt;int2&lt;/span&gt;
&lt;span class="k"&gt;USING&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;int2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;lista_telefonica.lista_telefonica&lt;/em&gt;&lt;br&gt;
Porque está duplicado?&lt;br&gt;
O primeiro 'lista_telefonica' é o nome do Schema e o segundo é o nome da tabela.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ou você pode alterar clicando duas vezes sobre a coluna id(int8) e em Data type, selecionar int2:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l91IHp6v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1195/0%2AwOIFVkz9bEx5XPii" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l91IHp6v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1195/0%2AwOIFVkz9bEx5XPii" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vamos ver as mudanças:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZzC3bhP8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/324/0%2AZs6UAP7aMN7DuCOa" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZzC3bhP8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/324/0%2AZs6UAP7aMN7DuCOa" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Inserção de Registros.
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt;
  &lt;span class="k"&gt;INTO&lt;/span&gt;
  &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sobrenome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'Jennifer'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'Omena'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'21'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'977778888'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gFDCaaOb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/562/0%2AmfzE8YTFWjQ4kViY" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gFDCaaOb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/562/0%2AmfzE8YTFWjQ4kViY" alt=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt;
  &lt;span class="k"&gt;INTO&lt;/span&gt;
  &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sobrenome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'Leonardo'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'Omena'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'21'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'988887777'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MR0G6U5a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/562/0%2AJy_ryM7OclwFRi79" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MR0G6U5a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/562/0%2AJy_ryM7OclwFRi79" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Exclusão de Registros.
&lt;/h3&gt;

&lt;p&gt;Digamos que adicionei um registro erroneamente e quero excluir do meu banco.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--12-PQzyv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/568/0%2A7U0unguj7R6VNL_P" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--12-PQzyv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/568/0%2A7U0unguj7R6VNL_P" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vamos deletar o quinto registro:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;DELETE&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;
  &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;
  &lt;span class="n"&gt;ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EFFcEf4v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/569/0%2A-UjKAYfGb8mLk3SZ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EFFcEf4v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/569/0%2A-UjKAYfGb8mLk3SZ" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Select Básico.
&lt;/h3&gt;

&lt;p&gt;O Select serve para buscar os dados de uma tabela do banco de dados, retornando dados em forma de tabela. &lt;br&gt;
Digamos que quero saber o nome de todo mundo que está salvo na minha lista telefônica:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;sobrenome&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;
    &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7d5-qVBd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-LuXs0gdNFW10bTH8ypg%252F-LuYFRJk0X44dsdkkWln%252Fimage.png%3Falt%3Dmedia%26token%3Dfc4a8ff0-bdc4-4af2-b23d-9b9e85569890" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7d5-qVBd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-LuXs0gdNFW10bTH8ypg%252F-LuYFRJk0X44dsdkkWln%252Fimage.png%3Falt%3Dmedia%26token%3Dfc4a8ff0-bdc4-4af2-b23d-9b9e85569890" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Atualização de Registro
&lt;/h3&gt;

&lt;p&gt;Vamos fazer de conta que colocamos o sobrenome do Luciano e da Raquel errado, e precisamos atualizar esses dados. Quero mudar de Ferraz para Mascarenhas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt;
    &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt;
    &lt;span class="n"&gt;sobrenome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Mascarenhas'&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;
    &lt;span class="n"&gt;sobrenome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Ferraz'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Traduzindo o script acima fica: Atualize no schema lista_telefonica na tabela lista_telefonica para sobrenome &lt;em&gt;Mascarenhas&lt;/em&gt; onde sobrenome está &lt;em&gt;Ferraz&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R4IBDwJy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-LuXs0gdNFW10bTH8ypg%252F-LuZ-q79QYXePLl05Mb8%252Fimage.png%3Falt%3Dmedia%26token%3Db78254c5-fd77-4488-96c1-ae8b8041e674" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R4IBDwJy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-LuXs0gdNFW10bTH8ypg%252F-LuZ-q79QYXePLl05Mb8%252Fimage.png%3Falt%3Dmedia%26token%3Db78254c5-fd77-4488-96c1-ae8b8041e674" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Condicionais
&lt;/h3&gt;

&lt;p&gt;Antes de mais nada, vou inserir mais dois registros na nossa lista telefônica. Observe:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lbA-Vs9_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-LuXs0gdNFW10bTH8ypg%252F-LuZ3-E18xLuPMne0fcA%252Fimage.png%3Falt%3Dmedia%26token%3D4c0e2107-a08a-47bb-b4a2-d33ff0ebf4a0" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lbA-Vs9_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-LuXs0gdNFW10bTH8ypg%252F-LuZ3-E18xLuPMne0fcA%252Fimage.png%3Falt%3Dmedia%26token%3D4c0e2107-a08a-47bb-b4a2-d33ff0ebf4a0" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mas descobrimos que o &lt;strong&gt;ddd&lt;/strong&gt; de &lt;em&gt;Jessica&lt;/em&gt; e &lt;em&gt;Giselle&lt;/em&gt; foi salvo como 22, mas é ddd 21. Vamos corrigir usando  condicional, &lt;strong&gt;where&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt;
    &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt;
    &lt;span class="n"&gt;ddd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'21'&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;
    &lt;span class="n"&gt;ddd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'22'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W2K-B8cr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-LuhmWTKPVes_bDvf_5J%252F-LuhnHCQnc_d_45ZKh3p%252Fimage.png%3Falt%3Dmedia%26token%3Df51b9de5-6dcc-418f-86d4-fba939e22ea0" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W2K-B8cr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-LuhmWTKPVes_bDvf_5J%252F-LuhnHCQnc_d_45ZKh3p%252Fimage.png%3Falt%3Dmedia%26token%3Df51b9de5-6dcc-418f-86d4-fba939e22ea0" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Ordenação
&lt;/h3&gt;

&lt;p&gt;Vamos pegar todas as colunas e registros e ordenar pelos nomes por ordem alfabética decrescente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt;
    &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt;
&lt;span class="k"&gt;order&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt;
    &lt;span class="n"&gt;nome&lt;/span&gt; &lt;span class="k"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4lSx6Dov--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-LuhnjS_xqaljCXbyMyj%252F-Luhq-rJjlTV8CbY_YJ0%252Fimage.png%3Falt%3Dmedia%26token%3Dd1edafc4-4f97-46e1-af18-ef1d1206f548" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4lSx6Dov--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-LuhnjS_xqaljCXbyMyj%252F-Luhq-rJjlTV8CbY_YJ0%252Fimage.png%3Falt%3Dmedia%26token%3Dd1edafc4-4f97-46e1-af18-ef1d1206f548" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Agrupamentos
&lt;/h3&gt;

&lt;p&gt;Antes de mais nada, vamos inserir mais alguns registros na nossa lista telefônica:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sobrenome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Ana'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Souza'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'91'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'922221111'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sobrenome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Amanda'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Silva'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'81'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'922223333'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sobrenome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Amadel'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Ferreira'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'71'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'944443333'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sobrenome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Jorge'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Cabral'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'91'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'977773333'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sobrenome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Xandi'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Lira'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'81'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'988882222'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sobrenome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Leandro'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Mariani'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'91'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'900007777'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sobrenome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Fábio'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Lopes'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'51'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'966661111'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sobrenome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Manuel'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Freitas'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'21'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'955559999'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sobrenome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Sonia'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Carvalho'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'71'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'988880000'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sobrenome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;telefone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Marta'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Estevez'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'81'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'911110000'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5NL0aYSt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-Lv6tFU2BxW57wbPtTj0%252F-Lv6wV_lQUKxU-lHjtd8%252Fimage.png%3Falt%3Dmedia%26token%3Dcb799ef0-85f6-4130-9403-8cfc3771722e" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5NL0aYSt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-Lv6tFU2BxW57wbPtTj0%252F-Lv6wV_lQUKxU-lHjtd8%252Fimage.png%3Falt%3Dmedia%26token%3Dcb799ef0-85f6-4130-9403-8cfc3771722e" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora quero agrupar todo mundo que tenha o mesmo sobrenome, ordernar por ddd e quero saber quantas pessoas têm o mesmo sobrenome. Para isso, vamos precisar de um contador.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;sobrenome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;"total agrupado"&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;
    &lt;span class="n"&gt;lista_telefonica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lista_telefonica&lt;/span&gt; &lt;span class="n"&gt;lt&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt;
    &lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sobrenome&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt;  
    &lt;span class="n"&gt;ddd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dgEuqAy5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-Lv6tFU2BxW57wbPtTj0%252F-Lv6wrvC6ZI_4sAKHVxw%252Fimage.png%3Falt%3Dmedia%26token%3D66d2772a-3c84-48bc-adf1-c9ecb40bc240" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dgEuqAy5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%252F-LtBlzfJpOHzLhCvqiJx%252F-Lv6tFU2BxW57wbPtTj0%252F-Lv6wrvC6ZI_4sAKHVxw%252Fimage.png%3Falt%3Dmedia%26token%3D66d2772a-3c84-48bc-adf1-c9ecb40bc240" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bom, é isso. Espero que tenham curtido. Aceito todo tipo de feedback.&lt;br&gt;
Compartilhem com seus amigos.&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>sql</category>
      <category>postgres</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
