Comandos SQL
Bora conhecer, entender e executar os principais comandos SQL com uma base de dados real para demonstrar como trabalhar com manipulação de informação.
O que precisei para a prática nesse artigo
Para realizar o treinamento, utilizei o banco de dados SQL Server 2017.
As bases de dados conforme as tarefas aplicadas foram, com a base de dados — `AdventureWorks2017.bak` até a tarefa vinte e três, com a base dados — `Northwind.bak`da tarefa vinte e quatro até a trinta e seis, com a base de dados — `Youtube.bak` para a tarefa 27.
E toda as tarefas foram executadas na IDE SQL Server Management Studio (SSMS).
Para mais consultas e esclarecimentos usei a documentação do SQL Server.
Esse artigo tem o objetivo de revisar e registrar o conteúdo do treinamento que tem o propósito principal de entender a linguagem SQL e a metodologia de informações de banco de dados.
Agora, vamos a alguns dos detalhes que serão abordados durante a prática do treinamento.
Iniciante
Os principais comandos na manipulação de banco de dados, a instalação do SQL Server e o SSMS e compreender a restauração de db.
Para download da base do banco de dados, acessar o link.
- Select + Desafios
- Disctinct + Desafios
- Where + Desafios
- Count + Desafios
- Top + Desafios
- Order By + Desafios
- Between
- In
- Like
- Desafios fundamentos
Intermediário
- Min Max Sum Avg
- Group By
- Having
- As
- Inner Join
- Tipos de Joins
- Outer Join
- Union
Avançado
- Datepart
- Manipulação de String
- Operações Matemáticas
- Subquery
- Self Join
Para download da base do banco de dados, acessar o link.
- Tipos de Dados
- Chave primária e estrangeira
- Create Table
- Insert Into
- Update
- Delete
- Alter Table
- Drop Table
- Check Constraint
- Not Null Constraint
- Unique Constraint
- Views
Encerramento
- Considerações Finais
Vamos as práticas
Os comandos serão apresentados de forma ordenada e os resultados dependem desse passo a passo para serem os mesmos. Mas os comandos usados podem servir como consulta de outros cenários.
Esse artigo ficou graaaaaaande mas com certeza, o objetivo do canal que o criou foi mais que bem sucedido, o de entender os comandos e como montar e manipular bases de dados.
Um ótimo treino em SQL.
1. Instalação do banco de dados : SQL Server 2017
2. Instalação do gerenciador de bd : SSMS 18.5 em português
3. Primeira abertura do ssms, vai conectar na instância de instalação.
4. Criar banco de dados : new database : New Query : `create database nomedodb;` + ( F5 para atualizar página )
5. Destruir banco de dados : botão direito no bd e delete : `drop database nomedodb`
6. Restaurar DB real para testes
7. Select: SELECT Server, Postgres, Oracle, mySQL
8. Select Desafio 1: A equipe de marketing precisa de fazer uma pesquisa sobre nomes mais comuns de seus clientes e precisa do nome e sobrenome de todos os clientes que estão cadastradas no sistema. [ first name, last name ]
9. Select Distinct: Retorna apenas os resultados únicos.
retornou 19.972 linhas
retornou 19.972 linhas
retornou 1.018 linhas
10. Select Distinct DESAFIO 2: Quantos sobrenomes temos na nossa tabela person.Person ?
retornou 1.206 linhas
11. Where: selecionar apenas alguns das informações da tabela.
Operadores condicionais: [ =, >,>=, <, <=, <>, AND, OR ]
Retorna todas os registros da minha tabela
Retornar todos os registros que o sobrenome é miller.
LastName = ‘miller’ : retornou 87 linhas.
LastName = ‘miller’ AND FirstName = ‘anna’ : retornou 1 linha.
Retornar os produtos que as cores são ou azuis ou pretas.
Retornou 119 linha.
Retornar os produtos que custam mais que um determinado valor.
Retornou 39 linha.
Retornar os produtos que custam dentro de um determinado intervalo de valor.
Retornou 39 linha.
Retornar os produtos que não são vermelhos.
Retornou 218 linha.
12. Where DESAFIO 3: A equipe de produção de produtos precisa do nome de todas as peças que pesam ( weight ) mais que 500kg mas não mais que 700kg para inspeção.
Retornou 4 linhas
DESAFIO 4: Foi pedido pelo marketing a relação de todos os empregados ( employees ) que são casados ( single é solteiro, married é casado ) e são assalariados ( salaried ).
Retornou 28 linhas
DESAFIO 5: Um usuário chamado Peter Krebs está devendo um pagamento, consiga o e-mail dele para que possamos enviar uma cobrança. ( Usar a tabela person.person e depois a tabela person.emailaddress )
Retornou 1 linha. A informação BusinessEntityID é 26. Agora pesquisando na tabela de e-mail.
Retornou 1 linha. O e-mail é peter0@adventure-works.com
Um break nos comandos SQL para tomar um café e aproveitar para ver a imagem a seguir.
13. Count: selecionar o números de linhas conforme as características que solicitamos.
Modelo do comando
Trazendo a tabela inteira
Utilizando o count na tabela inteira. Retornou 19972.
A contagem de títulos que tem nossa tabela person. Retornou 1009.
A contagem de títulos únicos que tem nossa tabela person. Retornou 6.
14. Count DESAFIO 6: Quero saber quantos produtos temos cadastrados em nossa tabela de produtos (production.product). Retornou 504.
Desafio 7: Quero saber quantos tamanhos de produtos temos cadastrados na nossa tabela de produtos (production.product). Retornou 211.
Desafio 8: Quero saber quantos tamanhos únicos de produtos temos cadastrados na nossa tabela de produtos (production.product). Retornou 18.
15. TOP: No cenário que o banco de dados é muito grande, o comando diz a quantidade de retorno conforme o interesse.
Modelo do comando.
Os primeiros trinta registros da tabela person.Person. Retornou 30.
Os primeiros dez registros da tabela production.Product. Retornou 10.
16. ORDER BY: Ordenar os resultados a partir de uma coluna por order crescente ou descrente.
Modelo do comando.
Pedido todos os elementos da tabela person.Person ordenado de forma crescente pela coluna FirstName. Retornou toda tabela ordenada de forma crescente pela coluna firstName, 19972 linhas.
Retornou toda tabela ordenada de forma crescente pela coluna firstName, e decrescente pela lastName, 19972 linhas.
Retornou as colunas FirstName e LastName da tabela ordenada de forma decrescente pela coluna middleName, 19972 linhas.
17. ORDER BY Desafio 9: obter o ProductId dos 10 produtos mais caros cadastrados no sistema, listando do mais caro para o mais barato.
ProductId: 749, 750, 751, 752, 753, 771, 772, 773, 774, 775
ORDER BY Desafio 10: Obter o nome e o número do produto dos produtos que tem o ProductId entre 1~4. Name: AR-5381 e Adjustable Race, BA-8327 e Bearing Ball, BE-2349 e BB Ball Bearing, BE-2908 e Headset Ball Bearings
18. BETWEEN: é usado para encontrar o valor entre um valor mínimo e outro valor máximo.
Quais os produtos que possuem preços entre 1000 e 1500. Retornou 47 linhas.
Agora, e se o desejado fosse os demais produtos. Retorno 457 linhas.
Quais pessoas foram contratadas nos anos de 2009 e 2010. Retornou 186 linhas. Lembrando que é ao final de 2010.
E para ordenar esseas dados conforme a data.
19. IN: Usado junto com o WHERE, para verificar se um valor corresponde com qualquer valor passado na lista de valores.
Gostaria dos registros que o BusinessEntityID sejam 2, 7 e 13. Retornou 3 linhas.
Query são os comandos em sql, como os exibidos nesse arquivo.
Agora, e se o desejado fosse os demais registros que o BusinessEntityID não sejam 2, 7 e 13. Retornou 19.969 linhas.
20. LIKE: Permite localizar registros onde sabemos apenas parte do seu nome. Por exemplo, quero encontrar uma pessoa no banco de dados que você sabe que o nome dela era “ovi” … alguma coisa. Retornou 2 linhas.
Ou então, que termina com “to”. Retornou 45 linhas.
E se a única informação que tenho conhecimento está no meio do registro. Retornou 24 linhas.
Se tratar apenas de um caracter faltante, utilizamos de outra maneira.
21. Desafio 11: Quantos produtos temos cadastrados no sistema que custam mais que 1500 dólares ?
Retornou 39 linhas.
Dica 1: usar a tabela production.Product
Dica 2: usar Count e Where e mais um operador de comparação.
Resposta: Agora, o retorno é apenas o número 39.
Desafio 12: Quantas pessoas temos em nosso db com o sobrenome que inicia com a letra P ?
Retornou o número 1187.Dicas atendidas: usar tabela person.Person e usar count, like, where.
Desafio 13: Quantas cidades únicas estão cadastrados nossos clientes ?
Retornou o número 575. Dicas atendidas: usar tabela person.address e usar count e distinct.
Desafio 14: QUAIS cidades únicas estão cadastrados nossos clientes ? *** atenção a palavra “QUAIS”.
Retornou uma lista de 575 linhas, com os nomes das cidades.
Desafio 15: Quantos produtos vermelhos tem o preço entre 500 a 1000 dólares ?
Retornou o número 11. Dicas atendidas: usar tabela production.product e usar where e between.
Desafio 16: Quantos produtos cadastrados tem a palavra ‘road’ no nome deles ?
Retornou o número 103. Dicas atendidas: usar production.product e usar like e count.
22. MIN, MAX, SUM, AVG: São funções ( FUNÇÃO DE AGREGAÇÃO ) que agregam ou combinam dados de uma tabela em um único resultado. Entender algumas informações sobre VENDAS.
Total geral das vendas com apelido na coluna “Soma”. Retornou 109846381.399888.
Menor valor geral das vendas com apelido na coluna “Menor Valor”. Retornou 1374000.
Maior valor geral das vendas com apelido na coluna “Maior Valor”. Retornou 27893.619000.
Valor média geral das vendas com apelido na coluna “Média de Valor”. Retornou 905.449206.
Mais break para tomarmos água e aproveitar para ver a a imagem a seguir.
23. GROUP BY: Divide o resultado da pesquisa em grupos. Para cada grupo pode-se aplicar uma função de agregação. Calcular a soma de itens. Contar o número de itens naquele grupo.
Encontrar o valor da oferta conforme identificador SpecialOfferID, realiza a soma do preço unitário conforme identificação desses registros.
Gostaria de saber quanto de cada produto foi vendido até hoje.
Gostaria de saber quantos nomes da cada nome temos cadastrados em nosso bd.
Na tabela production.product, precisamos da informação da média de preços dos produtos que são pratas (silver). Retornou 850,3053.
24. GROUP BY Desafio 17: Quantas pessoas possuem o mesmo MiddleName agrupadas por MiddleName.
Desafio 18: A média quantidade (quantity) que cada produto é vendido na loja. Usar a tabela sales.salesorderdetail.
Desafio 19: Quais foram as 10 vendas que, no total, tiveram maior valor de venda (line total) por produto, do maior valor para o menor.
Desafio 20: Precisamos saber quantos produtos e qual a quantidade média de produtos temos cadastrados nas nossas ordem de serviço (WorkOrder), agrupados por ProductID. Usar a tabela production.workorder, usar group by e uma função agregação.
25: Comentário SQL:
26. Having: usado em junção com group by para filtrar resultados de um agrupamento. Em outras palavras, um WHERE para dados agrupados.
Uma observação importante, a diferença entre HAVING e WHERE: o HAVING é aplicado depois que os dados já foram agrupados (GROUP BY) enquanto o WHERE é para antes dos dados serem agrupados.
Desafio Having 21: Quais os nomes no sistema tem uma ocorrência maior que 10 vezes ? Retornou 566 linhas e duas colunas com nomes e os respectivos números das quantidades.
Desafio Having 22: Quais os produtos que no total de vendas estão entre 162k a 500k.
Desafio Having 23: Quais os nomes no sistema tem uma ocorrência maior que 10 vezes ? Atenção: somente aqueles o título é Mr.
Desafio 24: Identificar as províncias (StateProvinceId) com o maior número de cadastros no nosso sistema, então é preciso encontrar quais províncias (StateProvinceId) estão registradas no banco de dados mais que 1000 vezes.
Usar person.address. Usar having. Usar count. Usar operadores matemáticos.
A seguir, temos a resposta desse comando executado na query.
Desafio 25: Trata-se de uma multinacional, os gerentes que desejam saber quais produtos (productId) NÃO estão trazendo, em média e no mínimo, 1 milhão em total de vendas (linetotal). Usar tabela sales.salesorderdetail. Usar having. Usar count. Usar operadores matemáticos.
A seguir, temos a resposta desse comando executado na query.
27. AS: dar nome as colunas ou renomear as colunas. Se for apenas uma palavra não precisa de aspas.
28. AS Desafio 26: Encontrar FirstName e LastName da tabela person.person. Retornou 19.972 linhas.
29. AS Desafio 27: Renomear ProductNumber da tabela production.product como “Número do Produto”.
30.AS Desafio 28: Renomear Sales.SalesOrderDetail.unitPrice como “Preço Unitário”.
31. Inner Join: Realizar consultas (query) com informações de mais de uma tabela.
Primary Key é a chave primária e Foreign Key é a chave estrangeira.
BusinessEntityId, FirstName, LastName, EmailAddress. A informação em comum entre os dois comandos a seguir ?
A partir dessa informação em comum que vamos aplicar o Join.
Queremos os nomes dos produtos e as informações de suas subcategorias: ListPrice, Nome do Produto, Nome da Subcategoria.
Observando os dois retornos, percebemos que a coluna ProductSubcategoryID é comum as duas consultas. Agora, utilizando um Join:
Continuando:
Informações de endereço:
Unindo essa consulta, temos:
32. INNER JOIN Desafio 29: A partir das duas tabelas a seguir:
e
Desejo o retorno das informações BusinessEntityId, Name, PhoneNumberTypeId, PhoneNumber.
Dicas para resolução: usar as tabelas Person.PhoneNumberType e Person.PersonPhone. Depois de analisar, a coluna comum é a PhoneNumberTypeId.
33. INNER JOIN Desafio 30: Desejo o retorno das informações AddressId, City, StateProvinceId, Nome do state. Primeiramente, as tabelas envolvidas são:
e
E a coluna comum é a StateProvinceId.
34. Tipos de Join: Diagrama SQL JOINs, com os tipos de join de forma visual.
Inner JOIN: retorna os registros que correspondem nas duas tabelas a partir uma coluna comum.
Full Outer JOIN: retorna todos os registros das duas tabelas. Aqueles não existentes são identificados com NULL na respectiva tabela.
Left Outer JOIN: retorna todos os registros da tabela A, sendo que aqueles que não há correspondentes na tabela B, veem com NULL.
Right Outer JOIN: retorna todos os registros da tabela B, sendo que aqueles que não há correspondentes na tabela A, veem com NULL.
35. LEFT OUTER JOIN: Também referenciado como LEFT JOIN. Vamos a um problema prático. Descobrir quais pessoas tem um cartão de crédito registrado.
INNER JOIN 19018 linhas
LEFT JOIN 19972 linhas
Onde não existe um cartão de crédito registrado. Retornou 854 linhas.
Está rendendo aí? Bora dar um break para mexer nas redes sociais e aproveitar para ver a imagem a seguir.
36. UNION: Ajuda a combinar dois ou mais resultados de um SELECT em um único resultado.
Um exemplo prático do UNION unindo o resultado de dois SELECT:
Nesse outro exemplo:
Agora, um exercício livre, colocando em prática o UNION, onde dois select tem seus resultados reunidos para exebir os registros.
37. DATEPART: trata-se de um comando que permete manipular datas conforme os parâmetros passados.
Coluna OrderDate é sobre a data do pedido de compra.
Agora, a média total e a data conforme o mês, agrupados pela data.
Mês:
Ano:
Dia:
38. MANIPULAÇÃO DE STRING: Funções para operações em string no sql. Vamos a alguns exemplos de situações que precisaremos manipular string.
Concatenar nome e sobrenome
Toda string em maiúsculo, em minúsculo
Contar o número de caracteres tem uma string
Retornar um trecho da minha string
A função replace que exibe o registro com alteração
Concat, Len, Lower, Upper, Substring e Replace são as funções de manipulação de string vistas agora.
39. OPERAÇÕES MATEMÁTICAS: permite realizar as operações matemáticas tradicionais.
Soma/Subtração/Multiplicação/Divisão de dois ou mais colunas númericas:
Média(AVG)/Soma(SUM)/Minimo(MIN)/Maximo(MAX) de todos os registros de uma mesma coluna:
Arredondamento e a precisão das casas:
Raiz quadrada:
40. Erro para conectar o programa Microsoft SQL Server Management Studio.
- Correção: ferramenta administrativa do windows >> serviços >> SQL Server (todos os +- 4) >> botão direito + iniciar.
- Vídeo com a Solução
41. SUBQUERY: Um select dentro de outro select. Comando mais poderoso na extração de informações dos dados.
DESAFIO 31: Monte um relatório para mim de todos os produtos cadastrados que tem o preço de venda acima da média.
Solução com select separado:
Primeiro para descobrir a média.
Depois, todos acima da média.
Resolvendo como subquery(subselect): retornou 136 linhas.
DESAFIO 32: Quero saber o nome dos meus funcionários que tem o cargo de ‘Design Engineer’.
Qual a coluna em comum ?
Informações de nome encontro na tabela Person.Person.
Informações de cargo encontro na tabela HumanResources.Employee.
Da maneira a seguir, terei o retorno apenas dos cargos de ‘Design Engineer’
Da maneira a seguir, terei o retorno apenas dos registros que indiquei entre parentes.
O comando correto de subselect. Retorno de 3 linhas.
Mas também é possível obter essa mesma informações com INNER JOIN.
Executamos dois comandos diferentes que retornam o mesmo resultado. Seria interessante saber qual dos dois é mais eficiente. Para isso, ative o botão “Incluir Plano de Execução Real (Ctrl + M)” e execute as consultas. Click no botão “Plano de Execução”, pronto. Terá as informações e números que permitirão comparar.
- SUBSELECT — Plano de Execução do SUBSELECT
- INNER JOIN — Plano de Execução do INNER JOIN
Existe outros fatores a serem analisados, mas nos nossos dois comandos, o principal ponto de análise é o tempo para retornar nossa informação. Como são comandos simples, ambos apresentaram o mesmo tempo de retorno.
SUBQUERY — Desafio 33: Encontrar todos os endereços que estão no estado de ‘Alberta’.
Usar a tabela Person.Address. Usar a tabela Person.StateProvince.
Primeiro, para encontrar qual coluna é comum em ambas tabelas.
Sabendo que a coluna comum é a StateProvinceID, então vamos ao subselect. Retornou 25 linhas.
42. Novo banco de dados para realizar as tarefas a partir da aula 24.
43. SELF JOIN: Agrupar, organizar dados dentro da mesma tabela.
Desafio: Todos os clientes que moram na mesma região.
Partindo das informações da tabela Employees.
Desafio: Saber nome e data de contratação de todos os funcionários que foram contratados no mesmo ano.
Desafio: Na tabela detalhe do pedido, saber quais os produtos que possuem o mesmo percentual de desconto. Usar a tabela OrderDetails.
Entender a tabela [Order Details]
Executando nossa solução. Retornou 1.872.945.
44. TIPOS DE DADOS NO SQL SERVER:
Boolean, Caractere, Números e Temporais
45. Chave Primária e Chave estrangeira: criar coluna e criar tabela.
Chave Primária (Primary Key) — uso de restrições (constraints)
Chave Estrangeira (Foreign Key) — é uma coluna em uma tabela que identifica unicamente uma linha em outra tabela. Ou, é apenas uma referência e não contém todos os dados. E a chave que contém a chave estrangeira é a tabela referenciadora (tabera filho). Uma tabela pode ter mais de uma chave estrangeira.
**Northwind >> Products >> PK_Products, FK_Products_Categories, FK_Products_Suppliers**
46. CREATE TABLE:
Restrições que podem ser aplicadas:
NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK, DEFAULT
Criar um novo banco de dados: `YOUTUBE`.
Criar tabelas: Canal.
Criar tabelas: Video.
47. ALTER TABLE: alterar a tabela, adicionando colunas.
48. INSERT INTO: Inserir registros no banco de dados.
Inserir informações em uma tabela A da tabela B.
Criar uma tabela Aula:
Inserir colunas em uma tabela.
49. INSERT INTO — Desafio:
1. crie uma tabela nova.
Inserir novas colunas na tabela.
2. insira uma linha de dados.
Select:
3. insira três linhas de dados ao mesmo tempo.
4. crie uma segunda tabela.
5. insira uma (três) linha nessa tabela nova.
6. copie dados da segunda tabela para a primeira.
Fala Dev! Vamos dar um break para levantar e aproveitar para ver a imagem a seguir.
50. DESAFIO INSERT INTO (Mais detalhes e Resolução):
1 — criar uma tabela nova
2 — inserir uma linha de dados nela
3 — inserir três de dados ao mesmo tempo
4 — criar uma segunda tabela
5 — inserir uma linha nessa tabela nova
6 — copiar os dados da segunda tabela para a primeira
No comando a seguir, insiro na tabela VHS(VideoId, Nome, Rebobinar) os dados (VideoId, Nome, Vizualizacoes) da tabela Streaming.
51. Novamente, Error 26 — Resolução no Item 40: Como resolver erro no SQL Server
52. Criar uma tabela. Deletar a mesma tabela.
53. UPDATE: alterar linhas de registro já criado. Atenção: senão colocar where irá alterar toda a coluna.
54. DELETE: deletar um registro da tabela do bd. Atenção: senão colocar where irá deletar toda a tabela.
O comando a seguir irá apagar todas as linhas da nossa tabela VHS.
55. AFTER TABLE: Alterar a estrutura de tabelas.
Alterações possíveis:
- Add, Remover, Alterar uma coluna
- Set valores padrões para uma coluna
- Add e Remover restrições de colunas
- Renomear uma tabela
Adicionar a coluna Ativo do tipo bit
Alterar o limite de caracteres da coluna categoria.
Alterar o nome de uma coluna. Atenção, esse comando é mais cuidadoso para ser executado.
Alterar o nome da coluna Ativo para ACTIVE da tabela Youtube.
E após executar esse comando, o SSMS exibe a seguinte mensagem de alerta: “Cuidado: a alteração de qualquer parte de um nome de objeto pode interromper scripts e procedimentos armazenados.”.
O mesmo vale para nome da tabela. O comando seria da seguinte maneira:
Vamos alterar o nome da tabela Youtube para YoutubePremium
E após executar esse comando, o SSMS exibe a seguinte mensagem de alerta: “Cuidado: a alteração de qualquer parte de um nome de objeto pode interromper scripts e procedimentos armazenados.”.
56. AFTER TABLE-DESAFIO:
1 — Criar uma tabela nova com três colunas
2 — Alterar o tipo de uma coluna
3 — Renomear o nome de uma coluna
4 — Renomear o nome da tabela que você criou
- 1 : criado a tabela serDev com as colunas IdDev, NOME, NIVELEXP
- 2 : Alterado a coluna NOME com tamanho VARCHAR(150) para tamanho VARCHAR(200)
- 3 : alterar nome da coluna NIVELEXP para EXPDev
- 4 : Alterar nome da tabela de serDev para souDev
57. DROP TABLE : “dropar” uma tabela é excluir uma tabela do banco.
Atenção. Será possível excluir tabelas que não são referenciadas por outras tabelas.
58. DROP TABLE — DESAFIO : Criar a tabela Aula e depois excluí-la.
Apagar o conteúdo da tabela, mantendo a estrutura original.
Lembrando que também não pode haver referências por outras tabelas. Caso tenha referência,será apresentado mensagem semelhante a seguir : “Não é possível truncar a tabela ‘Programador’ porque uma restrição FOREIGN KEY faz referência a ela.”
Garantir que há diversos registros na tabela souDev.
59. CHECK CONSTRAINT: criar restrições sobre valores. A restrição é feito quando está inserindo o valor ou quando está alterando o valor no banco de dados.
Criar a tabela com restrição:
Inserir registros que atendem a restrição:
Consultar:
Alterar valores de nome repetidos:
Agora vou inserir (TENTAR) um valor que não segue a restrição que colocamos para idade.
A mensagem de resposta a essa tentativa é : “A instrução INSERT conflitou com a restrição do CHECK “CK__CarteiraM__IDADE__60A75C0F”. O conflito ocorreu no banco de dados “Youtube”, tabela “dbo.CarteiraMotorista”, column ‘IDADE’. “
60. NOT NULL CONSTRAINT: criar restrições que forçam com que não seja possível inserir dados em uma tabela sem preencher a coluna marcada.
Estamos quase terminando. Vamos dar um break para tomar um café e aproveitar para ver as imagens a seguir.
61. UNIQUE CONSTRAINT: Criar a restrição para não inserir valores repetidos na mesma tabela na mesma coluna.
Tabela criada com a seguinte configuração:
Tentativa de inserir os valores a seguir, e apresentou a seguinte mensagem: “Violação da restrição UNIQUE KEY ‘AK_Password’. Não é possível inserir a chave duplicada no objeto ‘dbo.CarteiraMotorista’. O valor de chave duplicada é (78). A instrução foi finalizada.”
62. Views: Uma maneira bem específica de extrair informações de uma tabela existente.
Consultando nossa tabela inteiro.
Criamos nossa view conforme as informações que temos interesse.
Consultamos nossa VIEW.
63. Considerações finais — Ótimo conteúdo, parabéns pela didática. Próximo passo, seria criar relatórios.
Esse artigo é resultado da ideia de comentar o treinamento introdutório de sql aplicado pelo Dev Aprender no seu canal no Youtube.
Nesse artigo, demonstrei os comandos usados para cumprir os desafios das tarefas. Tomara que tenha gostado, aplauda o artigo! Até o próximo artigo e ótimos códigos.