Escolar Documentos
Profissional Documentos
Cultura Documentos
Formas de normalização:
Quando não possui dados repetidos.
/*
Criando Banco de Dados
Autor: Nathalia Marin da Costa
Data: 24/12/2019
*/
-- Criando um banco via T-SQL
CREATE DATABASE DepartamentoPessoal;
Execução: clicar no botão execute ou F5
-- Colocando um banco em uso
USE DepartamentoPessoal;
-- Excluir um banco de dados
-- O mesmo não poderá estar em uso
Use master;
DROP DATABASE DepartamentoPessoal
Aula 4
SQL ansi = SQL padrão
T – Sql é uma linguagem transacional (utilizada para realizar transações).
DQL = extração
DML = manipulação de dados
DCL = controles. Comando que dão permissão, bloqueio e revogar um bloqueio/permissão
DTL = manipulação de dados com segurança. Dados que podem voltar ao original
DDL = criar um objeto, alterar uma estrutura de tabela. Excluir
USE Concessionaria;
--Tabelas
--identação: recuos para continuar o código extenso
--identity é auto numeração e começo no 1
-- , = separador de colunas
-- char(30) = comprimento fixo, vai consumir 30 posições na memória
-- varchar(30) = só vai consumir o que realmente está em campo
-- nchar(30) = texto unicold, utilizado para banco de dados que podem ter mais de um idioma
-- not null = campo obrigatório
-- unique = não aceita dados repetidos
CREATE TABLE tblMarcas
(
idMarca int identity primary key,
nomeMarca nchar(10) not null unique
);
-- PK = chave primária
-- FK = chave estrangeira
Create table tblModelos
(
idModelo int identity
Constraint PK_tblModelos_idModelos
Primary Key (idModelo),
);
Constraints = regras do servidor. Objetivo de dar consistência aos dados, como: not null, primery Key
--para cirar uma chave estrangeira, ela deve ser uma chave primária na outra tabela
--CK = Check
--Estrutura = Tabela que estou usando e coluna em que vai ser aplicado a regra. Se a coluna possuir
constratints ela não poderá sofrer alteração, para isso é necessário excluir a coluna e refaze-la.
Ex.:
Use Concessionaria;
--Nova coluna
Alter Table tblEstoque
ADD placa nchar(8) not null;
-- Vizualizar índices
Exec sp_help tblEstoque;
-- Criando índice
-- Índices que não são chave primária sugere-se IX
--DESC = dados em ordem decrescente
Create NONCLUSTERED Index IX_tblEstoque
On tblEstoque(dataEntrada DESC)
--Excluir Índice
--Se excluir o índice não vai estar excluindo os dados da coluna
DROP INDEX IX_tblEstoque
On tblEstoque;
USE Concessionaria;
EXEC sp_help tblMarca;
-- Insert posicional
INSERT INTO tblMarcas
Values(‘Fiat’);
--Visualizar dados
Selct * From tblMarcas;
--Insert declarativo
Insert into tblModelos
(idMarca,nomeModelo)
Values
(4,’Onix’),(1,’Uno’),(3,’Eco Sport’);
Use sisDep;
--Operador Composto
--Reajuste de 10% para todos os funcionários
UPDATE Funcionario
--Set salario = salario*1.1 + salario
--Set salario = salario*0.1 + salario
--+=, -=, /=
Set salario *= 1.1
USE Consorcio;
--Visualizando dados da tablea carteira
Select * From Carteira;
Use sisDep;
Ex.:
USE SeguroVeiculo;
Select*From Apolices;
--Inciar uma transação
Begin Transaction
Update Apolices
Ste valorApolice = valorApolice + 1500;
--Confirmar operação
-- A partir do momento que for executado esse comando não será possível voltar ao dado original, por isso é
necessário fazer backups
COMMIT TRAN
USE sisDep;
--OUTPUT = mostra o antes e depois de alterar os dados
Begin Tran
Update Funcionario
Set Salario = Salario*1.1
OUTPUT
deleted.idMatricula,
deleted.iNomeFuncionario,
deleted.Salario as [Salario Anterior],
inserted.Salario as [Novo Salario]
Where Salario <= 3000;
Commit
USE SisDep;
-- Todas as colunas de uma tabela
Select * From Funcionario;
--Ordenar dados
--ASC é ordem crescente
Select idDepartamento,idMatricula,NomeFuncionario,Admissao,Salario
From Funcionario
Order By NomeFuncionario ASC;
--DESC é ordem decrescente
Select idDepartamento,idMatricula,NomeFuncionario,Admissao,Salario
From Funcionario
Order By NomeFuncionario DESC;
--Ordenação por mais de uma coluna
Select idDepartamento,idMatricula,NomeFuncionario,Admissao,Salario
From Funcionario
Order By NomeFuncionario ASC, Salario Desc;
--RANK (TOP)
Select top 20 idDepartamento,idMatricula,NomeFuncionario,Admissao,Salario
From Funcionario
--Porcentagem de dados
Select top 10 PERCENT idDepartamento,idMatricula,NomeFuncionario,Admissao,Salario
From Funcionario
-- 10 maiores salários
-- o TOP NÃO CONSIDERA EMPATES
Select top 9 PERCENT idDepartamento,idMatricula,NomeFuncionario,Admissao,Salario
From Funcionario
Order By Salario DESC;
-- Com empates
Select top 9 WITH TIES PERCENT idDepartamento,idMatricula,NomeFuncionario,Admissao,Salario
From Funcionario
Order By Salario DESC;
USE SeguroVeiculo;
Select * From Apolices;
--Operadores relacionais
Select * From Apolices
Where valorApolice >= 5000;
--Operadore Lógicos
Select * From Apolices
Where idSeguradora = 1 or idSeguradora = 3;
-- Operador NOT demanda muito do processador pois faz duas operações. Vê todos os 5 e depois nega verdade
Select * From Apolices
Where Not idCidade = 5;
--Operadores Aritméticos
--[ ] é o título da coluna que faz o cálculo
Slecte nContrato, valorApolice, valorApolice * 1.1 AS [Reajuste Anual]
From Apolices
--Operadores compostos
Begin Train
Update Apolices
Set valorApolice *= 1.1
Commit
Aula 16 – Between, Like e In
USE SisDep;
Select idMatricula,NomeFuncionario,Admissao,Salario
From Funcionario
Where Salario Between 1500 and 3000
Select idMatricula,NomeFuncionario,Admissao,Salario
From Funcionario
Where Admissao Between ’2005/1/1’ and ‘2005/12/31’;
Select idMatricula,NomeFuncionario,Admissao,Salario
From Funcionario
Where Admissao Not Between ’2005/1/1’ and ‘2005/12/31’;
USE Clientes;
--UNION ALL
--Union não traz valores repetidos
--UNION ALL
-- Traz informação duplicados
Update Clientes2015
Set Apolice = 5000
Where código =2790;
Update Clientes2016
Set Apolice = 5000
Where código =2790;
-- Só posso verificar a consistência de dados uma coluna por vez e devem ter o mesmo tipo de dados
USE Clientes;
--Novos clientes
Select * From Clientes2016
Except
Select * From Clientes2015;
USE SysConVendas;
Select * From Dados;
Begin Tran
Update Dados
Set Vendedor = Null
Where Pedido In(21820,21872,21924,21963,22080)
Commit
--Função ISNULL (Coluna, o que deseja de informação no campo NULL) AS [Novo nome da coluna]
Select
Pedidos, ISNULL( Vendedor,’Sem Informação’) as Vendedor, Produto,Total
From Dados
Select
Pedidos, ISNULL( Vendedor,’’) as Vendedor, Produto,Total
From Dados
Select
Pedidos, Vendedor, Produto,Total
From Dados
Where Vendedor IS NOT NULL;
-- Função COALESCE: Retorna o primeiro valor não nulo em uma lista de valores
CREATE TABLE Cotacao
(
codigo int identity,
Produto varchar(50) not null,
Cotacao1 money null,
Cotacao2 money null,
Cotacao3 money null,
);
Insert into Cotacao
Values
(‘Mouse’,Null,25,Null),
(‘Impressora’,200,Null,350),
(‘Monitor’,Null,Null,500),
(‘HD Externo’,Null, Null, Null);
Select
Produto,
COALESCE (cotacao1, cotacao2, cotacao3,0) AS Cotação
From Cotacao
Select
NomeFuncionario,Admissao,Salario, uf,Cidade
From Funcionario INNER JOIN Localidade
On Funcionario.idLocalidade = Localidade.idLocalidade
Select
NomeFuncionario,Admissao,Salario, uf,Cidade,NomeDepartamento
From Funcionario INNER JOIN Localidade
On Funcionario.idLocalidade = Localidade.idLocalidade
Inner Join Depto
ON Depto.idDepartamento = Funcionario.idDepartamento
--Nomes Qualificados
Select
Funcionario.NomeFuncionario,
Dependente.NomeDependeten,
Dependente.NascimentoDependente
From Funcionario INNER Join Dependente
ON Depedente.idMatricula = Funcionario.idMatricula
Order By Funcionario.NomeFuncionario;
--Rótulos ou Alias
--Todas as demais linhas devem conter o apelido, com exceção da linha que está dando o apelido
Select
F.NomeFuncionario,
D.NomeDependeten,
D.NascimentoDependente
From Funcionario AS F INNER Join Dependente AS D
ON D.idMatricula = F.idMatricula
Order By F.NomeFuncionario;
USE SisDep;
BEGIN TRAN
UPDATE Funcionario
Set salario = salário*1.1
From Funcionario As F Left Join Dependente as d
On f.idMatricula = d.idMatricula
Where d.NomeDependete IS NULL;
BEGIN TRAN
DELETE Funcionario
FROM Funcionario AS f INNER JOIN Departamento AS d
ON f.idDepartamento = d.idDepartamento
Where d.NomeDepartamento = ‘SAC’ and f.Slario > 1500,00;
COMMIT
--Desligamento de funcionários com salário superior a R$ 4.000,00 que não possuam dependetes
BEGIN TRAN
DELETE Funcionario
From Funcionario AS f LEFT JOIN Dependente AS d
ON f.idMatricula = d.idMatricula
Where d.NomeDependente IS NULL AND f.Salario > 4000;
Aula 24 – Subconsultas
USE Clientes;
USE SisDep;
--Retornar nome dos funcionários que possuem dependentes
Select
f.NomeFuncionario
From Funcionario AS f
Where
f.idMatricula IN (
Select d.idMatricula From Dependente d);
USE SysDep;
Select *From Dados;
-- O resultado será copiado na tabela temporária (dura apenas quando o programa está ativo)
-- é utilizada para diminuir o custo de uso da memória RAM
Selec *
Into #Pesquisa1
From Dados;
--Filtros
Select * From #Pesquisa1
Where mês = ‘agosto’;
--Atualizações
Upadate #Pesquisa1
Set vendedor = ‘Helio’
Where pedido = 2124;
Slect *
Into ##Pesquisa2
From Dados
Where Regiao = ‘sudeste’
USE SisDep;
Use SysConVendas;
Select * From Dados;
Use SysConVendas;
Select
Cidade, Sum(Total) AS [Faturamento Total]
From Dados
Group By Cidade;
Select
Cidade, Sum(Total) AS [Faturamento Total]
COUNT (*) AS [Nº de Ocorrências]
From Dados
Group By Cidade, Produto;
-- Subtotais
Select
Cidade, Sum(Total) AS [Faturamento Total]
From Dados
Group By Cidade
With Rollup
USE SisDep;
Select
NomeFuncionario,
LEN(NomeFuncionario) AS [Nº de Caracteres],
idMatricula,
LEFT(idMatricula,2) AS [Esquerda],
Right(idMatricula,1) AS [Direita]
Replace (idMatricula),’10’,’20’ AS [Substituir]
CHARINDEX (‘silva’,NomeFuncionario,1) AS [Localizar]
SUBSTRING(NomeFuncionario,1,charindex(‘ ‘,NomeFuncionario,1,1
From Funcionario;
Select GetDate();
Use SisDep;
Select
NomeFuncionario,Admissao,
Day (Admissao) AS [Dia],
Month(Admissao0 AS [Mês],
Year(Admissao) AS[Ano]
From Funcionario;
/*
Retornar admitidos na 1ª quinzena de qualquer do 2º Semestre
Dos seguintes anos (2000,2003,2005,2008,2010)
*/
Select
NomeFuncionario,Admissao,
Day (Admissao) AS [Dia],
Month(Admissao0 AS [Mês],
Year(Admissao) AS[Ano]
From Funcionario
Where
Day (Admissao) <= 15 And Mont(Admissao) >=7 and
Year(Admissao) IN (2000,2003,2005,2008,2010);
Select DATEFROMPARTS(2017,1,10);
USE SisDep;
Select
NomeFuncionario,
CAST(Admissao AS Date) AS [Admissao]
From Funcionario;
Select
NomeFuncionario,
convert(VARCHAR,Admissao,1) AS [Codigo1],
convert(VARCHAR,Admissao,2) AS [Codigo2],
convert(VARCHAR,Admissao,3) AS [Codigo3],
convert(VARCHAR,Admissao,101) AS [Codigo101],
convert(VARCHAR,Admissao,102) AS [Codigo102],
convert(VARCHAR,Admissao,103) AS [Codigo103],
From Funcionario;
Select
NomeFuncionario.
Format(salario,’C’,’ EN-US’) AS [Formato Dolar],
Format(salario,’C’,’ PT-BR’) AS [Formato Real],
Format(Admissao,’d’,’ PT-BR’) AS [Formato Data 1],
Format(Admissao,’d’,’ PT-BR’) AS [Formato Data 2],
Format(Admissao,’Dd-mm-yyyy’,’ PT-BR’) AS [Formato Data 3],
From Funcionario;