<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivo para SQL Server - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/tag/sql-server/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/tag/sql-server/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Fri, 27 Sep 2024 11:26:10 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>Funções de Manipulação de Strings no SQL Server</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 27 Sep 2024 11:22:05 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">https://www.bosontreinamentos.com.br/?p=20294</guid>

					<description><![CDATA[<p>Manipulação de Strings no SQL Server A Manipulação de Strings (cadeias de caracteres) é uma tarefa trivial em bancos de dados e programação em geral. Tarefas como contar caracteres de uma string, converter letras de maiúsculas para minúsculas e vice-versa, obter partes de uma palavra ou frase, limpar caracteres indesejados e diversas outras são realizadas de forma corriqueira para tratar os dados que são armazenados e consultados em bancos de dados. Os SGBDs possuem, normalmente, diversas funções internas que permitem realizar essas tarefas, e o Microsoft SQL Server possui um bom conjunto de funções de manipulação de strings disponível. Neste artigo, veremos algumas das funções para manipular caracteres mais comuns presentes no SQL Server, com suas sintaxes, aplicações e exemplos práticos de uso. Funções de Manipulação de Strings no SQL Server As funções que serão vistas nesse artigo são as seguintes: Função LEN Função LOWER Função UPPER Função LTRIM Função RTRIM Função TRIM Função LEFT Função RIGHT Função REPLACE Função SUBSTRING Função CONCAT Função LEN A função LEN, do inglês &#8220;length&#8221; (&#8220;comprimento&#8221;), é uma das funções de manipulação de strings no SQL Server mais utilizadas, sendo empregada para retornar o número de caracteres de uma string, ou seja, seu comprimento. [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/">Funções de Manipulação de Strings no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Manipulação de Strings no SQL Server</h1>
<p>A Manipulação de Strings (cadeias de caracteres) é uma tarefa trivial em <a href="https://www.bosontreinamentos.com.br/category/bancos-de-dados/">bancos de dados</a> e programação em geral. Tarefas como contar caracteres de uma string, converter letras de maiúsculas para minúsculas e vice-versa, obter partes de uma palavra ou frase, limpar caracteres indesejados e diversas outras são realizadas de forma corriqueira para tratar os dados que são armazenados e consultados em bancos de dados.</p>
<p>Os SGBDs possuem, normalmente, diversas funções internas que permitem realizar essas tarefas, e o Microsoft SQL Server possui um bom conjunto de funções de manipulação de strings disponível.</p>
<p>Neste artigo, veremos algumas das funções para manipular caracteres mais comuns presentes no SQL Server, com suas sintaxes, aplicações e exemplos práticos de uso.</p>
<h2>Funções de Manipulação de Strings no SQL Server</h2>
<p>As funções que serão vistas nesse artigo são as seguintes:</p>
<ul>
<li><a href="#len">Função LEN</a></li>
<li><a href="#lower-right">Função LOWER</a></li>
<li><a href="#lower-right">Função UPPER</a></li>
<li><a href="#trim-rtrim-ltrim">Função LTRIM</a></li>
<li><a href="#trim-rtrim-ltrim">Função RTRIM</a></li>
<li><a href="#trim-rtrim-ltrim">Função TRIM</a></li>
<li><a href="#left-right">Função LEFT</a></li>
<li><a href="#left-right">Função RIGHT</a></li>
<li><a href="#replace">Função REPLACE</a></li>
<li><a href="#substring">Função SUBSTRING</a></li>
<li><a href="#concat">Função CONCAT</a></li>
</ul>
<h2 id="len">Função LEN</h2>
<div>A função LEN, do inglês &#8220;length&#8221; (&#8220;comprimento&#8221;), é uma das funções de manipulação de strings no SQL Server mais utilizadas, sendo empregada para retornar o número de caracteres de uma string, ou seja, seu comprimento. Geralmente a usamos em consultas SQL para validar e manipular dados textuais, como verificar o número de caracteres em uma senha ou em um código.</div>
<div> </div>
<div>Sintaxe</div>
<pre><span style="color: #800080;"><strong>LEN(<em>expressão</em>)</strong></span></pre>
<div>Onde <em>expressão</em> é a string ou coluna de texto cujo comprimento se deseja calcular.</div>
<div> </div>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Contar o número de caracteres nos títulos de livros</strong></div>
<div> </div>
<div>Este exemplo consulta a tabela Livro e retorna os nomes dos livros juntamente com a contagem de caracteres de cada título.</div>
<pre><strong>SELECT NomeLivro, LEN(NomeLivro) 'Tamanho do Título'</strong>
<strong>FROM Livro;</strong></pre>
<div><strong>Exemplo 2: Validar o comprimento do ISBN13</strong></div>
<div> </div>
<div>O ISBN13 deve conter exatamente 13 caracteres. Podemos usar a função LEN para verificar se algum registro na tabela Livro possui um ISBN com um número incorreto de caracteres:</div>
<pre>SELECT NomeLivro, ISBN13, LEN(ISBN13) AS 'Tamanho do ISBN'
FROM Livro
WHERE LEN(ISBN13) &lt;&gt; 13;</pre>
<div>Essa consulta retornará todos os livros cujo campo ISBN13 não contém exatamente 13 caracteres, indicando assim possíveis erros de inserção.</div>
<div> </div>
<div>
<div><strong>Exemplo 3:  Qual livro tem o título mais curto?</strong></div>
<pre>SELECT Nome_Livro, LEN(Nome_Livro)  'Tamanho do Título'
FROM tbl_Livro
WHERE LEN(Nome_Livro) = (
    SELECT MIN(LEN(Nome_Livro))
    FROM tbl_Livro
);</pre>
</div>
<div>Serão retornados os nomes dos livros que possuam o título mais curto. Para isso, combinamos a função LEN com a <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/19-t-sql-funcoes-agregadas-sum-count-max-min-avg-sql-server/">função de agregação</a> MIN em uma subconsulta.</div>
<div> </div>
<div><strong>Exemplo 4: Ordenar livros pelo comprimento do título</strong></div>
<div> </div>
<div>Também podemos ordenar os resultados de uma consulta com base no comprimento de uma string, como no exemplo a seguir, que lista os livros com os títulos mais curtos primeiro.</div>
<pre>SELECT NomeLivro
FROM Livro
ORDER BY LEN(NomeLivro) ASC;</pre>
<div><strong>Exemplo 5:  Retornar as editoras cujos nomes tenham um tamanho fixo</strong></div>
<div> </div>
<div>Se quisermos localizar editoras cujo nome contém exatamente 10 caracteres, podemos usar a seguinte consulta:</div>
<pre>SELECT NomeEditora, LEN(NomeEditora) AS Tamanho_Nome
FROM Editora
WHERE LEN(NomeEditora) = 10;</pre>
<div>Esse tipo de análise pode ser útil para verificar padrões de nomenclatura ou para fins de organização.</div>
<div> </div>
<div><strong>Exemplo 6: Exibir autores com nomes longos</strong></div>
<div> </div>
<div>Podemos usar a função LEN para identificar autores que possuem nomes ou sobrenomes extensos.</div>
<pre>SELECT NomeAutor, SobrenomeAutor, LEN(NomeAutor) + LEN(SobrenomeAutor) AS 'Tamanho do Nome Completo'
FROM Autor
WHERE (LEN(NomeAutor) + LEN(SobrenomeAutor)) &gt; 20;</pre>
<div>Essa consulta retornará os autores cujo nome completo (nome + sobrenome) contém mais de 20 caracteres.</div>
<div> </div>
<h2 id="lower-right">Funções LOWER e UPPER</h2>
<div>As funções LOWER e UPPER permitem converter os caracteres de uma string para letras minúsculas e maiúsculas, respectivamente.</div>
<div> </div>
<div>Sintaxes</div>
<pre><span style="color: #800080;">LOWER(<em>expressão</em>)
UPPER(<em>expressão</em>)</span></pre>
<div>Onde <em>expressão</em> é o texto ou coluna de texto que se deseja transformar em minúsculas ou maiúsculas.</div>
<div> </div>
<div><strong>Exemplo 1: Converter nomes de livros para minúsculas</strong></div>
<div> </div>
<div>Este exemplo consulta a tabela Livro e retorna os títulos dos livros em letras minúsculas.</div>
<pre>SELECT NomeLivro, LOWER(NomeLivro) AS 'Nome Minúsculo'
FROM Livro;</pre>
<div>O resultado exibirá o nome original do livro ao lado de sua versão em minúsculas, útil quando se deseja padronizar a exibição dos títulos.</div>
<div> </div>
<div><strong>Exemplo 2: Comparar títulos de livros sem distinção de maiúsculas/minúsculas</strong></div>
<div> </div>
<div>Para verificar a existência de um livro independentemente do uso de maiúsculas ou minúsculas, pode-se utilizar LOWER na condição de uma consulta.</div>
<pre>SELECT NomeLivro
FROM Livro
WHERE LOWER(NomeLivro) = 'a arte da eletrônica';</pre>
<div>Essa consulta permitirá encontrar o livro &#8220;A Arte da Eletrônica&#8221; mesmo que seu título esteja registrado com diferentes combinações de maiúsculas e minúsculas.</div>
<div> </div>
<div><strong>Exemplo 3: Padronizar assuntos em letras maiúsculas</strong></div>
<div> </div>
<div>Se os registros na tabela Assunto contiverem uma mistura de letras maiúsculas e minúsculas, podemos usar UPPER para padronizar a exibição desses dados.</div>
<pre>SELECT UPPER(NomeAssunto) AS Assunto
FROM Assunto;</pre>
<div>Essa prática pode facilitar a leitura e garantir que os dados sejam exibidos de forma uniforme em relatórios ou interfaces.</div>
<div> </div>
<div><strong>Exemplo 4: Inserir novos registros padronizados</strong></div>
<div> </div>
<div>Ao inserir novos registros em uma tabela, podemos usar UPPER ou LOWER para garantir que o valor seja armazenado no banco de dados de forma padronizada.</div>
<div> </div>
<div>Exemplo de inserção de um novo autor com o nome e sobrenome convertidos para letras maiúsculas:</div>
<pre>INSERT INTO Autor (NomeAutor, SobrenomeAutor)
VALUES (UPPER('Fábio'), UPPER('dos Reis'));</pre>
<div>Essa técnica pode ajudar a evitar discrepâncias no banco de dados, onde o mesmo nome pode ser inserido com diferentes formas de capitalização.</div>
<div> </div>
<div><strong>Exemplo 5: Converter os nomes e sobrenomes de autores para maiúsculas</strong></div>
<div> </div>
<div>Neste exemplo, podemos exibir os nomes completos dos autores (nome e sobrenome) em letras maiúsculas para um formato mais padronizado.</div>
<pre>SELECT NomeAutor, SobrenomeAutor,
    UPPER(NomeAutor) AS NomeMaiusculo,
    UPPER(SobrenomeAutor) AS SobrenomeMaiusculo
FROM Autor;</pre>
<div>Esse formato é útil quando se deseja uma apresentação visual consistente de dados textuais.</div>
<div> </div>
<h2 id="trim-rtrim-ltrim">Funções LTRIM, RTRIM e TRIM</h2>
<div>As funções LTRIM, RTRIM e TRIM são usadas para remover espaços em branco (ou caracteres específicos) no início, no final ou em ambos os lados de uma string. Úteis quando se deseja limpar ou padronizar dados textuais.</div>
<div> </div>
<div>Sintaxes</div>
<pre><span style="color: #800080;">LTRIM(expressão)</span>
<span style="color: #800080;">RTRIM(expressão)</span>
<span style="color: #800080;">TRIM([caracteres FROM] expressão)</span></pre>
<div>Onde:</div>
<ul>
<li><strong>expressão</strong>: string que será modificada.</li>
<li><strong>caracteres</strong>: Caracteres que se deseja remover. Se omitido, remove espaços em branco.</li>
</ul>
<div> </div>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Remover espaços em branco no início dos nomes de livros</strong></div>
<div> </div>
<div>Se houver registros na tabela Livro com espaços em branco antes do nome do livro, podemos usar LTRIM em uma consulta para remover esses espaços ao exibi-los.</div>
<pre>SELECT NomeLivro, LTRIM(NomeLivro) 'Nome Ajustado'
FROM Livro;</pre>
<div>Neste exemplo, a consulta retornará o nome original do livro e sua versão sem os espaços em branco no início. Isso é útil para garantir que os dados sejam exibidos de forma consistente.</div>
<div> </div>
<div>Exemplo 2: Remover espaços antes do sobrenome dos autores</div>
<div>Se os sobrenomes dos autores contiverem espaços em branco indesejados no início, podemos usar LTRIM para remover esses espaços.</div>
<div> </div>
<div>SELECT SobrenomeAutor, LTRIM(SobrenomeAutor) AS SobrenomeAjustado</div>
<div>FROM Autor;</div>
<div> </div>
<div>Isso garante que os sobrenomes sejam exibidos corretamente, sem espaços extras no início.</div>
<div> </div>
<div><strong>Exemplo 2: Remover espaços em branco no final dos nomes de editoras</strong></div>
<div> </div>
<div>Caso algum nome de editora na tabela Editora tenha sido registrado com espaços em branco no final, RTRIM pode ser usado para corrigir isso.</div>
<pre>SELECT NomeEditora, RTRIM(NomeEditora) AS 'Nome da Editora Ajustado'
FROM Editora;</pre>
<div>Neste exemplo, o nome da editora será retornado sem os espaços extras no final, garantindo que os dados estejam corretamente formatados.</div>
<div> </div>
<div>Exemplo 5: Remover espaços em branco no início e no final dos títulos de livros ao mesmo tempo</div>
<div> </div>
<div>Para garantir que os títulos dos livros na tabela Livro estejam sem espaços em branco no início e no final em ua consulta, podemos usar a função TRIM.</div>
<pre>SELECT NomeLivro, TRIM(NomeLivro) AS NomeLivroAjustado
FROM Livro;</pre>
<div>Isso remove qualquer espaço em branco extra no início e no final do título dos livros, garantindo que os dados estejam limpos.</div>
<div> </div>
<div><strong>Exemplo 3: Remover caracteres específicos de uma string</strong></div>
<div> </div>
<div>A função TRIM também pode ser usada para remover outros caracteres além dos espaços em branco. Suponha que, por algum motivo, os títulos de alguns livros foram armazenados com um caractere de asterisco (*) no início e no final. Podemos usar TRIM para remover esses caracteres.</div>
<pre>SELECT NomeLivro, TRIM('*' FROM NomeLivro) AS NomeLivroLimpo
FROM Livro;</pre>
<div>Esse exemplo remove os asteriscos do início e do final dos nomes dos livros, garantindo que apenas o título adequado seja exibido.</div>
<div> </div>
<div><strong>Exemplo 4: Atualizar registros para remover espaços indesejados</strong></div>
<div> </div>
<div>Ao identificar espaços em branco indesejados nos dados, podemos usar as funções LTRIM, RTRIM e TRIM em uma cláusula UPDATE para corrigir permanentemente os valores no banco de dados.</div>
<div> </div>
<div>Por exemplo, para remover espaços no início e no final dos nomes das editoras cadastradas, alterando esses dados na tabela, podemos usar TRIM:</div>
<pre>UPDATE Editora
SET NomeEditora = TRIM(NomeEditora);</pre>
<div>Esse comando atualiza todos os registros da tabela Editora, removendo qualquer espaço extra no início ou no final dos nomes. Note que não usamos cláusula WHERE aqui, pois queremos que a atualização seja aplicada a todas as linhas da tabela.</div>
<div> </div>
<div><strong>Exemplo 5: Inserir dados sem espaços indesejados</strong></div>
<div> </div>
<div>Ao inserir novos dados, também é possível utilizar TRIM para garantir que os valores sejam armazenados corretamente. Por exemplo, ao cadastrar um novo autor, podemos garantir que o nome e sobrenome sejam armazenados sem espaços indesejados porventura digitados pelo usuário:</div>
<pre>INSERT INTO Autor (NomeAutor, SobrenomeAutor)
VALUES (TRIM(' Fábio '), TRIM(' dos Reis '));</pre>
<div>Essa técnica impede que valores com espaços indesejados sejam armazenados no banco de dados.</div>
<div> </div>
<h2 id="left-right">Funções LEFT e RIGHT</h2>
<div>As funções LEFT e RIGHT são usadas para extrair partes de uma string, com base no número de caracteres contados a partir da esquerda ou da direita, respectivamente.</div>
<div> </div>
<div>A função LEFT retorna os primeiros &#8220;n&#8221; caracteres de uma string, a partir da esquerda. Já a função RIGHT retorna os últimos &#8220;n&#8221; caracteres de uma string, contados a partir da direita.</div>
<div> </div>
<div>Sintaxes:</div>
<pre><span style="color: #800080;">LEFT(string, número_de_caracteres)</span></pre>
<div>onde:</div>
<ul>
<li><strong>string</strong>: A string original da qual se deseja extrair os caracteres.</li>
<li><strong>número_de_caracteres</strong>: O número de caracteres a ser extraído, começando pela esquerda.</li>
</ul>
<pre><span style="color: #800080;">RIGHT(string, número_de_caracteres)</span></pre>
<div><strong>Exemplo 1: Extrair os 4 últimos caracteres do ISBN com RIGHT</strong></div>
<div> </div>
<div>Em nosso banco de dados, a tabela Livro contém a coluna ISBN13, que armazena o número ISBN dos livros. Podemos querer extrair os últimos 4 caracteres do ISBN para identificar o título e dígito verificador da obra.</div>
<pre>SELECT ISBN13,
    RIGHT(ISBN13, 4) AS 'Título e DV'
FROM Livro;</pre>
<div><strong>Exemplo 2: Extrair as iniciais dos nomes dos autores</strong></div>
<div> </div>
<div>Na tabela Autor, temos os nomes armazenados na coluna NomeAutor. Caso queiramos extrair os primeiros 2 caracteres dos nomes dos autores, podemos usar a função LEFT.</div>
<pre>SELECT NomeAutor,
    LEFT(NomeAutor, 2) AS 'Iniciais Autor'
FROM Autor;</pre>
<div><strong>Exemplo 3: Extrair o ano de publicação com LEFT</strong></div>
<div> </div>
<div>Caso a data de publicação dos livros esteja armazenada na coluna DataPub no formato YYYY-MM-DD, podemos usar a função LEFT para extrair o ano da publicação (os 4 primeiros dígitos internamente).</div>
<pre>SELECT NomeLivro,
    LEFT(CAST(DataPub AS VARCHAR), 4) AS AnoPublicacao
FROM Livro;</pre>
<div>Na verdade o ideal, neste caso, seria usar uma função de manipulação de datas, que é mais adequado.</div>
<div> </div>
<h2 id="replace">Função REPLACE</h2>
<div>A função REPLACE é usada para substituir todas as ocorrências de uma substring por outra dentro de uma string. É útil para realizar transformações em dados de texto.</div>
<div> </div>
<div>Sintaxe</div>
<pre><span style="color: #993366;">REPLACE(string_original, substring_antiga, substring_nova)</span></pre>
<div>onde:</div>
<ul>
<li><strong>string_original:</strong> A string na qual a substituição será realizada.</li>
<li><strong>substring_antiga</strong>: O texto que será substituído.</li>
<li><strong>substring_nova</strong>: O novo texto que substituirá a substring antiga.</li>
</ul>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Trocar todas as ocorrências de &#8220;Server 2010&#8221; por &#8220;Server 2020&#8221; nos nomes dos livros</strong></div>
<pre><strong>UPDATE Livro</strong>
<strong>SET NomeLivro = REPLACE(NomeLivro, '2010', '2020')</strong>
<strong>WHERE NomeLivro LIKE '%Server 2010%';</strong>
<span style="color: #339966;"><strong>-- Teste:</strong></span>
<strong>SELECT * FROM Livro;</strong></pre>
<div><strong>Exemplo 2: Remover traços do ISBN dos livros</strong></div>
<div> </div>
<div>Se os números de ISBN dos livros forem inseridos com traços (por exemplo, 978-85-254-0417-9), pode ser necessário removê-los para padronizar o formato. Podemos usar a função REPLACE para remover os traços.</div>
<div>
<pre>UPDATE Livro
SET ISBN13 = REPLACE(ISBN13, '-', '')
WHERE ISBN13 LIKE '%-%';</pre>
</div>
<div>Neste caso, mandamos substituir os traços por nada, denotado pelas aspas simples sem conteúdo (nem mesmo um espaço em branco) no terceiro parâmetro passado à função.</div>
<div> </div>
<h2 id="substring">Função SUBSTRING</h2>
<div>A função SUBSTRING é utilizada para extrair uma parte de uma string a partir de uma posição inicial e com um comprimento específico. Permite selecionar trechos de texto dentro de colunas de tipos de caracteres, como VARCHAR, CHAR, TEXT</div>
<div> </div>
<div>Sintaxe</div>
<pre><span style="color: #800080;">SUBSTRING(expressão, início, comprimento)</span></pre>
<div>onde:</div>
<ul>
<li><strong><em>expressão</em>:</strong> A expressão de string ou a coluna da qual se deseja extrair uma parte.</li>
<li><strong><em>início</em></strong>: A posição inicial (1 baseada) da extração.</li>
<li><strong><em>comprimento</em></strong>: O número de caracteres a serem extraídos.</li>
</ul>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Extrair os três primeiros caracteres de um título de livro</strong></div>
<div> </div>
<div>Suponha que queiramos extrair os três primeiros caracteres da coluna NomeLivro da tabela Livro. Esta operação pode ser útil para criar códigos ou siglas a partir dos títulos dos livros.</div>
<pre>SELECT NomeLivro, SUBSTRING(NomeLivro, 1, 3) AS SiglaLivro
FROM Livro;</pre>
<div><strong>Exemplo 2: Alterar nomes das editoras para que iniciem com uma letra maiúscula</strong></div>
<div> </div>
<div>Primeiramente vamos colocar os nomes das editoras em letras maiúsculas:</div>
<pre>UPDATE Editora
SET NomeEditora = UPPER(NomeEditora);

SELECT * FROM Editora;</pre>
<div>Agora vamos alterar os nomes das editoras para que apenas iniciem com uma letra maiúscula, com o restante do nome em minúsculas.</div>
<pre>UPDATE Editora
SET NomeEditora = UPPER(LEFT(NomeEditora, 1)) + LOWER(SUBSTRING(NomeEditora, 2, LEN(NomeEditora)))
WHERE NomeEditora IS NOT NULL;</pre>
<div><strong>3. Extrair o ano de publicação a partir da coluna DataPub</strong></div>
<div> </div>
<div>No caso da coluna DataPub que armazena a data de publicação dos livros no formato YYYY-MM-DD, pode-se usar a função SUBSTRING para extrair o ano diretamente a partir da string da data. Vamos considerar que a coluna DataPub seja uma VARCHAR.</div>
<pre>SELECT NomeLivro, DataPub, SUBSTRING(DataPub, 1, 4) AS AnoPublicacao
FROM Livro;</pre>
<div>Uma outra alternativa para executar esta tarefa é usar funções de manipulação de <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/tipos-de-data-e-hora-no-sql-server/">data e hora</a>, que possuem recursos mais adequados para o tratamento deste tipo de dado.</div>
<div> </div>
<h2 id="concat">Função CONCAT</h2>
<div>Uma das funções de manipulação de strings mais usadas no SQL Server, a função CONCAT permite concatenar (unir) duas ou mais strings em uma única string. Útil quando precisamos combinar dados de diferentes colunas ou acrescentar textos adicionais para formar uma nova informação.</div>
<div> </div>
<div>Esta função aceita múltiplos parâmetros, as strings a serem unidas. O SQL Server converte automaticamente os valores não strings em texto</div>
<div> </div>
<div>Sintaxe</div>
<pre><span style="color: #800080;">CONCAT(valor1, valor2, valor3, ...)</span></pre>
<div>onde:</div>
<ul>
<li><em><strong>valor1, valor2, &#8230;</strong></em>: Valores que serão concatenados. Podem ser colunas, literais ou expressões.</li>
</ul>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Concatenação simples de strings.</strong></div>
<pre>SELECT CONCAT('Fábio ', 'dos Reis') AS 'Nome Cliente';</pre>
<div><strong>Exemplo 2: Concatenar nomes e sobrenomes dos autores</strong></div>
<div> </div>
<div>A tabela Autor possui as colunas NomeAutor e SobrenomeAutor, que armazenam, respectivamente, o nome e o sobrenome dos autores. Para exibir o nome completo, podemos concatenar essas duas colunas.</div>
<pre>SELECT CONCAT(NomeAutor, ' ', SobrenomeAutor) AS 'Nome Completo do Autor'
FROM Autor;</pre>
<div><strong>Exemplo 3: Concatenar ISBN e Nome do Livro</strong></div>
<div> </div>
<div>Na tabela Livro, podemos querer criar uma coluna que mostre tanto o nome do livro quanto o número ISBN13 em uma única string, para facilitar a identificação.</div>
<pre>SELECT NomeLivro,
    ISBN13,
    CONCAT(NomeLivro, ' (ISBN: ', ISBN13, ')') AS LivroComISBN
FROM Livro;</pre>
<div><strong>Exemplo 4: Concatenar Data de Publicação Formatada</strong></div>
<div> </div>
<div>Em alguns casos, podemos querer exibir a data de publicação de um livro com um formato específico. Usando CONCAT, é possível combinar a data com outras informações para gerar um texto descritivo.</div>
<pre>SELECT NomeLivro,
    DataPub,
    CONCAT('O livro "', NomeLivro, '" foi publicado em ', DataPub) AS DescricaoPublicacao
FROM Livro;</pre>
<h3>Conclusão</h3>
<div>Neste artigo estudamos as <a href="https://learn.microsoft.com/en-us/sql/t-sql/functions/string-functions-transact-sql?view=sql-server-ver16" target="_blank" rel="noopener">funções para manipulação de strings</a> mais comuns no SQL Server, incluindo suas sintaxes e alguns exemplos de uso de cada uma delas. O SQL Server oferece uma grande quantidade de funções para a realização de diversas tarefas, além da manipulação de strings, que incluem cálculos numéricos, manipulação temporal (data e hora), funções administrativas, e muitas outras que estudaremos nos próximos artigos.</div>
<div> </div>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/">Funções de Manipulação de Strings no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Como apagar linhas de uma tabela com DELETE FROM  &#8211; SQL Server</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 11 Jul 2024 11:14:56 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">https://www.bosontreinamentos.com.br/?p=20191</guid>

					<description><![CDATA[<p>DELETE FROM &#8211; Apagar Registros no SQL Server A cláusula DELETE FROM em SQL é usada para remover registros de uma tabela. Esta cláusula permite apagar uma ou mais linhas de uma tabela com base em uma condição especificada na cláusula WHERE. Se a cláusula WHERE não for usada, todos os registros da tabela serão removidos (cuidado!!!). Sintaxe Básica DELETE FROM nome_da_tabela WHERE condição; Exemplos 1. Apagar registros específicos Se quisermos remover todos os livros da tabela Livro cujo preço é maior que R$ 100,00: DELETE FROM Livro WHERE PrecoLivro &#62; 100.00; 2. Apagar todas as linhas de uma tabela Podemos remover todos os registros da tabela Autor, deixando a tabela vazia: DELETE FROM Autor; Observações importantes Integridade Referencial: Ao excluir registros que são referenciados por chaves estrangeiras em outras tabelas, é importante considerar as restrições de integridade referencial para evitar a violação dessas restrições. Backups: Antes de executar operações de exclusão em massa, é altamente recomendável fazer backup dos dados, pois a operação de DELETE é irreversível (não tem Ctrl+Z!!!). Performance: Para limpar totalmente tabelas grandes, operações de DELETE podem ser lentas e consumir muitos recursos. Em alguns casos, pode ser mais eficiente truncar a tabela (usando TRUNCATE TABLE) [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/">Como apagar linhas de uma tabela com DELETE FROM  &#8211; SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>DELETE FROM &#8211; Apagar Registros no SQL Server</h2>
<p>A cláusula <strong>DELETE FROM</strong> em SQL é usada para remover registros de uma tabela. Esta cláusula permite apagar uma ou mais linhas de uma tabela com base em uma condição especificada na <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/13-t-sql-where-filtrando-registros-em-uma-consulta-sql-server/">cláusula WHERE</a>. Se a cláusula WHERE não for usada, todos os registros da tabela serão removidos (cuidado!!!).</p>
<h3>Sintaxe Básica</h3>
<pre><span style="color: #800080;"><strong>DELETE FROM nome_da_tabela</strong></span>
<span style="color: #800080;"><strong>WHERE condição;</strong></span></pre>
<h3>Exemplos</h3>
<p>1. Apagar registros específicos</p>
<p>Se quisermos remover todos os livros da tabela Livro cujo preço é maior que R$ 100,00:</p>
<pre><strong>DELETE FROM Livro</strong>
<strong>WHERE PrecoLivro &gt; 100.00;</strong></pre>
<p>2. Apagar todas as linhas de uma tabela</p>
<p>Podemos remover todos os registros da tabela Autor, deixando a tabela vazia:</p>
<pre><strong>DELETE FROM Autor;</strong></pre>
<h3>Observações importantes</h3>
<p><strong>Integridade Referencial</strong>: Ao excluir registros que são referenciados por chaves estrangeiras em outras tabelas, é importante considerar as restrições de integridade referencial para evitar a violação dessas restrições.<br />
<strong>Backups</strong>: Antes de executar operações de exclusão em massa, é altamente recomendável fazer <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/como-realizar-backup-e-restore-no-microsoft-sql-server/">backup dos dados</a>, pois a operação de DELETE é irreversível (não tem Ctrl+Z!!!).<br />
<strong>Performance</strong>: Para limpar totalmente tabelas grandes, operações de DELETE podem ser lentas e consumir muitos recursos. Em alguns casos, pode ser mais eficiente truncar a tabela (usando <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/9-t-sql-truncate-table-excluindo-todos-os-dados-de-uma-tabela-sql-server/">TRUNCATE TABLE</a>) ou recriá-la.</p>
<p>Para saber mais sobre SQL DELETE, assista a um vídeo da Bóson Treinamentos no YouTube:</p>
<p><iframe title="YouTube video player" src="https://www.youtube.com/embed/XW37gfHvofE?si=5wu4UW_rjuYGYIgf" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/">Como apagar linhas de uma tabela com DELETE FROM  &#8211; SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Como usar os tipos de dados char, nchar, varchar e nvarchar no SQL Server</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-usar-os-tipos-de-dados-char-nchar-varchar-e-nvarchar-no-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-usar-os-tipos-de-dados-char-nchar-varchar-e-nvarchar-no-sql-server/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 04 Jul 2024 11:42:32 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[Modelagem de Dados]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=13125</guid>

					<description><![CDATA[<p>Tipos de dados char, nchar, varchar e nvarchar &#8211; SQL Server Os tipos de dados CHAR, NCHAR, VARCHAR e NVARCHAR são usados para armazenar dados de texto no SQL Server. Cada um é empregado em uma situação distinta, e saber escolher o tipo de dados adequado pode afetar a performance e o uso de espaço no banco de dados. Neste tutorial vou mostrar cada um desses tipos, suas diferenças e quando usá-los. Tipos de Texto no SQL Server Os tipos nchar e nvarchar permitem armazenar caracteres Unicode, ao passo que char e varchar não o permitem &#8211; é até possível armazenar Unicode com esses tipos, mas por meio de alguns &#8220;truques&#8221; no código. Porém, os tipos nchar e nvarchar ocupam o dobro de espaço de armazenamento. Desta forma, recomenda-se utilizá-los apenas caso seja necessário suporte a Unicode na tabela &#8211; o que é bastante comum. Os tipos char e nchar são tipos de tamanho fixo, o que significa que eles reservam espaço de armazenamento para a quantidade de caracteres que foi especificada em suas declarações, mesmo que o espaço não seja totalmente utilizado. Por exemplo, podemos criar um campo char ou nchar para 20 caracteres mas armazenar apenas 15 &#8211; [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/como-usar-os-tipos-de-dados-char-nchar-varchar-e-nvarchar-no-sql-server/">Como usar os tipos de dados char, nchar, varchar e nvarchar no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Tipos de dados char, nchar, varchar e nvarchar &#8211; SQL Server</h2>
<p>Os tipos de dados CHAR, NCHAR, VARCHAR e NVARCHAR são usados para armazenar dados de texto no SQL Server. Cada um é empregado em uma situação distinta, e saber escolher o tipo de dados adequado pode afetar a performance e o uso de espaço no banco de dados.</p>
<p>Neste tutorial vou mostrar cada um desses tipos, suas diferenças e quando usá-los.</p>
<h3>Tipos de Texto no SQL Server</h3>
<p>Os tipos nchar e nvarchar permitem armazenar caracteres Unicode, ao passo que char e varchar não o permitem &#8211; é até possível armazenar Unicode com esses tipos, mas por meio de alguns &#8220;truques&#8221; no código. Porém, os tipos nchar e nvarchar ocupam o dobro de espaço de armazenamento. Desta forma, recomenda-se utilizá-los apenas caso seja necessário suporte a Unicode na tabela &#8211; o que é bastante comum.</p>
<p>Os tipos char e nchar são tipos de tamanho fixo, o que significa que eles reservam espaço de armazenamento para a quantidade de caracteres que foi especificada em suas declarações, mesmo que o espaço não seja totalmente utilizado. Por exemplo, podemos criar um campo char ou nchar para 20 caracteres mas armazenar apenas 15 &#8211; os outros 5 que ficaram vagos irão ocupar espaço da mesma maneira.</p>
<p>Recomenda-se usar esses tipos caso os dados armazenados sempre ocupem o tamanho máximo especificado na declaração da coluna.</p>
<p>Já os tipos varchar e nvarchar são tipos de tamanho variável, de modo que o espaço ocupado corresponderá à quantidade de caracteres que efetivamente são armazenados + 2 (2 bytes de registro do comprimento &#8211; overhead), independente do tamanho máximo declarado.</p>
<h3>Características dos tipos CHAR, NCHAR, VARCHAR e NVARCHAR</h3>
<p><strong>CHAR</strong></p>
<ul>
<li>Descrição: Armazena dados de texto com comprimento fixo.</li>
<li>Tamanho: O comprimento é definido ao criar a coluna e todos os valores terão exatamente esse tamanho &#8211; ou seja, o comprimento é fixo. <em>Espaços em branco são adicionados para preencher o comprimento se necessário</em>.</li>
<li>Uso: Dados de tamanho fixo, como códigos de produtos ou identificadores.</li>
</ul>
<p><strong>NCHAR</strong></p>
<ul>
<li>Descrição: Similar ao CHAR (também comprimento fixo), mas armazena dados de texto em formato Unicode.</li>
<li>Tamanho: Cada caractere ocupa 2 bytes, permitindo armazenar caracteres de múltiplos idiomas.</li>
<li>Uso: Usado para dados de texto internacionalizados ou quando é necessário suportar vários idiomas.</li>
</ul>
<p><strong>VARCHAR</strong></p>
<ul>
<li>Descrição: Armazena dados de texto com comprimento variável.</li>
<li>Tamanho: O comprimento máximo é definido ao criar a coluna, mas apenas o espaço necessário para armazenar o valor real é utilizado. Ou seja, ocupa espaço de acordo com o valor armazenado na coluna.</li>
<li>Uso: Ideal para colunas onde os tamanhos dos valores podem variar significativamente, como nomes, descrições ou endereços.</li>
</ul>
<p><strong>NVARCHAR</strong></p>
<ul>
<li>Descrição: Similar ao VARCHAR, mas armazena dados de texto em formato Unicode.</li>
<li>Tamanho: Cada caractere ocupa 2 bytes, semelhante ao NCHAR, mas o espaço é utilizado de forma mais eficiente para comprimentos variáveis.</li>
<li>Uso: Usado para dados de texto internacionalizados ou quando é necessário suportar vários idiomas, com comprimentos variáveis.</li>
</ul>
<h3>Performance dos tipos de texto</h3>
<p>Com relação à performance desses tipos de texto no SQL Server, temos que:</p>
<ul>
<li>CHAR e NCHAR podem ser mais rápidos para acesso em colunas onde todos os valores têm tamanho fixo.</li>
<li>Já os tipos VARCHAR e NVARCHAR são mais eficientes em termos de espaço para colunas onde os tamanhos dos valores variam.</li>
</ul>
<h3>Exemplos de uso</h3>
<h4>1. Tipos CHAR e NCHAR</h4>
<p>Criamos uma tabela com dois campos, um do tipo CHAR e outro do tipo NCHAR</p>
<pre><strong>CREATE TABLE ExemploCharNChar (</strong>
<strong>Codigo CHAR(5),</strong>
<strong>Item NCHAR(10)</strong>
<strong>);</strong></pre>
<p>Inserimos uma linha de teste nessa tabela. Para o campo &#8220;Item&#8221; usarei um dado em outro idioma, inclusive com outro conjunto de caracteres &#8211; no caso, caracteres japoneses.</p>
<p>Note o caractere &#8216;N&#8217; que precede o valor a ser armazenado, para indicar ao SQL Server que se trata de um valor Unicode.</p>
<pre><strong>INSERT INTO ExemploCharNChar (Codigo, Item)</strong>
<strong>VALUES ('012', N'ピザ');</strong></pre>
<p>Consegue descobrir que item foi inserido?</p>
<p>E realizamos uma consulta para ver o dado inserido.</p>
<pre><strong>SELECT * FROM ExemploCharNChar;</strong></pre>
<p><strong>Resultado:</strong></p>
<pre><span style="color: #000000;"><strong>Codigo  Item</strong></span>
<span style="color: #000000;"><strong>012     ピザ </strong></span></pre>
<h4>2. Tipos VARCHAR e NVARCHAR</h4>
<p>Agora vamos criar outra tabela também com dois campos, um do tipo VARCHAR e outro do tipo NVARCHAR</p>
<pre><strong>CREATE TABLE ExemploVarcharNVarchar (</strong>
<strong>Descricao VARCHAR(50),</strong>
<strong>Pedido NVARCHAR(100)</strong>
<strong>);</strong></pre>
<p>Inserimos uma linha de teste nessa tabela. Para o campo &#8220;Pedido&#8221; usarei novamente um dado em idioma japonês, desta vez com mais caracteres.</p>
<pre><strong>INSERT INTO ExemploVarcharNVarchar (Descricao, Pedido)</strong>
<strong>VALUES ('Prato Típico Italiano', N'ピザが食べたい.');</strong></pre>
<p>E realizamos a consulta para ver o dado inserido.</p>
<pre><strong>SELECT * FROM ExemploVarcharNVarchar;</strong></pre>
<p><strong>Resultado:</strong></p>
<pre><span style="color: #000000;"><strong>Descricao             Pedido</strong></span>
<span style="color: #000000;"><strong>Prato Típico Italiano ピザが食べたい.</strong></span></pre>
<h3>Importante</h3>
<p>Uma dica importante é a seguinte: Hoje em dia, os sistemas operacionais e plataformas de desenvolvimento usam internamente o sistema Unicode.</p>
<p>Sendo assim, se usarmos os tipos nvarchar em vez de varchar, e nchar em vez de char, evitamos que ocorram conversões de codificação sempre que operaçoes de leitura ou escrita forem realizadas no banco de dados.</p>
<p>Essas conversões consomem recursos do servidor e podem ocasionar erros, ainda que raramente, além do que não é fácil recuperar de erros de conversão em uma tabela.</p>
<h3>Conclusão</h3>
<p>Neste tutorial estudamos os tipos de dados CHAR, NCHAR, VARCHAR e NVARCHAR no SQL Server, suas diferenças e exemplos de uso.</p>
<p>Ao escolher o tipo de dados para colunas de texto, considere o tamanho dos dados que você espera armazenar, a necessidade de suporte a múltiplos idiomas e a eficiência de armazenamento. Para texto que precisa ser armazenado em múltiplos idiomas, use os tipos <strong>NCHAR</strong> ou <strong>NVARCHAR</strong>. Para texto de tamanho fixo, use <strong>CHAR</strong>, e para tamanho variável, use <strong>VARCHAR</strong>.</p>
<p>Lembre-se:</p>
<ul>
<li>Usamos CHAR e NCHAR quando o comprimento dos dados for fixo.</li>
<li>Usamos VARCHAR e NVARCHAR quando o comprimento dos dados for variável.</li>
<li>A letra &#8216;N&#8217; antes dos tipos Unicode (NCHAR e NVARCHAR) indica que eles suportam caracteres Unicode.</li>
</ul>
<p>* <strong>ピザ</strong> significa &#8220;pizza&#8221; e <strong>ピザが食べたい</strong> significa &#8220;quero comer pizza&#8221; (&#8220;piza ga tabetai&#8221;).</p>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/como-usar-os-tipos-de-dados-char-nchar-varchar-e-nvarchar-no-sql-server/">Como usar os tipos de dados char, nchar, varchar e nvarchar no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-usar-os-tipos-de-dados-char-nchar-varchar-e-nvarchar-no-sql-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Importar arquivo CSV no SQL Server para inserir registros em uma tabela</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 21 Mar 2024 12:06:54 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">https://www.bosontreinamentos.com.br/?p=20025</guid>

					<description><![CDATA[<p>Como importar arquivo CSV no SQL Server Neste tutorial mostro como importar um arquivo no formato CSV para uma tabela de um banco de dados SQL Server, de modo a realizar a inserção de múltiplos registros de uma só vez, por meio de uma operação INSERT INTO. Para tal vamos usar dois arquivos: o arquivo CSV propriamente dito, contendo os dados a serem inseridos na tabela, e um arquivo especificador de formatos para ajustar os dados do arquivo CSV com as colunas específicas da tabela, além é claro do código SQL que executará a tarefa de inserção dos registros em bulk (vários de uma vez). O que é um arquivo CSV? Um arquivo CSV (Comma-Separated Values / Valores Separados por Vírgulas) é um tipo de arquivo de texto simples que armazena dados tabulares de forma estruturada, empregado com frequência para importar e exportar dados entre diferentes programas, sistemas e plataformas. Neste tipo de arquivo, cada linha representa uma entrada de dados (um registro) e cada campo (coluna) é separado por um caractere delimitador, geralmente uma vírgula (&#8220;,&#8221;), ponto e vírgula (&#8220;;&#8221;) ou tabulação (&#8220;tab&#8221;). O mais comum é usar a vírgula, daí o nome do formato. Cada linha no arquivo [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/">Importar arquivo CSV no SQL Server para inserir registros em uma tabela</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como importar arquivo CSV no SQL Server</h2>
<p>Neste tutorial mostro como importar um arquivo no formato CSV para uma tabela de um banco de dados SQL Server, de modo a realizar a inserção de múltiplos registros de uma só vez, por meio de uma operação <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/8-t-sql-insert-into-values-inserir-dados-nas-tabelas-sql-server/">INSERT INTO</a>.</p>
<p>Para tal vamos usar dois arquivos: o arquivo CSV propriamente dito, contendo os dados a serem inseridos na tabela, e um arquivo especificador de formatos para ajustar os dados do arquivo CSV com as colunas específicas da tabela, além é claro do código SQL que executará a tarefa de inserção dos registros em bulk (vários de uma vez).</p>
<h3>O que é um arquivo CSV?</h3>
<p>Um arquivo <strong>CSV</strong> (<em>Comma-Separated Values</em> / Valores Separados por Vírgulas) é um tipo de arquivo de texto simples que armazena dados tabulares de forma estruturada, empregado com frequência para importar e exportar dados entre diferentes programas, sistemas e plataformas.</p>
<p>Neste tipo de arquivo, cada linha representa uma entrada de dados (um registro) e cada campo (coluna) é separado por um caractere delimitador, geralmente uma vírgula (&#8220;,&#8221;), ponto e vírgula (&#8220;;&#8221;) ou tabulação (&#8220;tab&#8221;). O mais comum é usar a vírgula, daí o nome do formato.</p>
<p>Cada linha no arquivo representa um registro e os campos podem conter texto, números, datas ou outros tipos de dados quaisquer. Usamos arquivos csv em aplicativos de planilhas, bancos de dados, programas para análise de dados e diversas outras aplicações, pois são bastante simples e fáceis de manipular.</p>
<p>Vamos usar neste tutorial um arquivo CSV de nome Livros.csv, que conterá dados a serem inseridos em uma tabela de nome <strong>Livro</strong>, e com ele vamos cadastrar vários registros de forma rápida e simples.</p>
<h3>Arquivo CSV de exemplo: Livros.csv</h3>
<p>A seguir temos o conteúdo do arquivo a ser usado no exemplo de inserção de linhas na tabela. Neste arquivo, a primeira linha é uma linha de cabeçalho, contendo os nomes das colunas da tabela que receberá os dados (tabela de nome <strong>Livro</strong>), separados por vírgulas. Você deve alterar o conteúdo desse arquivo de acordo com a tabela do banco que está usando, seguindo as instruções na sequência.</p>
<p>As linhas subsequentes contém os dados em si, sendo que cada linha do arquivo corresponde a uma linha a ser inserida na tabela (um registro), também separadas por vírgulas, seguindo a mesma ordem das colunas descritas no cabeçalho:</p>
<pre><span style="color: #800080;"><strong>NomeLivro,ISBN13,DataPub,PreçoLivro,NumeroPaginas,IdEditora,IdAssunto</strong></span>
<span style="color: #800080;"><strong>2001 - Um Odisséia no Espaço,9788576571551,20200930,55.86,336,3,1</strong></span>
<span style="color: #800080;"><strong>Fahrenheit 451,9788525052247,20120601,43.56,216,3,1</strong></span>
<span style="color: #800080;"><strong>Admirável mundo novo,9788525056009,20140101,50.32,312,3,1</strong></span>
<span style="color: #800080;"><strong>1984,9788535914849,20090721,29.67,416,14,1</strong></span>
<span style="color: #800080;"><strong>A volta ao mundo em 80 dias,9788537816134,18730101,59.41,256,11,5</strong></span>
<span style="color: #800080;"><strong>O Nome da Rosa,9788501115829,20191216,51.99,592,18,5</strong></span>
<span style="color: #800080;"><strong>Memórias Póstumas de Brás Cubas,9788525433131,18810101,34.90,240,14,6</strong></span>
<span style="color: #800080;"><strong>O Evangelho Segundo Jesus Cristo,9788535905595,19910101,49.90,512,14,6</strong></span>
<span style="color: #800080;"><strong>Cidades Invisíveis,9788535907445,19720101,42.80,176,14,6</strong></span>
<span style="color: #800080;"><strong>Windows Server 2016: Installing &amp; Configuring,9781535074094,20160712,432.00,436,4,11</strong></span>
<span style="color: #800080;"><strong>Ensaio Sobre a Cegueira,9788571645118,19950101,39.90,312,14,6</strong></span>
<span style="color: #800080;"><strong>Ulisses,9780141184432,19220202,78.90,450,16,6</strong></span>
<span style="color: #800080;"><strong>Practical Electronics for Inventors,9781259587542,20160711,212.58,1056,9,3</strong></span>
<span style="color: #800080;"><strong>Eu Robô,9788576571667,19501202,35.00,300,3,1</strong></span>
<span style="color: #800080;"><strong>Dom Casmurro,9788525404186,19000101,19.90,256,14,6</strong></span></pre>
<p>Insira esse conteúdo em um arquivo de texto simples vazio, como um arquivo do bloco de notas no Windows, e salve com o nome de Livros.csv. Caso queira, acrescente mais livros à listagem. Não é necessário usar aspas para delimitar os dados do tipo VARCHAR ou DATE.</p>
<p>Obs.: Tome cuidado ao salvar o arquivo para não salvá-lo com a extensão <strong>.txt</strong>!!! Para evitar esse problema, selecione &#8220;<em>Todos os arquivos</em>&#8221; em &#8220;<em>Tipo</em>&#8221; na caixa de diálogo Salvar, e certifique-se de usar a codificação <strong>UTF-8</strong>, como segue:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-20026" title="Como salvar um arquivo no formato CSV no Bloco de Notas" src="https://www.bosontreinamentos.com.br/wp-content/uploads/2024/03/salvar-arquivo-csv-boson.jpg" alt="Como salvar um arquivo no formato CSV no Bloco de Notas" width="600" height="133" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2024/03/salvar-arquivo-csv-boson.jpg 780w, https://www.bosontreinamentos.com.br/wp-content/uploads/2024/03/salvar-arquivo-csv-boson-420x93.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2024/03/salvar-arquivo-csv-boson-768x170.jpg 768w" sizes="auto, (max-width: 600px) 100vw, 600px" /></p>
<p>A seguir criaremos o arquivo de formato XML a ser usado com esse csv.</p>
<h3>Arquivo de Formato XML</h3>
<p>Um arquivo de formato é um arquivo do tipo XML (<em>e<strong>X</strong>tensible <strong>M</strong>arkup <strong>L</strong>anguage</em>) que descreve a estrutura dos dados contidos no arquivo CSV, especificando como os campos são delimitados, o comprimento máximo de cada campo e como esses campos são mapeados para as colunas da tabela do banco de dados durante o processo de importação de dados em massa..</p>
<p>O arquivo que usaremos possui o nome formato.xml. Crie-o com um editor de textos, usando o conteúdo a seguir, e salve-o no mesmo diretório do arquivo Livros.CSV:</p>
<pre class="a-b-r-La"><strong>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
  &lt;RECORD&gt;
    &lt;FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100"/&gt;
    &lt;FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="13"/&gt;
    &lt;FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="8"/&gt;
    &lt;FIELD ID="4" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="19"/&gt;
    &lt;FIELD ID="5" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="10"/&gt;
    &lt;FIELD ID="6" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="5"/&gt;
    &lt;FIELD ID="7" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="5"/&gt;
  &lt;/RECORD&gt;
  &lt;ROW&gt;
    &lt;COLUMN SOURCE="1" NAME="NomeLivro" xsi:type="SQLVARYCHAR"/&gt;
    &lt;COLUMN SOURCE="2" NAME="ISBN13" xsi:type="SQLVARYCHAR"/&gt;
    &lt;COLUMN SOURCE="3" NAME="DataPub" xsi:type="SQLDATE"/&gt;
    &lt;COLUMN SOURCE="4" NAME="PrecoLivro" xsi:type="SQLMONEY"/&gt;
    &lt;COLUMN SOURCE="5" NAME="NumeroPaginas" xsi:type="SQLSMALLINT"/&gt;
    &lt;COLUMN SOURCE="6" NAME="IdEditora" xsi:type="SQLSMALLINT"/&gt;
    &lt;COLUMN SOURCE="7" NAME="IdAssunto" xsi:type="SQLTINYINT"/&gt;
  &lt;/ROW&gt;
&lt;/BCPFORMAT&gt;</strong></pre>
<p>O funcionamento deste arquivo é o seguinte:</p>
<ul>
<li><strong>&lt;BCPFORMAT&gt;</strong>: Elemento raiz do arquivo XML que define o formato do arquivo de dados.</li>
<li><strong>&lt;RECORD&gt;</strong>: Define a estrutura de cada registro (linha) no arquivo CSV.</li>
<li><strong>&lt;FIELD&gt;</strong>: Define os campos (colunas) do registro. Cada tag <strong>&lt;FIELD&gt;</strong> especifica o identificador do campo (ID), o tipo de terminador que separa os campos (TERMINATOR), e o comprimento máximo (MAX_LENGTH) do campo.</li>
<li><strong>&lt;ROW&gt;</strong>: Define a correspondência entre os campos do arquivo CSV e as colunas da tabela do banco de dados.</li>
<li><strong>&lt;COLUMN&gt;</strong>: Especifica como cada campo do arquivo CSV (<em>SOURCE</em>) é mapeado para uma coluna na tabela do banco de dados (<em>NAME</em>). Além disso, define o tipo de dados da coluna (xsi:type), que pode ser:
<ul>
<li><strong>SQLVARYCHAR</strong> para strings</li>
<li><strong>SQLDATE</strong> para datas</li>
<li><strong>SQLMONEY</strong> para valores monetários</li>
<li><strong>SQLSMALLINT</strong> para números inteiros pequenos</li>
<li><strong>SQLTINYINT</strong> para números inteiros muito pequenos.</li>
</ul>
</li>
</ul>
<h3>Código SQL</h3>
<p>E a seguir temos o código SQL que deverá ser executado no SQL Server, por exemplo usando o SSMS (SQL Server Management Studio):</p>
<pre><strong>INSERT INTO Livro (NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora, IdAssunto)</strong>
<strong>SELECT </strong>
<strong>    NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora, IdAssunto</strong>
<strong>FROM OPENROWSET(</strong>
<strong>    BULK 'C:\SQL\Livros.CSV',</strong>
<strong>    FORMATFILE = 'C:\SQL\Formato.xml',</strong>
<strong>CODEPAGE = '65001',  -- UTF-8</strong>
<strong>FIRSTROW = 2</strong>
<strong>) AS LivrosCSV;</strong></pre>
<div>O código opera da seguinte forma:</div>
<div>
<p>1. A linha &#8220;<strong>INSERT INTO Livro (NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora, IdAssunto)</strong>&#8221; é a declaração SQL usada para inserir os dados na tabela Livro. Serão preenchidos os campos NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora e IdAssunto.</p>
<p>2. O comando &#8220;<strong>SELECT NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora, IdAssunto</strong>&#8221; determina quais colunas do arquivo CSV serão selecionadas para inserção na tabela de livros.</p>
<p>3. &#8220;<strong>FROM OPENROWSET(BULK &#8216;C:\SQL\Livros.CSV&#8217;, FORMATFILE = &#8216;C:\SQL\Formato.xml&#8217;, CODEPAGE = &#8216;65001&#8217;, FIRSTROW = 2)</strong>&#8220;: Aqui, estamos usando a função OPENROWSET para abrir e ler o arquivo CSV especificado. Os parâmetros desta função são:</p>
<ul>
<li><strong>BULK &#8216;C:\SQL\Livros.CSV&#8217;</strong>: Indica o caminho do arquivo CSV que será lido (no caso o arquivo está na pasta SQL dentro da raiz do sistema).</li>
<li><strong>FORMATFILE = &#8216;C:\SQL\Formato.xml</strong>&#8216;: Especifica o arquivo de formato XML que descreve a estrutura do arquivo CSV. Este arquivo de formato é utilizado para especificar detalhes sobre o layout do arquivo CSV, como a ordem das colunas e o delimitador utilizado.</li>
<li><strong>CODEPAGE = &#8216;65001&#8217;</strong>: Define a codificação de caracteres a ser usada durante a leitura do arquivo CSV. Neste caso, o valor 65001 representa a codificação UTF-8.</li>
<li><strong>FIRSTROW = 2</strong>: Indica que a leitura do arquivo CSV começará a partir da segunda linha, de modo a ignorar o cabeçalho do arquivo CSV (que é a primeira linha).</li>
</ul>
<p>4. <strong>AS LivrosCSV;</strong>: Define um <em>alias</em> (nome de correlação) para os dados extraídos do arquivo CSV, permitindo que esses dados sejam referenciados dentro da consulta como se fossem uma tabela temporária chamada LivrosCSV. É um parâmetro obrigatório aqui.</p>
<p>Execute o comando acima no SQL Server, e, se nenhum erro for retornado, verifique a inserção dos registros com um SELECT simples:</p>
<pre><strong>SELECT * FROM Livro;</strong></pre>
</div>
<h3>Conclusão</h3>
<p>Inserir alguns poucos registros em uma tabela de banco de dados é uma tarefa simples e rápida. Porém, cadastrar muitos registros &#8211; centenas, milhares ou até mesmo milhões &#8211; pode se tornar extremamente trabalhoso e demorado, e neste caso podemos recorrer à importação em massa dos dados. Neste tutorial vimos uma forma simples de fazer isso no SQL Server: usando arquivos de texto do tipo CSV.</p>
<p>Nos próximos tutoriais veremos outras formas de importação (e também exportação) de dados em bancos de dados.</p>
<p>Prefere assistir a uma aula? Então assista ao vídeo da Bóson Treinamentos no YouTube sobre Arquivos CSV no MySQL:</p>
<p><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/5ddHcVBusQg?si=mV4STXday0y_XeLq" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/">Importar arquivo CSV no SQL Server para inserir registros em uma tabela</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>O que é SQL: Introdução e grupos de comandos &#8211; Curso de SQL Server &#8211; 01</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 09 Jun 2023 20:08:07 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/blog/?p=78</guid>

					<description><![CDATA[<p>O que é SQL &#8211; Structured Query Language SQL é uma Linguagem de Consulta Estruturada padrão para acesso a Bancos de Dados Usada em inúmeros sistemas, como MySQL, SQL Server, Oracle, Sybase, Access, DB2, PostgreSQL, etc. Cada um desses sistemas pode utilizar um &#8220;dialeto&#8221; diferente do SQL, como T-SQL (SQL Server), PL/SQL (Oracle), JET SQL (Access), etc. História Resumida do SQL Foi o matemático britânico Edgar F. Codd, no início dos anos 1970, quem propôs o famoso modelo relacional para bancos de dados e, sendo um matemático, ele formalizou diversos conceitos resultando no que chamamos de álgebra relacional e cálculo relacional. Essa álgebra e cálculo relacional eram conceitos teóricos até que empresas como a IBM e outras começaram a implementar esses conceitos em projetos internos, acadêmicos e de pesquisa. Essas empresas também queriam criar uma linguagem que fosse padrão para realizar consultas em bancos de dados relacionais. No início, foi desenvolvida uma linguagem chamada de QUEL (Querying Using the English Language / Consulta Usando a Língua Inglesa), na Universidade da Califórnia, Berkeley. Na IBM especificamente, os pesquisadores queriam criar uma linguagem própria e iniciaram um projeto de nome SQUARE (Specifying Queries Using a Relational Environment / Especificação de Consultas Usando [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/">O que é SQL: Introdução e grupos de comandos &#8211; Curso de SQL Server &#8211; 01</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2><strong>O que é SQL &#8211; Structured Query Language</strong></h2>
<ul>
<li>SQL é uma Linguagem de Consulta Estruturada padrão para acesso a Bancos de Dados</li>
<li>Usada em inúmeros sistemas, como MySQL, SQL Server, Oracle, Sybase, Access, DB2, PostgreSQL, etc.</li>
<li>Cada um desses sistemas pode utilizar um &#8220;dialeto&#8221; diferente do SQL, como T-SQL (SQL Server), PL/SQL (Oracle), JET SQL (Access), etc.</li>
</ul>
<h3>História Resumida do SQL</h3>
<p>Foi o matemático britânico <a href="https://www.bosontreinamentos.com.br/modelagem-de-dados/as-12-regras-de-codd-para-sistemas-de-bancos-de-dados-relacionais/">Edgar F. Codd</a>, no início dos anos 1970, quem propôs o famoso modelo relacional para bancos de dados e, sendo um matemático, ele formalizou diversos conceitos resultando no que chamamos de álgebra relacional e cálculo relacional.</p>
<p>Essa álgebra e cálculo relacional eram conceitos teóricos até que empresas como a IBM e outras começaram a implementar esses conceitos em projetos internos, acadêmicos e de pesquisa. Essas empresas também queriam criar uma linguagem que fosse padrão para realizar consultas em bancos de dados relacionais.</p>
<p>No início, foi desenvolvida uma linguagem chamada de <strong>QUEL</strong> (<em>Querying Using the English Language</em> / Consulta Usando a Língua Inglesa), na Universidade da Califórnia, Berkeley. Na IBM especificamente, os pesquisadores queriam criar uma linguagem própria e iniciaram um projeto de nome<strong> SQUARE</strong> (<em>Specifying Queries Using a Relational Environmen</em>t / Especificação de Consultas Usando um Ambiente Relacional).</p>
<p>Esse trabalho resultou em uma linguagem de consulta que tinha uma notação científica com subíndices e superíndices, na prática difícil de digitar em teclados de computador (da época). Para resolver isso, a linguagem foi redefinida para usar apenas caracteres padrão da língua inglesa, sendo então batizada de <strong>SEQUEL</strong>. Porém, este nome era uma marca registrada no Reino Unido, o que os impedia de usá-lo. Então, resolveram o problema simplesmente removendo as vogais da palavra SEQUEL, e assim nasceu o termo <strong>SQL</strong>. Em 1986, o SQL se tormou um padrão ISO e ANSI.</p>
<p>De forma interessante, apesar de seus desenvolvedores terem renomeado o SEQUEL para SQL, muitos continuaram a chamá-lo de &#8220;<em>sequel</em>&#8220;. E ainda hoje, muitos desenvolvedores de software e profissionais da área de bancos de dados (de língua inglesa, não no Brasil) ainda pronunciam esse nome como &#8220;sequel&#8221;. A descrição da sigla como sendo <em>Structured Query Language</em> (Linguagem de Consulta Estruturada) foi aparecer posteriormente apenas.</p>
<h3><strong>Funções Principais do SQL</strong></h3>
<ul>
<li>Permite o acesso a dados em SGBDR</li>
<li>Permite definir os dados no banco de dados e manipulá-los.</li>
<li>Pode ser embutido em outras linguagens usando módulos SQL, bibliotecas, etc.</li>
<li>Permite criar e excluir bancos de dados e tabelas.</li>
<li>Permite a criação de Visões (Exibições), Stored Procedures e Funções em um Banco de Dados.</li>
<li>Permite configurar permissões de acesso em tabelas, procedimentos e visões.</li>
</ul>
<h3><strong>Grupos de Comandos</strong></h3>
<p>Os comandos SQL podem ser divididos em quatro grupos principais:</p>
<ul>
<li>DDL</li>
<li>DML</li>
<li>DCL</li>
<li>DQL</li>
</ul>
<h3><strong>DDL – Data Definition Language</strong></h3>
<table style="height: 117px;" width="654">
<tbody>
<tr>
<td style="text-align: center; width: 80px;"><strong>Comando</strong></td>
<td style="text-align: center; width: 558px;"><strong>Descrição</strong></td>
</tr>
<tr>
<td style="width: 80px;">CREATE</td>
<td style="width: 558px;">Cria uma nova tabela, visão ou outro objeto no BD.</td>
</tr>
<tr>
<td style="width: 80px;">ALTER</td>
<td style="width: 558px;">Modifica um objeto existente no BD, como uma tabela.</td>
</tr>
<tr>
<td style="width: 80px;">DROP</td>
<td style="width: 558px;">Exclui uma tabela inteira, uma exibição de uma tabela ou outro objeto no banco de dados.</td>
</tr>
</tbody>
</table>
<h3><strong><br />
DML – Data Manipulation Language</strong></h3>
<table>
<tbody>
<tr>
<td style="text-align: center;"><strong>Comando</strong></td>
<td style="text-align: center;"><strong>Descrição</strong></td>
</tr>
<tr>
<td>INSERT</td>
<td>Cria um registro (linha)</td>
</tr>
<tr>
<td>UPDATE</td>
<td>Modifica registros</td>
</tr>
<tr>
<td>DELETE</td>
<td>Exclui registros</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3><strong>DCL – Data Control Language</strong></h3>
<table>
<tbody>
<tr>
<td style="text-align: center;"><strong>Comando</strong></td>
<td style="text-align: center;"><strong>Descrição</strong></td>
</tr>
<tr>
<td>GRANT</td>
<td>Dá privilégios a um usuário</td>
</tr>
<tr>
<td>REVOKE</td>
<td>Retira privilégios fornecidos a um usuário</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3><strong>DQL – Data Query Language</strong></h3>
<table style="height: 115px;" width="444">
<tbody>
<tr>
<td style="text-align: center;"><strong>Comando</strong></td>
<td style="text-align: center;"><strong>Descrição</strong></td>
</tr>
<tr>
<td>SELECT</td>
<td>Obtém registros especificados de uma ou mais tabelas. (consulta)</td>
</tr>
</tbody>
</table>
<p>O vídeo a seguir explica em detalhes cada um dos grupos de comandos SQL apresentados neste tutorial:</p>
<p><iframe loading="lazy" src="//www.youtube.com/embed/2kWoPT-6JqA?list=PLucm8g_ezqNqI5cW3alteV5olcMCcHYRK" width="640" height="390" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<hr />
<p><img loading="lazy" decoding="async" class="alignleft size-full wp-image-1825" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/01/Eu.png" alt="Eu" width="189" height="147" />Sobre Fábio dos Reis</p>
<p>Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Linux e Open Source em geral, Astrônomo Hobbysta e estudante de idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo.</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/">O que é SQL: Introdução e grupos de comandos &#8211; Curso de SQL Server &#8211; 01</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Como acessar bancos de dados SQL Server usando Python</title>
		<link>https://www.bosontreinamentos.com.br/programacao-em-python/como-acessar-bancos-de-dados-sql-server-usando-python/</link>
					<comments>https://www.bosontreinamentos.com.br/programacao-em-python/como-acessar-bancos-de-dados-sql-server-usando-python/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 11 May 2023 11:15:14 +0000</pubDate>
				<category><![CDATA[Programação em Python]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19396</guid>

					<description><![CDATA[<p>Tutorial de acesso a bancos de dados SQL Server usando Python A linguagem Python possui suporte a uma grande quantidade de sistemas de bancos de dados, por meio do uso de bibliotecas específicas para cada SGBD. Neste tutorial vou mostrar como usar uma biblioteca de código aberto para acessar um banco de dados Microsoft SQL Server a partir de um script em Python, realizando a conexão ao banco e, posteriormente, uma consulta simples em uma de suas tabelas. Para acessar bancos de dados SQL Server usando Python, podemos usar a biblioteca pyodbc. Esta biblioteca permite, na verdade, acessar diversos bancos de dados ODBC, sendo o SQL Server apenas um deles. Vamos ao tutorial passo a passo. Python e SQL Server 1. Instalar o driver de acesso ao SQL Server Antes de começar, precisamos instalar a biblioteca ODBC para Python. Podemos usar o pip ou o conda para instalá-la com um dos seguintes comandos: $ pip install pyodbc # ou $ conda install pyodbc 2. Importamos a biblioteca necessária e criamos uma nova conexão com o banco de dados import pyodbc # String de conexão com o banco de dados conn = pyodbc.connect('Driver={SQL Server};' 'Server=nome_servidor;' 'Database=nome_banco_dados;' 'Trusted_Connection=yes;') Substituimos nome_servidor e nome_banco_dados [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-python/como-acessar-bancos-de-dados-sql-server-usando-python/">Como acessar bancos de dados SQL Server usando Python</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Tutorial de acesso a bancos de dados SQL Server usando Python</h2>
<p>A linguagem Python possui suporte a uma grande quantidade de sistemas de bancos de dados, por meio do uso de bibliotecas específicas para cada SGBD.</p>
<p>Neste tutorial vou mostrar como usar uma biblioteca de código aberto para acessar um banco de dados Microsoft SQL Server a partir de um script em Python, realizando a conexão ao banco e, posteriormente, uma consulta simples em uma de suas tabelas.</p>
<p>Para acessar bancos de dados SQL Server usando Python, podemos usar a <a href="https://pypi.org/project/pyodbc/" target="_blank" rel="noopener">biblioteca pyodbc</a>. Esta biblioteca permite, na verdade, acessar diversos bancos de dados ODBC, sendo o SQL Server apenas um deles.</p>
<p>Vamos ao tutorial passo a passo.</p>
<h3>Python e SQL Server</h3>
<h4><strong>1. Instalar o driver de acesso ao SQL Server</strong></h4>
<p>Antes de começar, precisamos instalar a biblioteca ODBC para Python. Podemos usar o pip ou o conda para instalá-la com um dos seguintes comandos:</p>
<pre><strong>$ pip install pyodbc  <span style="color: #339966;"># ou</span>
$ conda install pyodbc</strong></pre>
<h4><strong>2. Importamos a biblioteca necessária e criamos uma nova conexão com o banco de dados</strong></h4>
<pre><strong>import pyodbc

</strong><span style="color: #339966;"><strong># String de conexão com o banco de dados</strong></span>
<strong>conn = pyodbc.connect('Driver={SQL Server};'</strong>
<strong>'Server=nome_servidor;'</strong>
<strong>'Database=nome_banco_dados;'</strong>
<strong>'Trusted_Connection=yes;')</strong></pre>
<p>Substituimos <em>nome_servidor</em> e <em>nome_banco_dados</em> pelo nome do servidor e do banco de dados ao qual desejamos nos conectar (por exemplo, <em>localhost</em> e <em>db_biblioteca</em>, respectivamente).</p>
<p>Se precisamos usar a autenticação SQL Server, em vez de autenticação do Windows, a string de conexão fica assim:</p>
<pre><strong>conn = pyodbc.connect('Driver={SQL Server};'</strong>
<strong>'Server=nome_servidor;'</strong>
<strong>'Database=nome_banco_dados;'</strong>
<strong>'UID=usuário;'</strong>
<strong>'PWD=senha')</strong></pre>
<p>Substituimos <em>usuário</em> e <em>senha</em> pelo nome de usuário e senha de acesso ao SQL Server.</p>
<h4><strong>3. Agora criamos um <a href="http://www.bosontreinamentos.com.br/sql-com-sql-server/introducao-aos-cursores-no-sql-server/">objeto do tipo cursor</a> e o empregamos para executar os comandos SQL desejados</strong></h4>
<pre><span style="color: #339966;"><strong># Criar um objeto cursor</strong></span>
<strong>cursor = conn.cursor()

</strong><span style="color: #339966;"><strong># Comando SQL a executar</strong></span>
<strong>cursor.execute('SELECT * FROM nome_tabela')

</strong><span style="color: #339966;"><strong># Buscar todos os resultados</strong></span>
<strong>for row in cursor:</strong>
<strong>    print(row)</strong></pre>
<p>Devemos substituir <em>nome_tabela</em> pelo nome da tabela que desejamos consultar. Também é possível executar comandos SQL de atualização, inserção e exclusão usando o método <strong><em>execute</em></strong>.</p>
<h4><strong>4. Por fim fechamos a conexão com o banco de dados:</strong></h4>
<pre><strong>conn.close()</strong></pre>
<p>Essa instrução irá encerrar a conexão com o banco de dados SQL Server.</p>
<h3>Exemplo completo</h3>
<p>Vamos usar o <a href="http://www.bosontreinamentos.com.br/sql-com-sql-server/3-t-sql-create-database-criar-banco-de-dados-sql-server/">banco de dados db_biblioteca</a> neste exemplo, acessando a <a href="http://www.bosontreinamentos.com.br/sql-com-sql-server/5-t-sql-create-table-criacao-de-tabelas-sql-server/">tabela de livros (tbl_livros)</a> e retornando todas as linhas dessa tabela. O servidor SQL Server em questão utiliza autenticação do Windows:</p>
<pre><strong>import pyodbc

</strong><span style="color: #339966;"><strong># Conexão com o banco de dados</strong></span>
<strong>conn = pyodbc.connect('Driver={SQL Server};'</strong>
<strong>'Server=localhost;'</strong>
<strong>'Database=db_biblioteca;'</strong>
<strong>'Trusted_Connection=yes;')

</strong><span style="color: #339966;"><strong># Criar o objeto cursor</strong></span>
<strong>cursor = conn.cursor()

</strong><span style="color: #339966;"><strong># Executar a consulta SQL</strong></span>
<strong>cursor.execute('SELECT * FROM tbl_livro')

</strong><span style="color: #339966;"><strong># Busca todos os resultados</strong></span>
<strong>for row in cursor:</strong>
<strong>    print(row)</strong></pre>
<p>Resultado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-19399" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/sql-server-python-consulta-SQL.jpg" alt="Consulta a banco SQL Server com Python e pyodbc" width="792" height="118" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/sql-server-python-consulta-SQL.jpg 792w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/sql-server-python-consulta-SQL-420x63.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/sql-server-python-consulta-SQL-768x114.jpg 768w" sizes="auto, (max-width: 792px) 100vw, 792px" /></p>
<h3>Inserir novas linhas no banco de dados</h3>
<p>E se quisermos inserir novos registros em uma tabela?</p>
<p>Neste caso podemos criar um dicionário contendo pares chave:valor representando os nomes das colunas da tabela e os respectivos dados a serem inseridos, e então criar uma consulta SQL para enviar esses dados ao banco, como no exemplo a seguir, onde eu crio um novo registro na tabela de autores:</p>
<pre><strong><span style="color: #339966;"># Criar um dicionário com os dados a inserir no banco</span>

autor = {</strong>
<strong>"ID_Autor": 10,</strong>
<strong>"Nome_Autor": "Fábio",</strong>
<strong>"Sobrenome_Autor": "dos Reis"</strong>
<strong>}

</strong><span style="color: #339966;"><strong># Criar a consulta SQL</strong></span>
<strong>sql_query = f"INSERT INTO tbl_autores (ID_Autor, Nome_Autor, Sobrenome_Autor) VALUES (?, ?, ?)"

</strong><span style="color: #339966;"><strong># Cursor para executar a consulta</strong></span>
<strong>cursor = conn.cursor()

</strong><span style="color: #339966;"><strong># Executar a consulta</strong></span>
<strong>cursor.execute(sql_query, autor["ID_Autor"], autor["Nome_Autor"], autor["Sobrenome_Autor"])

</strong><span style="color: #339966;"><strong># Confirmar a transação (comitar)</strong></span>
<strong>conn.commit()

</strong><span style="color: #339966;"><strong># Encerrar a conexão</strong></span>
<strong>conn.close()</strong></pre>
<p>No exemplo acima, o cursor é criado usando a conexão estabelecida na etapa anterior. Em seguida, a consulta é executada usando o método execute() do cursor. Certifique-se de passar os valores a serem inseridos na consulta como argumentos para o método execute().</p>
<p>Por fim, é importante confirmar a transação usando o método commit() da conexão. Se você não fizer isso, os dados inseridos não serão salvos no banco de dados.</p>
<p>É isso aí! Este foi um tutorial básico para acesso a bancos de dados SQL Server usando a linguagem Python com a biblioteca pyodbc. Existem muitas outras opções de configuração e métodos disponíveis na biblioteca pyodbc, e algumas delas serão discutidas nos próximos tutoriais dessa série.</p>
<p>.</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-python/como-acessar-bancos-de-dados-sql-server-usando-python/">Como acessar bancos de dados SQL Server usando Python</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/programacao-em-python/como-acessar-bancos-de-dados-sql-server-usando-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Comandos DML SQL e sua sintaxe</title>
		<link>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/</link>
					<comments>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 18 Nov 2022 19:53:14 +0000</pubDate>
				<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18677</guid>

					<description><![CDATA[<p>Comandos DML SQL e sua sintaxe No primeiro artigo da série sobre famílias de comandos SQL, estudamos os comandos DDL (Data Definition Language). Neste segundo artigo discuto os comandos SQL do grupo que chamamos de &#8220;comandos DML&#8221;, ou Data Manipulation Language (Linguagem de Manipulação de Dados), com a sintaxe das principais declarações e exemplos gerais. O que são comandos DML? Os comandos DML são declarações SQL para manipulação de dados em tabelas, o que inclui tarefas para inserção, atualização e exclusão de registros (linhas) em uma tabela. A tabela a seguir sumariza os comandos para manipulação de dados disponíveis em SQL: Declaração DML Descrição INSERT Cria um novo registro (linha) em uma tabela UPDATE Permite modificar registros em uma tabela DELETE Exclui um ou mais registros selecionados de uma tabela SELECT INTO Realiza uma consulta em uma tabela e inclui o resultado como um novo registro em outra tabela MERGE Combina dados de múltiplas tabelas, mesclando elementos das declarações INSERT e UPDATE. Vejamos a sintaxe e um exemplo de uso de algumas dessas declarações SQL. Comandos DML Declaração INSERT Este comando permite realizar a inserção de dados em uma tabela, por meio da criação de um novo registro. Vejamos sua sintaxe [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/">Comandos DML SQL e sua sintaxe</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Comandos DML SQL e sua sintaxe</h2>
<p>No primeiro artigo da série sobre famílias de comandos SQL, estudamos os <a href="http://www.bosontreinamentos.com.br/bancos-de-dados/comandos-ddl-sql-e-sua-sintaxe/">comandos DDL (<em>Data Definition Language</em>)</a>. Neste segundo artigo discuto os comandos SQL do grupo que chamamos de &#8220;comandos DML&#8221;, ou <em><strong>Data Manipulation Language</strong></em> (Linguagem de Manipulação de Dados), com a sintaxe das principais declarações e exemplos gerais.</p>
<h3>O que são comandos DML?</h3>
<p>Os comandos DML são declarações SQL para manipulação de dados em tabelas, o que inclui tarefas para inserção, atualização e exclusão de registros (linhas) em uma tabela.</p>
<p>A tabela a seguir sumariza os comandos para manipulação de dados disponíveis em SQL:</p>
<table style="border-collapse: collapse; width: 94.8513%; height: 139px;" border="1">
<thead>
<tr>
<td style="width: 21.3725%; text-align: center;"><strong>Declaração DML</strong></td>
<td style="width: 78.6275%; text-align: center;"><strong>Descrição</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td style="width: 21.3725%;">INSERT</td>
<td style="width: 78.6275%;">Cria um novo registro (linha) em uma tabela</td>
</tr>
<tr>
<td style="width: 21.3725%;">UPDATE</td>
<td style="width: 78.6275%;">Permite modificar registros em uma tabela</td>
</tr>
<tr>
<td style="width: 21.3725%;">DELETE</td>
<td style="width: 78.6275%;">Exclui um ou mais registros selecionados de uma tabela</td>
</tr>
<tr>
<td style="width: 21.3725%;">SELECT INTO</td>
<td style="width: 78.6275%;">Realiza uma consulta em uma tabela e inclui o resultado como um novo registro em outra tabela</td>
</tr>
<tr>
<td style="width: 21.3725%;">MERGE</td>
<td style="width: 78.6275%;">Combina dados de múltiplas tabelas, mesclando elementos das declarações INSERT e UPDATE.</td>
</tr>
</tbody>
</table>
<p>Vejamos a sintaxe e um exemplo de uso de algumas dessas declarações SQL.</p>
<div id="attachment_18684" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18684" class="wp-image-18684 size-large" title="Comandos DML em bancos de dados relacionais" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson-1024x471.png" alt="Comandos DML em bancos de dados relacionais" width="1024" height="471" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson-1024x471.png 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson-420x193.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson-768x353.png 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson.png 1198w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-18684" class="wp-caption-text">Comandos DML</p></div>
<h3>Declaração INSERT</h3>
<p>Este comando permite realizar a inserção de dados em uma tabela, por meio da criação de um novo registro.</p>
<p>Vejamos sua sintaxe geral e alguns exemplos.</p>
<h4>Sintaxe:</h4>
<pre><span style="color: #800080;"><strong>INSERT INTO nome_tabela(coluna1, coluna2, coluna3, ..., colunaN)</strong>
<strong>VALUES (valor1, valor2, valor3, ..., valorN);</strong></span></pre>
<p>Os valores são inseridos em cada coluna na ordem em que são discriminados na lista de valores em VALUES().</p>
<h4>Exemplo: Inserir dados na tabela de livros.</h4>
<pre><strong>INSERT INTO tbl_livros(Nome_Livro, Data_Pub, Preco_Livro, Genero, Autor, Editora)</strong>
<strong>VALUES</strong>
<strong>('Linux Command Line and Shell Scripting', '20150109', 68.35, 1, 5, 4),</strong>
<strong>('SSH, the Secure Shell', '20050517', 58.30, 1, 1, 2),</strong>
<strong>('Using Samba', '20031221', 61.45, 1, 2, 2),</strong>
<strong>('Practical Electronics for Inventors', '20160324', 67.80, 1, 13, 5);</strong></pre>
<h3>Declaração UPDATE</h3>
<p>Com a declaração UPDATE SQL podemos modificar o valor de uma ou mais colunas em um registro.</p>
<h4>Sintaxe</h4>
<pre><span style="color: #800080;"><strong>UPDATE tabela</strong></span>
<span style="color: #800080;"><strong>SET coluna(s) = novo_valor_armazenado</strong></span>
<span style="color: #800080;"><strong>WHERE coluna = valor_filtro;</strong></span></pre>
<p>Obs.: Se não for empregada a cláusula WHERE para filtrar os registros, TODOS os dados da coluna serão alterados para o mesmo valor!</p>
<h4>Exemplo</h4>
<p>Neste exemplo vamos alterar o nome de um livro na tabela tbl_livros, cujo ID é igual a 101, para &#8220;SSH, o Shell Seguro&#8221;:</p>
<pre><strong>UPDATE tbl_Livro</strong>
<strong>SET Nome_Livro = 'SSH, o Shell Seguro'</strong>
<strong>WHERE Id_Livro = 101;</strong></pre>
<h3>Declaração DELETE</h3>
<p>Com a cláusula DELETE podemos excluir registros específicos, indicados (filtrados) por meio de uma condição na cláusula WHERE</p>
<h4>Sintaxe</h4>
<pre><strong><span style="color: #800080;">DELETE FROM tabela</span></strong>
<strong><span style="color: #800080;">WHERE coluna = valor;</span></strong></pre>
<p>Obs.: Assim como acontece coma cláusula UPDATE, se não for empregada a cláusula WHERE para filtrar os registros, TODOS os dados da coluna serão afetados &#8211; no caso, excluídos para sempre! Cuidado!</p>
<h4>Exemplo</h4>
<p>Vamos excluir o autor da tabela de autores cujo id é igual a 5:</p>
<pre><strong>DELETE FROM tbl_autores</strong>
<strong>WHERE Id_Autor = 5;</strong></pre>
<h3>Declaração SELECT INTO</h3>
<p>Seleciona dados de uma ou mais tabelas e os insere em uma tabela diferente.</p>
<p>Pode ser usado, por exemplo, para criar cópias de backup de tabelas, ou ainda tabelas para relatório, contendo campos selecionados especialmente provenientes de várias tabelas distintas..</p>
<h4>Sintaxe</h4>
<pre><span style="color: #800080;"><strong>SELECT coluna(s)</strong></span>
<span style="color: #800080;"><strong>INTO nova_tabela</strong></span>
<span style="color: #800080;"><strong>FROM tabela_atual</strong></span>
<span style="color: #800080;"><strong>[WHERE campo = valor];</strong></span></pre>
<h4>Exemplo</h4>
<p>Criar uma tabela contendo somente os campos Nome_Livro e IdAutor, correspondentes aos livros cujo Id é maior do que 105:</p>
<pre><strong>SELECT Nome_Livro, IdAutor</strong>
<strong>INTO Livro_Autor</strong>
<strong>FROM tbl_livros</strong>
<strong>WHERE IdLivro &gt; 105;</strong></pre>
<p>É isso aí! No próximo artigo vamos explorar os comandos DQL (Data Query Language) em SQL.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/">Comandos DML SQL e sua sintaxe</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Comandos DDL SQL e sua sintaxe</title>
		<link>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-ddl-sql-e-sua-sintaxe/</link>
					<comments>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-ddl-sql-e-sua-sintaxe/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 07 Oct 2022 15:02:11 +0000</pubDate>
				<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Oracle Database]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18663</guid>

					<description><![CDATA[<p>Comandos DDL SQL e sua sintaxe Neste artigo discuto os comandos SQL do grupo que chamamos de &#8220;comandos DDL&#8221;, ou Data Definition Language (Linguagem de Definição de Dados), com a sintaxe das principais declarações e exemplos gerais. O que são comandos DDL &#8211; Data Definition Language Os comandos DDL são um subconjunto dos comandos da linguagem SQL cujo propósito é definir a estrutura de um banco de dados. Assim, esse comandos são empregados para criar, alterar e excluir objetos do banco, como tabelas, colunas e até mesmo o banco de dados em si. Os comandos DDL que estudaremos são os seguintes: CREATE ALTER DROP RENAME TRUNCATE Comandos DDL Declaração CREATE Este comando permite criar um objeto no banco, como uma nova tabela, visão, índice ou outro elemento estrutural. Vejamos sua sintaxe em diversos SGBDs e alguns exemplos. 1. Para criar um banco de dados no MySQL: CREATE DATABASE [IF NOT EXISTS] nome_banco; O uso dos colchetes na sintaxe indica que a cláusula é opcional. Por exemplo, para criar um banco de dados de nome db_MeusLivros: CREATE DATABASE IF NOT EXISTS db_MeusLivros; A sintaxe para outros sistemas de bancos de dados é a seguinte: Criar banco de dados no SQL Server: CREATE [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-ddl-sql-e-sua-sintaxe/">Comandos DDL SQL e sua sintaxe</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Comandos DDL SQL e sua sintaxe</h2>
<p>Neste artigo discuto os comandos SQL do grupo que chamamos de &#8220;comandos DDL&#8221;, ou <em><strong>Data Definition Language</strong></em> (Linguagem de Definição de Dados), com a sintaxe das principais declarações e exemplos gerais.</p>
<h3>O que são comandos DDL &#8211; Data Definition Language</h3>
<p>Os comandos DDL são um subconjunto dos comandos da linguagem SQL cujo propósito é definir a estrutura de um banco de dados. Assim, esse comandos são empregados para criar, alterar e excluir objetos do banco, como tabelas, colunas e até mesmo o banco de dados em si.</p>
<p>Os comandos DDL que estudaremos são os seguintes:</p>
<ul>
<li>CREATE</li>
<li>ALTER</li>
<li>DROP</li>
<li>RENAME</li>
<li>TRUNCATE</li>
</ul>
<div id="attachment_18687" style="width: 710px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18687" class="wp-image-18687" title="Comandos DDL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/10/comandos-ddl-bancos-dados-boson-1024x470.png" alt="Comandos DDL - Data Definition Language" width="700" height="321" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2022/10/comandos-ddl-bancos-dados-boson-1024x470.png 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/10/comandos-ddl-bancos-dados-boson-420x193.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/10/comandos-ddl-bancos-dados-boson-768x352.png 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/10/comandos-ddl-bancos-dados-boson.png 1199w" sizes="auto, (max-width: 700px) 100vw, 700px" /><p id="caption-attachment-18687" class="wp-caption-text">Comandos DDL</p></div>
<h3>Declaração CREATE</h3>
<p>Este comando permite criar um objeto no banco, como uma nova tabela, visão, índice ou outro elemento estrutural.</p>
<p>Vejamos sua sintaxe em diversos SGBDs e alguns exemplos.</p>
<h4>1. Para criar um banco de dados no MySQL:</h4>
<pre>CREATE DATABASE [IF NOT EXISTS] nome_banco;</pre>
<p>O uso dos colchetes na sintaxe indica que a cláusula é opcional.</p>
<p>Por exemplo, para criar um banco de dados de nome db_MeusLivros:</p>
<pre>CREATE DATABASE IF NOT EXISTS db_MeusLivros;</pre>
<p>A sintaxe para outros sistemas de bancos de dados é a seguinte:</p>
<p><strong>Criar banco de dados no SQL Server:</strong></p>
<pre>CREATE DATABASE nome_banco;</pre>
<p><strong>Criar banco de dados no PostgreSQL:</strong></p>
<pre>createdb nome_banco;</pre>
<h4>2. Para criar uma tabela no MySQL:</h4>
<pre>CREATE TABLE [IF NOT EXISTS] nome_tabela (
    coluna1 tipo_dado restrições,
    coluna2 tipo_dado restrições,
    colunaN tipo_dado restrições,
    [restrições extras]
);</pre>
<p>Por exemplo, para criar uma tabela de autores em um banco, contendo as colunas id de autor, nome e sobrenome:</p>
<pre>CREATE TABLE tbl_autores (
    IdAutor SMALLINT AUTO_INCREMENT,
    NomeAutor VARCHAR(30) NOT NULL,
    SobrenomeAutor VARCHAR(60) NOT NULL,
    CONSTRAINT pk_id_autor PRIMARY KEY (IdAutor)
);</pre>
<p>A sintaxe para outros sistemas de bancos de dados é a seguinte:</p>
<p><strong>Criar tabela no SQL Server:</strong></p>
<pre>CREATE TABLE [nome_banco].[nome_esquema].nome_tabela (
    coluna1 tipo_dado restrições,
    coluna2 tipo_dado restrições,
    colunaN tipo_dado restrições,
    [restrições extras]
) ON [Filegroup];</pre>
<p><strong>Criar tabela no PostgreSQL:</strong></p>
<pre>CREATE TABLE [IF NOT EXISTS] nome_tabela (
    coluna1 tipo_dado restrições,
    coluna2 tipo_dado restrições,
    colunaN tipo_dado restrições,
    [restrições extras]
);</pre>
<p><strong>Criar tabela no Oracle Database:</strong></p>
<pre>CREATE TABLE nome_esquema.nome_tabela (
    coluna1 tipo_dado restrições,
    coluna2 tipo_dado restrições,
   colunaN tipo_dado restrições,
    restrições_da_tabela
);</pre>
<p>3. Para criar um índice em uma tabela:</p>
<pre>CREATE INDEX nome_índice ON tabela(colunas);</pre>
<p>Exemplo &#8211; criar um índice na tabela de editoras, na coluna NomeEditora:</p>
<pre>CREATE INDEX idx_editora ON tbl_Editoras(NomeEditora);</pre>
<p>&nbsp;</p>
<h3>Declaração ALTER</h3>
<p>Com a declaração ALTER podemos adicionar, modificar ou excluir colunas em uma tabela. Também é possível alterar outros objetos do banco de dados, como procedimentos armazenados.</p>
<p>Sintaxe e exemplos a seguir.</p>
<p>1. Adicionar uma coluna a uma tabela existente:</p>
<pre>ALTER TABLE tabela
ADD coluna tipo_dados constraints;</pre>
<p>Exemplo &#8211; adicionar a coluna ISBN10 a uma tabela de livros, de nome tbl_livro:</p>
<pre>ALTER TABLE tbl_livro
ADD isbn10 VARCHAR(10) NOT NULL;</pre>
<p>2. Excluir uma coluna de uma tabela:</p>
<pre>ALTER TABLE nome_tabela
DROP COLUMN nome_coluna;</pre>
<p>Exemplo &#8211; excluir a coluna SobrenomeAutor da tabela de autores:</p>
<pre>ALTER TABLE tbl_autores
DROP COLUMN SobrenomeAutor;</pre>
<p>Neste caso combinamos o uso da declaração ALTER com a declaração DROP, que exclui objetos do banco de dados.</p>
<p>3. Alterar o tipo de dados de uma coluna</p>
<p>Podemos alterar colunas, por exemplo mudando o tipo de dados, com a seguinte sintaxe:</p>
<pre>ALTER TABLE nome_tabela
MODIFY COLUMN nome_coluna tipo_dado constraints;</pre>
<p>Exemplo: Vamos alterar o tipo de dado da coluna IdAutor da tabela de livros para o tipo TINYINT:</p>
<pre>ALTER TABLE tbl_livros
MODIFY COLUMN IdAutor TINYINT NOT NULL;</pre>
<p>&nbsp;</p>
<h3>Declaração DROP</h3>
<p>O comando DROP permite excluir objetos do banco de dados (lida com a estrutura ou esquema, não com os registros).</p>
<p>Sintaxe e exemplos a seguir.</p>
<p>1. Excluir um banco de dados existente:</p>
<pre>DROP DATABASE [IF EXISTS] nome_BD;</pre>
<p>2. Excluir tabelas:</p>
<pre>DROP TABLE [IF EXISTS] nome(s)_tabela(s);</pre>
<p>Exemplo: excluir a tabela de editoras:</p>
<pre>DROP TABLE IF EXISTS tbl_editoras;</pre>
<p>3. Excluir um índice configurado em uma tabela:</p>
<pre>DROP INDEX nome_índice ON tabela;</pre>
<p>Por exemplo, para excluir o índice idx_editora executamos o comando:</p>
<pre>DROP INDEX idx_editora ON tbl_Editoras;</pre>
<p>&nbsp;</p>
<h3>Declaração TRUNCATE</h3>
<p>Permite excluir todas as linhas de uma tabela (todos os registros), sem no entanto excluir a tabela em si.</p>
<p>Sintaxe e exemplos a seguir.</p>
<pre>TRUNCATE TABLE nome_tabela;</pre>
<p>Exemplo: Vamos limpar a tabela de editoras:</p>
<pre>TRUNCATE TABLE tbl_editoras;</pre>
<p>A sintaxe para outros sistemas de bancos de dados é a seguinte:</p>
<p>Limpar tabela no SQL Server:</p>
<pre>TRUNCATE TABLE [nome_banco].[esquema].nome_tabela;</pre>
<p>&nbsp;</p>
<p>É isso aí! No próximo artigo vamos explorar os <a href="http://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/">comandos DML (<em>Data Manipulation Language</em>)</a> em SQL.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-ddl-sql-e-sua-sintaxe/">Comandos DDL SQL e sua sintaxe</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-ddl-sql-e-sua-sintaxe/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>O que é uma Subconsulta SQL (Subquery)</title>
		<link>https://www.bosontreinamentos.com.br/bancos-de-dados/o-que-e-uma-subconsulta-sql-subquery/</link>
					<comments>https://www.bosontreinamentos.com.br/bancos-de-dados/o-que-e-uma-subconsulta-sql-subquery/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 18 Dec 2020 13:45:47 +0000</pubDate>
				<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=17360</guid>

					<description><![CDATA[<p>O que é uma Subconsulta SQL (Subquery) Uma subconsulta é uma consulta embutida dentro de outra consulta, de forma aninhada, passando os resultados da consulta mais interna para a consulta mais externa por meio de uma cláusula WHERE ou de uma cláusula HAVING. Desta forma, é possível restringir mais ainda os dados retornados por uma consulta, permitindo a criação de filtros bastante aprimorados. A subconsulta retorna os dados que serão empregado pela consulta &#8220;principal&#8221;, alimentando-a com informações a serem utilizadas como condições de filtragem. Podemos utilizar subconsultas não apenas em consultas com a cláusula SELECT, mas também em operações INSERT, UPDATE e DELETE. Quando usamos uma subconsulta em uma query, a subconsulta é resolvida primeiro, e então a consulta externa (principal) é resolvida de acordo com o resultado retornado pela subconsulta (subquery). Regras gerais para aplicação de subconsultas Algumas regras gerais precisam se seguidas para que seja possível empregar subconsultas. Entre elas, temos: A subconsulta pode ter apenas uma única coluna em sua cláusula SELECT, exceto quando a consulta principal tiver múltiplas colunas para comparação com as colunas selecionadas Se a subconsulta retornar mais de uma linha de dados, é necessário usar operadores de valores múltiplos, como o operador lógico [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/o-que-e-uma-subconsulta-sql-subquery/">O que é uma Subconsulta SQL (Subquery)</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>O que é uma Subconsulta SQL (Subquery)</h2>
<p>Uma subconsulta é uma consulta embutida dentro de outra consulta, de forma aninhada, passando os resultados da consulta mais interna para a consulta mais externa por meio de uma cláusula <a href="http://www.bosontreinamentos.com.br/mysql/mysql-where-filtrar-resultados-de-consultas-14/">WHERE</a> ou de uma cláusula <a href="http://www.bosontreinamentos.com.br/mysql/mysql-having-filtrando-os-resultados-do-agrupamento-27/">HAVING</a>.</p>
<p>Desta forma, é possível restringir mais ainda os dados retornados por uma consulta, permitindo a criação de filtros bastante aprimorados. A subconsulta retorna os dados que serão empregado pela consulta &#8220;principal&#8221;, alimentando-a com informações a serem utilizadas como condições de filtragem.</p>
<p>Podemos utilizar subconsultas não apenas em consultas com a cláusula <a href="http://www.bosontreinamentos.com.br/mysql/mysql-select-realizar-consultas-simples-em-tabelas-12/">SELECT</a>, mas também em operações <a href="http://www.bosontreinamentos.com.br/mysql/mysql-insert-into-inserir-dados-em-tabelas-11/">INSERT</a>, <a href="http://www.bosontreinamentos.com.br/mysql/mysql-update-modificar-registros-em-tabelas-20/">UPDATE</a> e <a href="http://www.bosontreinamentos.com.br/mysql/mysql-delete-e-truncate-table-excluir-registros-de-uma-tabela-16/">DELETE</a>.</p>
<p>Quando usamos uma subconsulta em uma query, a subconsulta é resolvida primeiro, e então a consulta externa (principal) é resolvida de acordo com o resultado retornado pela subconsulta (subquery).</p>
<h3>Regras gerais para aplicação de subconsultas</h3>
<p>Algumas regras gerais precisam se seguidas para que seja possível empregar subconsultas. Entre elas, temos:</p>
<ul>
<li>A subconsulta pode ter apenas uma única coluna em sua cláusula SELECT, exceto quando a consulta principal tiver múltiplas colunas para comparação com as colunas selecionadas</li>
<li>Se a subconsulta retornar mais de uma linha de dados, é necessário usar operadores de valores múltiplos, como o <a href="http://www.bosontreinamentos.com.br/mysql/bancos-de-dados-operadores-in-e-not-in-no-mysql/">operador lógico IN</a></li>
<li>As subconsultas são escritas dentro de parênteses</li>
<li>Não é possível usar a <a href="http://www.bosontreinamentos.com.br/mysql/mysql-order-by-consultas-com-ordenacao-13/">cláusula ORDER BY</a> em uma subconsulta &#8211; mas a consulta principal pode.</li>
<li>É possível usar uma <a href="http://www.bosontreinamentos.com.br/mysql/mysql-group-by-agrupamento-de-registros-26/">cláusula GROUP BY</a> em uma subconsulta.</li>
<li>Não podemos usar o <a href="http://www.bosontreinamentos.com.br/mysql/mysql-between-selecao-de-intervalos-em-consultas-21/">operador BETWEEN</a> com uma subconsulta (na consulta principal), mas podemos usar esse operador dentro da subconsulta.</li>
</ul>
<h3>Sintaxe Básica de uma Subconsulta SQL</h3>
<p>A sintaxe básica para a criação de uma subconsulta SQL é a seguinte:</p>
<pre><span style="color: #ff0000;"><strong>SELECT coluna(s)</strong>
<strong>FROM tabela(s)</strong>
</span><strong><span style="color: #ff0000;">WHERE coluna operador</span> <span style="color: #ff00ff;">(SELECT coluna
                       FROM tabela WHERE condições)</span>;</strong></pre>
<p>Onde operador pode ser qualquer operador lógico ou relacional, como &gt;, &lt;, &gt;= ,&lt;= ,=, &lt;&gt;, IN, NOT, AND, OR, etc.</p>
<p>Vejamos exemplos de aplicação de subconsultas SQL, usando o <a href="http://www.bosontreinamentos.com.br/curso-completo-de-mysql/" target="_blank" rel="noopener">SGBD MySQL Server</a>.</p>
<h3>1. Subconsulta com operação SELECT</h3>
<p>Vamos efetuar uma consulta à tabela de livros de nosso banco de dados db_biblioteca, retornando os livros (tbl_livro) publicados pela editora Wiley (tbl_editora), porém usando uma subconsulta em vez de usar INNER JOIN:</p>
<pre><span style="color: #ff6600;"><strong>SELECT NomeLivro, PrecoLivro, IdEditora</strong></span>
<span style="color: #ff6600;"><strong>FROM tbl_livro</strong></span>
<span style="color: #ff6600;"><strong>WHERE IdEditora =&nbsp;</strong></span>
<span style="color: #ff6600;"><strong>    (SELECT IdEditora</strong></span>
<span style="color: #ff6600;"><strong>     FROM tbl_editora</strong></span>
<span style="color: #ff6600;"><strong>     WHERE NomeEditora = 'Wiley');</strong></span></pre>
<p>Resultado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17366" title="Subconsulta SQL com MySQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/12/subconsulta-sql-mysql.jpg" alt="Subconsulta SQL com MySQL" width="448" height="65" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/12/subconsulta-sql-mysql.jpg 510w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/12/subconsulta-sql-mysql-420x61.jpg 420w" sizes="auto, (max-width: 448px) 100vw, 448px" /></p>
<h3>2. Subconsulta com operação INSERT INTO</h3>
<p>Podemos usar subconsultas também com a instrução de inserção de registros INSERT INTO, e outras instruções de linguagem de manipulação de dados (DML). Com a instrução INSERT INTO, os dados retornados por uma subconsulta são usados para realizar a inserção de um registro em outra tabela.</p>
<p>Sintaxe:</p>
<pre><strong>INSERT INTO tabela (colunas)</strong>
<strong>                   (SELECT coluna(s)</strong>
<strong>                   FROM tabela(s)</strong>
<strong>                   WHERE coluna operador valor);</strong></pre>
<p>Exemplo: Vamos criar uma tabela de exemplo chamada de LivrosAssuntos, contendo os campos ID, NomeLivro e NomeAssunto:</p>
<pre><strong>CREATE TABLE LivrosAssuntos (</strong>
<strong>  ID TINYINT PRIMARY KEY AUTO_INCREMENT,</strong>
<strong>  NomeLivro VARCHAR(50),</strong>
<strong>  NomeAssunto VARCHAR(40)</strong>
<strong>)</strong></pre>
<p>Usando uma subconsulta, vamos popular esta nova tabela com os livros que tenham mais de 600 páginas e seus respectivos assuntos:</p>
<pre><span style="color: #ff6600;"><strong>INSERT INTO LivrosAssuntos (NomeLivro, NomeAssunto)</strong></span>
<span style="color: #ff6600;"><strong>  (SELECT L.NomeLivro, A,NomeAssunto</strong></span>
<span style="color: #ff6600;"><strong>  FROM tbl_livro L</strong></span>
<span style="color: #ff6600;"><strong>  INNER JOIN tbl_assunto A</strong></span>
<span style="color: #ff6600;"><strong>    ON L.IdAssunto = A.IdAssunto</strong></span>
<span style="color: #ff6600;"><strong>  WHERE L.NumPaginas &gt;= 600);</strong></span></pre>
<p>Após executar o comando, efetuamos uma consulta à nova tabela para verificar se os dados foram inseridos com sucesso:</p>
<pre><strong>SELECT * FROM LivrosAssuntos</strong></pre>
<p>Resultado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17371 size-full" title="Inserção de dados com subconsulta SQL (subquery)" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/12/subconsultas-sql-insert-into-boson.jpg" alt="Inserção de dados com subconsulta SQL (subquery)" width="410" height="139"></p>
<h3>3. Subconsulta com operação UPDATE</h3>
<p>Também podemos usar uma subconsulta com uma instrução UPDATE, permitindo atualizar os valores de registros de uma tabela com base no resultado retornado pela subconsulta.</p>
<p>Sintaxe:</p>
<pre><strong>UPDATE tabela</strong>
<strong>SET coluna(s) = valor
WHERE coluna operador (SELECT coluna(s)
                       FROM tabela
                       WHERE coluna operador valor);</strong></pre>
<p>Exemplo:&nbsp;Vamos aumentar os preços dos livros da editora Microsoft Press em 12% usando a declaração UPDATE. Como não sabemos o ID desta editora de memória, vamos usar uma subconsulta para nos auxiliar:</p>
<pre><span style="color: #ff6600;"><strong>UPDATE tbl_livro</strong></span>
<span style="color: #ff6600;"><strong>SET PrecoLivro = PrecoLivro * 1.12</strong></span>
<span style="color: #ff6600;"><strong>WHERE IdEditora =&nbsp;</strong></span>
<span style="color: #ff6600;"><strong>    (SELECT IdEditora</strong></span>
<span style="color: #ff6600;"><strong>     FROM tbl_Editora</strong></span>
<span style="color: #ff6600;"><strong>     WHERE NomeEditora = 'Microsoft Press');</strong></span></pre>
<p>A subconsulta retorna o ID da editora de acordo com o nome da editora fornecido, e este ID é então empregado na consulta principal para aplicar a atualização nos valores dos registros desejados.</p>
<h3>4. Subconsulta com operação DELETE</h3>
<p>Finalmente, podemos usar subconsultas em instruções DELETE, selecionando o valor a ser excluído de uma tabela de acordo com o retorno da subconsulta.</p>
<p>Sintaxe:</p>
<pre><strong>DELETE FROM tabela</strong>
<strong>WHERE coluna operador (SELECT coluna
                       FROM tabela
                       WHERE coluna operador valor);</strong></pre>
<p>Exemplo: Desejamos excluir os livros publicados cujo assunto é &#8220;<strong>Dinossauros</strong>&#8220;, porém não sabemos o ID deste assunto na tabela de livros. Suponha também que não sabemos com exatidão se o nome do assunto é &#8220;Dinossauros&#8221;, &#8220;Dinossauro&#8221; (no singular), &#8220;Dinos&#8221; ou algo do gênero &#8211; apenas os lembramos que o nome do assunto começa com &#8220;Dino&#8221;:</p>
<pre><span style="color: #ff6600;"><strong>DELETE FROM tbl_livro
</strong></span><span style="color: #ff6600;"><strong>WHERE IdAssunto =
&nbsp;</strong></span> <span style="color: #ff6600;"><strong> (SELECT IdAssunto
</strong></span>   <span style="color: #ff6600;"><strong> FROM tbl_Assunto
</strong></span>   <span style="color: #ff6600;"><strong> WHERE NomeAssunto LIKE 'Dino%');</strong></span></pre>
<h3>Subconsultas encadeadas</h3>
<p>Podemos aninhar uma subconsulta dentro de outra subconsulta, da mesma maneira que uma subconsulta é aninhada dentro de uma consulta principal. Neste caso, a subconsulta mais interna é resolvida primeiro, depois a subconsulta intermediária, e finalmente o resultado é repassado para a consulta principal.</p>
<p>Sintaxe básica:</p>
<pre><span style="color: #ff0000;"><strong>SELECT coluna(s)</strong>
<strong>FROM tabela(s)</strong>
</span><strong><span style="color: #ff0000;">WHERE coluna operador</span> <span style="color: #993300;">(SELECT coluna</span></strong>
<strong><span style="color: #993300;">                       FROM tabela
                       WHERE coluna operador</span> <span style="color: #800080;">(SELECT coluna</span></strong>
<strong><span style="color: #800080;">                                              FROM tabela
                                              WHERE coluna operador valor)</span>;</strong></pre>
<p>Na prática, podemos pensar na subconsulta intermediária como fazendo o papel de uma consulta principal para a subconsulta de nível mais interno, e, assim, o processo é similar para quantos níveis de subconsultas forem aninhados.</p>
<p><em><strong>Há um limite para a quantidade das subconsultas que podem ser aninhadas?&nbsp;</strong></em></p>
<p>Isso depende muito da implementação de banco de dados que está sendo empregada. Por exemplo, o SGBDR&nbsp;<a href="https://docs.microsoft.com/en-us/sql/relational-databases/performance/subqueries" target="_blank" rel="noopener">Microsoft SQL Server suporta até 32 níveis de aninhamento</a> (subconsulta dentro de subconsulta), porém esse limite pode ser diferente em outros sistemas, muitas vezes por conta de restrições de memória disponível ou da complexidade em si das consultas. Consulte sempre a documentação do sistema em uso para saber mais a respeito.</p>
<p>Confira também o conteúdo deste tutorial em uma aula em vídeo:</p>
<p><iframe loading="lazy" src="https://www.youtube.com/embed/2qCLpE1NZ8c" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>Veja também:&nbsp;<a href="http://www.bosontreinamentos.com.br/mysql/mysql-inner-join-consultar-dados-em-duas-ou-mais-tabelas-29/">Cláusula INNER JOIN – Retornar dados de duas ou mais tabelas relacionadas</a></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/o-que-e-uma-subconsulta-sql-subquery/">O que é uma Subconsulta SQL (Subquery)</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/bancos-de-dados/o-que-e-uma-subconsulta-sql-subquery/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Tipos de Data e Hora no SQL Server</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/tipos-de-data-e-hora-no-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/tipos-de-data-e-hora-no-sql-server/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 16 Jul 2020 12:01:58 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=16405</guid>

					<description><![CDATA[<p>Tipos de Data e Hora no SQL Server Neste artigo vamos abordar o armazenamento de data e hora em bancos de dados Microsoft SQL Server. Existem seis tipos que permitem armazenar informações temporais (sobre data e/ou hora) no SQL Server. São eles: DATE TIME SMALLDATETIME DATETIME DATETIME2 DATETIMEOFFSET A seguir temos listadas as características principais de cada um desses tipos. Tipo DATE Armazena apenas a data de um evento Não é adequado caso seja necessário armazenar também o horário de um evento Formato padrão de armazenamento: AAAA-MM-DD Permite armazenar datas com valores de 0001-01-01 a 9999-12-31 Ocupa 3 bytes de espaço, e é armazenado como um valor INT O tipo DATE pode ser convertido para DATETIME, SMALLDATETIME, DATETIME2 ou ainda DATETIMEOFFSET; nesses casos, o valor de horário é ajustado para 00:00. Datas no tipo DATE não podem ser convertidas para o tipo TIME. Tipo TIME Usado para registrar o horário específico em que uma atividade ou transação ocorreu. Dados no tipo TIME independem de data Possui precisão de 100 ns, e seu valor padrão é 00:00:00. Formato padrão: hh:mm:ss[.nnnnnnn], onde a parte fracionária (frações de segundo) é representada por nnnnnnn. Faixa de valores: de 00:00:00.0000000 a 23:59:59.9999999 Ocupa 5 bytes [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/tipos-de-data-e-hora-no-sql-server/">Tipos de Data e Hora no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Tipos de Data e Hora no SQL Server</h2>
<p>Neste artigo vamos abordar o armazenamento de data e hora em bancos de dados <a href="http://www.bosontreinamentos.com.br/curso-de-microsoft-sql-server/">Microsoft SQL Server</a>. Existem seis tipos que permitem armazenar informações temporais (sobre data e/ou hora) no SQL Server. São eles:</p>
<ul>
<li>DATE</li>
<li>TIME</li>
<li>SMALLDATETIME</li>
<li>DATETIME</li>
<li>DATETIME2</li>
<li>DATETIMEOFFSET</li>
</ul>
<p>A seguir temos listadas as características principais de cada um desses tipos.</p>
<h3>Tipo DATE</h3>
<ul>
<li>Armazena apenas a data de um evento</li>
<li>Não é adequado caso seja necessário armazenar também o horário de um evento</li>
<li>Formato padrão de armazenamento: AAAA-MM-DD</li>
<li>Permite armazenar datas com valores de 0001-01-01 a 9999-12-31</li>
<li>Ocupa 3 bytes de espaço, e é armazenado como um valor INT</li>
<li>O tipo DATE pode ser convertido para DATETIME, SMALLDATETIME, DATETIME2 ou ainda DATETIMEOFFSET; nesses casos, o valor de horário é ajustado para 00:00.</li>
<li>Datas no tipo DATE não podem ser convertidas para o tipo TIME.</li>
</ul>
<h3>Tipo TIME</h3>
<ul>
<li>Usado para registrar o horário específico em que uma atividade ou transação ocorreu.</li>
<li>Dados no tipo TIME independem de data</li>
<li>Possui precisão de 100 ns, e seu valor padrão é 00:00:00.</li>
<li>Formato padrão: hh:mm:ss[.nnnnnnn], onde a parte fracionária (frações de segundo) é representada por nnnnnnn.</li>
<li>Faixa de valores: de 00:00:00.0000000 a 23:59:59.9999999</li>
<li>Ocupa 5 bytes de espaço e não é possível convertê-lo para tipo DATE.</li>
<li>Se convertido para outros tipos de data compostos, a parte da data assumirá o valor 1900-01-01</li>
</ul>
<h3>Tipo SMALLDATETIME</h3>
<ul>
<li>Faixa de valores: 1900-01-01 a 2079-06-06</li>
<li>Ocupa 4 bytes de espaço de armazenamento</li>
<li>Esse tipo não é compatível com o padrão ANSI</li>
<li>Arredonda os segundos de acordo com o valor passado</li>
<li>Não trabalha com fuso horário e nem com horário de verão, assim como os tipos DATE e TIME.</li>
</ul>
<h3>Tipo DATETIME</h3>
<ul>
<li>Este tipo também não segue o padrão SQL. Possui limitações relativas à acurácia de frações de segundo (precisão).</li>
<li>Faixa de valores: 1753-01-01 a 2999-12-31</li>
<li>Tamanho: ocupa 8 bytes de espaço</li>
<li>Não é recomendado por não ser compatível com padrão ANSI</li>
</ul>
<h3>Tipo DATETIME2</h3>
<ul>
<li>Armazena data e hora com precisão de até 100 ns.</li>
<li>É uma boa escolha para cenários onde é necessário armazenar o valor de tempo até frações de segundo</li>
<li>Não apresenta os problemas de arredondamento de DATETIME</li>
<li>Faixa de valores: de 1753-01-01 até 2999-12-31, e hora de 00:00:00 a 23:59:59.9999999</li>
<li>Sua precisão é ajustável, e seu tamanho depende da precisão escolhida.</li>
<li>Limitação: não suporta fuso horário nem horário de verão.</li>
</ul>
<h3>Tipo DATETIMEOFFSET</h3>
<ul>
<li>Este tipo possui alto nível de precisão, até 100 ns</li>
<li>Formato: AAAA-MM-DD hh:mm:ss.nnnnnnn+|-hh:mm, onde +|-hh:mm tem a haver com o offset (deslocamento de tempo)</li>
<li>O offset pode variar de +14 a -14 para o número de horas em que um horário específico pode ser deslocado</li>
<li>Faixa de valores: de 0001-01-01 até 2999-12-31 para datas, e de 00:00:00 até 23:59:59.9999999 para hora.</li>
<li>Tamanho ocupado: 10 bytes, fixo.</li>
</ul>
<h3>Perguntas e Respostas</h3>
<ol>
<li><em><strong>Quais são os tipos de dados usados para trabalhar com data e hora no SQL Server?</strong></em><br />
Os tipos de dados de data e hora no SQL Server são DATE, TIME, DATETIME, DATETIME2, SMALLDATETIME e DATETIMEOFFSET.</li>
<li><em><strong>Qual tipo de dados suporta fuso horário no SQL Server?</strong></em><br />
O tipo que suporta fuso horário (e também horário de verão) é o DATETIMEOFFSET.</li>
<li><em><strong>Preciso armazenar data e hora em um mesmo campo em uma tabela no SQL Server. Qual o tipo de dado mais adequado neste caso?</strong></em><br />
O melhor tipo de dado neste caso é o DATETIME2, que permite armazenar data e hora com precisão de até 100 nanossegundos, sem problemas de arredondamento de valores que existem no tipo DATETIME.</li>
</ol>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/tipos-de-data-e-hora-no-sql-server/">Tipos de Data e Hora no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/tipos-de-data-e-hora-no-sql-server/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
