You are on page 1of 54

Instalando um SGDB

Pessoal, para executarmos nossos exemplos seria interessante instalarmos um gerenciador de banco de dados.
Escolhi dois gerenciadores mas vocs podem escolher qualquer outro.

Antes baixem os arquivos necessrios:

download MySQL
download Microsoft SQL Server

Agora vejam os videos para instalao:

Instalando MySQL
Instalando Microsoft SQL Server
Tabelas para nossos exemplos
Neste post vamos criar e inserir dados em duas tabelas para utilizarmos em nossos exemplos. No se preocupem com
os comandos agora, explicarei tudo mais tarde. Estes comandos foram testados no MySQL e no SQL Server.

Estrutura tabela Funcionrio

Coluna Tipo Tamanho Descrio

IdFuncionario int Cdigo do Funcionrio

Nome varchar 60 Nome do Funcionrio

DDD char 2 DDD do Telefone

Fone varchar 20 Nmero do Telefone

Email varchar 50 Email

idDepto int Cdigo do Departamento

Logradouro varchar 100 Logradouro

NrLogradouro char 10 Nmero do Logradouro

ComplementoEndereco varchar 40 Complemento do Endereo

Bairro varchar 60 Bairro

Cidade varchar 60 Cidade

UF char 2 Unidade Federativa

CEP char 8 CEP

Criando tabela Funcionario:

Create table Funcionario


(IdFuncionario int, Nome varchar(60), DDD char(2), Fone varchar(20), Email varchar(50), IdDepto int,
Logradouro varchar(100),NrLogradouro char(10),ComplementoEndereco varchar(40),Bairro varchar(60),Cidade
varchar(60),UF char(2),CEP char(8));

Inserindo dados na tabela Funcionario:

Insert Into Funcionario


(IdFuncionario,Nome,DDD,Fone,Email,IdDepto,Logradouro,NrLogradouro,ComplementoEndereco,Bairro,Cidade,UF,CEP
)
Values
(1,'Joaquim Jos','11','11111111','joaquim.jose@xpto.com',1,'R das Flores','55','','Sao Geraldo','Sao
Paulo','SP','12345678'),
(2,'Pedro Silva','12','22222222','pedro@xpto.com',2,'Av So Paulo','20','','Sao Geraldo','Sao Paulo','SP','11111111'),
(3,'Mrio Mattos','13','33333333','mario@xpto.com',3,'R XXXX','23','','Sao Geraldo','Sao Paulo','SP','22222222'),
(4,'Manuel Antnio','41','44444444','manuel@xpto.com',4,'R YYYYY','77','','Sao Geraldo','Sao Paulo','SP','33333333'),
(5,'Maria Aparecida','21','55555555','ma@xpto.com',5,'R ABC','99','','Sao Geraldo','Sao Paulo','SP','66666666'),
(6,'Daniel Borges','31','66666666','danielb@xpto.com',6,'R 123','100','','Sao Geraldo','Sao Paulo','SP','77777777'),
(7,'Diana Cristina','22','77777777','diana@xpto.com',7,'R Piracicaba','213','','Sao Geraldo','Sao Paulo','SP','99999999'),
(8,'Miriam Lagos','43','88888888','miriam@xpto.com',8,'R Dona Zica','445','','Sao Geraldo','Sao Paulo','SP','44444444');

Estrutura tabela Departamento


Coluna Tipo Tamanho Descrio

IdDepto int Cdigo do Departamento

NomeDepto varchar 50 Nome do Departamento

Criando tabela Departamento:

Create Table Departamento


(IdDepto int, NomeDepto varchar(50));

Inserindo dados na tabela Departamento:

Insert Into Departamento (IdDepto,NomeDepto)


Values
(1,'Administrao'),
(2,'Contabilidade'),
(3,'TI'),
(4,'Almoxarifado'),
(5,'Segurana'),
(6,'Controladoria'),
(7,'Compras'),
(8,'Contas a Pagar');
Select Bsico - Parte 1
O comando Select na linguagem SQL utilizado para fazer consultas aos dados de uma ou mais tabelas ou views. A
sintaxe do comando Select pode ser bem complexa, mas vamos comear do bsico.

Sintaxe:

SELECT
<lista de seleo>
[ FROM { <tabela> | <view> } [ ,...n ] ]
[ WHERE <condio de pesquisa> ]

Onde:

<lista de seleo>

Define as colunas a serem listada para o resultado. A lista deve ser separada por vrgulas e pode conter funes e
colunas calculadas.

* - Define que todas as colunas das tabelas ou views sero exibidas.

<tabela> | <view>

Tabela(s) ou view(s) utilizada(s) na consulta.

<condio de pesquisa>

Define a condio de pesquisa da consulta.

Exemplos:

Nestes exemplos utilizamos a tabela Funcionario criada no post Tabelas para nossos exemplos

Selecionando todos os campos e linhas de uma tabela:

Select * From Funcionario

Utilizando uma condio simples:

Select IdFuncionario,Nome From Funcionario Where IdFuncionario=1

Sintaxe especfica: Miscrosoft SQL Server, MySQL, Oracle

Veja tambm

Select Bsico - Parte 2


Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Normalizao de Dados - Parte 1
Estava organizando o HD do meu note quando encontrei uma apresentao sobre Normalizao de dados e formas
normais.
Decidi falar um pouco sobre o assunto pois acho que tem tudo a ver com quer trabalhar com bancos de dados.

Mas o que Normalizao de dados?

Consiste em definir o formato lgico adequado para as estruturas de dados identificadas no Modelo de Dados, com o
objetivo de minimizar o espao utilizado pelos dados e garantir a integridade e confiabilidade das informaes.

A Normalizao feita, atravs da anlise dos dados que compem as estruturas, utilizando o conceito chamado
Formas Normais (FN).

As Formas Normais so um conjunto de restries formado por normas a serem vistas a seguir. Falarei somente sobre
as trs primeiras que para mim so as mais importantes.

Primeira Forma Normal 1FN

Para cada tabela, eliminar os grupos repetitivos gerando uma nova tabela, na qual cada um dos itens repetitivos dar
origem a uma nova linha e na qual a chave primria ser a concatenao da chave da tabela original com uma nova
coluna que identifique de modo unvoco a linha.

Processo para obteno da Primeira Forma Normal (1FN)

Exemplo de processo para obteno da 1FN:

Tabela Pedido No Normalizada

1- Definir as chaves alternativas e escolher a chave primria da tabela


- Para definir a chave primria na Tabela Pedido, temos que identificar os atributos (colunas) que possam identificar
de maneira nica as linhas;

- Esses atributos seriam as chaves alternativas;

- Como a nico atributo que caracteriza uma chave alternativa na Relao Pedido o Nmero Pedido, ele
automaticamente a chave primria;

- Acima sublinhamos o atributo Nmero Pedido para identificar que ele uma chave primria;

2- Transformar Atributos compostos em atmicos

3 - Criar uma nova entidade com a chave primria da tabela anterior e o grupo que possui vrias ocorrncias
(estrutura de vetor), a chave primria da nova tabela ser obtida pela concatenao da chave primria da tabela
inicial e a do grupo repetitivo
Postado por Alcio Godoi s 15:23
Normalizao de Dados - Parte 2
Aqui vai o segundo post sobre Normalizao de Dados. Vamos falar sobre a Segunda Forma Normal (2FN).
Uma tabela est na Segunda Forma Normal (2FN) se estiver na 1FN e cada uma das colunas no pertencentes chave
primria no for dependente parcialmente dessa chave.

Processo para obteno da Segunda Forma Normal (2FN)

1- Identificar as colunas que no participam da chave primria da tabela;


2- Para cada um das colunas identificadas, analisar se seu valor determinado por parte, ou pela totalidade da chave;
3- Para as colunas dependentes parcialmente da chave;
- Criar novas tabelas onde a chave primria ser(o) a(s) coluna(s) da chave primria original que
determinou(aram) o valor da coluna analisada;
- Excluir da tabela original as colunas dependentes parcialmente da chave;

Tudo isso parece muito complicado no? Acredito que uma imagem vai demonstrar melhor:

Postado por Alcio Godoi s 21:48


Normalizao de Dados - Parte 3
Terceira Forma Normal 3FN

Uma tabela est na Terceira Forma Normal (3FN) se estiver na 2FN, e se nenhuma coluna no pertencente a chave ficar
determinada transitivamente por esta - dependncia transitiva.
Mas o que dependncia transitiva? Podemos dizer que dependncia transitiva indentificada quano uma coluna alm
de depender da chave primria, depende de outra coluna ou conjunto de colunas.

Processo para obteno da Terceira Forma Normal (3FN)

1- Identificar as colunas que no participam da chave primria da tabela;


2- Para cada uma das colunas identificadas, analisar se seu valor determinado por outra coluna ou conjunto de
colunas;
3- Para as colunas dependentes transitivamente da chave
- Criar novas tabelas onde a chave primria ser(o) a(s) coluna(s) que determinou(aram) o valor da
coluna analisada. Agregar a essas tabelas as colunas dependentes transitivamente;
- Excluir da tabela origem as colunas dependentes transitivamente das chaves, mantendo, porm, a
coluna determinante da transitividade na tabela;

Vamos ao exemplo:

No exemplo acima as colunas Endereo, No., Bairro, Cep e Cidade dependem da coluna CGC que no chave primria
da tabela Pedido (dependncia transitiva). Aps, isto, conseguimos definir um novo esquema com duas tabelas
respeitando a 3FN, Pedido e Cliente.

Pessoal, este o ltimo post sobre Normalizao de Dados. Tentei tratar o assunto de forma resumida, falando somente
sobre as 3 primeiras formas normais.
Select Bsico - Parte 2
Neste post vamos mostrar mais alguns exemplos sobre o comando Select. Falaremos sobre o uso de operadores
lgicos e relacionais.

Operadores Relacionais

Operadores relacionais so utilizado para fazer comparaes entre valores, expresses ou funes.

Operador Descrio
< Menor
> Maior
<= Menor ou igual
>= Maior ou igual
= Igual
<> Diferente

Operadores Lgicos

Os operadores lgicos avaliam a validade de condies retornando: TRUE (Verdadeiro/1), FALSE (Falso/0) ou NULL
(Desconhecido/Sem Valor).

Operador Descrio
Retorna TRUE se as condies
And forem verdadeiras retorna
TRUE
Retorna TRUE se uma das
Or condies for verdadeira
retorna TRUE
Inverte o valor de retorno da
Not
condio

Exemplos

Nestes exemplos utilizaremos as tabelas Funcionario e Departamento criadas no post Tabelas para nossos exemplos

Contedo parcial tabela Funcionrio

IdFUncionario Nome
1 Joaquim Jos
2 Pedro Silva
3 Mrio Mattos
4 Manuel Antnio
5 Maria Aparecida
6 Daniel Borges
7 Diana Cristina
8 Miriam Lagos

Contedo tabela Departamento

IdDepto NomeDepto
1 Administrao
2 Contabilidade
3 TI
4 Almoxarifado
5 Segurana
6 Controladoria
7 Compras
8 Contas a Pagar

_________________________________________________________________________________
1.Funcionrios com cdigo maior que 5

Select IdFuncionario,Nome from Funcionario where IdFuncionario > 5;

IdFuncionario Nome
6 Daniel Borges
7 Diana Cristina
8 Miriam Lagos

_________________________________________________________________________________
2.Funcionrios com cdigo menor igual a 7

Select IdFuncionario,Nome from Funcionario where IdFuncionario <= 7;

IdFuncionario Nome
1 Joaquim Jos
2 Pedro Silva
3 Mrio Mattos
4 Manuel Antnio
5 Maria Aparecida
6 Daniel Borges
7 Diana Cristina

_________________________________________________________________________________
3.Funcionrios com UF igual a 'SP'

Select IdFuncionario,Nome,UF from Funcionario where UF = 'SP';

IdFuncionario Nome UF
1 Joaquim Jos SP
2 Pedro Silva SP
3 Mrio Mattos SP
4 Manuel Antnio SP
5 Maria Aparecida SP
6 Daniel Borges SP
7 Diana Cristina SP
8 Miriam Lagos SP

_________________________________________________________________________________
4.Departamentos com cdigo diferente de 2

Select * from Departamento where IdDepto <> 2;

IdDepto NomeDepto
1 Administrao
3 TI
4 Almoxarifado
5 Segurana
6 Controladoria
7 Compras
8 Contas a Pagar

_________________________________________________________________________________
5.Departamentos com cdigo maior que 1 e menor igual a 5

Select * from Departamento where IdDepto > 1 and IdDepto <= 5;

IdDepto NomeDepto
2 Contabilidade
3 TI
4 Almoxarifado
5 Segurana

_________________________________________________________________________________
6.Departamento com cdigo igual a 2 ou 3 ou maior que 5

Select * from Departamento where IdDepto = 2 or IdDepto =3 or IdDepto >5;

IdDepto NomeDepto
2 Contabilidade
3 TI
6 Controladoria
7 Compras
8 Contas a Pagar

_________________________________________________________________________________
7.Departamento com cdigo direrente de 3 - utilizando Not

Select * from Departamento where Not IdDepto = 3;

IdDepto NomeDepto
1 Administrao
2 Contabilidade
4 Almoxarifado
5 Segurana
6 Controladoria
7 Compras
8 Contas a Pagar

_________________________________________________________________________________
8.Utilizando parntesis para agrupar condies

Neste exemplo fazemos uma seleo de funcionrios cujos cdigos so 1 ou 3 ou que possuam o cdigo de
departamento maior igual a 6 e menor igual a 10

Select IdFuncionario,Nome,IdDepto from Funcionario where (IdFuncionario = 1 or IdFuncionario = 3) or (IdDepto >= 6


and IdDepto <= 10);

IdFuncionario Nome IdDepto


1 Joaquim Jos 1
3 Mrio Mattos 3
6 Daniel Borges 6
7 Diana Cristina 7
8 Miriam Lagos 8

_________________________________________________________________________________
9.Utilizando parntesis e not

Neste exemplo invertemos as condies do exemplo anterior

Select IdFuncionario,Nome,IdDepto from Funcionario where not (IdFuncionario = 1 or IdFuncionario = 3) or not


(IdFuncionario >= 6 and IdFuncionario <= 10);

IdFuncionario Nome IdDepto


1 Joaquim Jos 1
2 Pedro Silva 2
3 Mrio Mattos 3
4 Manuel Antnio 4
5 Maria Aparecida 5
6 Daniel Borges 6
7 Diana Cristina 7
8 Miriam Lagos 8

Por enquanto s. Espero que gostem.

Veja tambm

Select Bsico - Parte 1


Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 3
Vamos falar um pouco sobre o operador BETWEEN.

Sintaxe BETWEEN

expresso_teste [not] between expresso_inicial and expresso_final

expresso_teste - expresso a ser testada no intervalo de expresso_inicial e expresso_final

not - indica que o resultado do predicado deve ser invertido.

expresso_inicial - qualquer expresso vlida

expresso_final - qualquer expresso vlida

and - identifica em qual intervalo expresso_teste deve estar entre expresso_inicial e expresso_inicial

Observao
expresso_teste, expresso_inicial e expresso_final devem ser do mesmo tipo.
_________________________________________________________________________________

Exemplos

Nestes exemplos utilizaremos a tabela Funcionario criada no post Tabelas para nossos exemplos

Contedo parcial tabela Funcionrio

IdFUncionario Nome
1 Joaquim Jos
2 Pedro Silva
3 Mrio Mattos
4 Manuel Antnio
5 Maria Aparecida
6 Daniel Borges
7 Diana Cristina
8 Miriam Lagos

_________________________________________________________________________________
1.Selecionando funcionrios cujo cdigo esteja entre 3 e 6

Select IdFuncionario,Nome From Funcionario where IdFuncionario between 3 and 6;

IdFuncionario Nome
3 Mrio Mattos
4 Manuel Antnio
5 Maria Aparecida
6 Daniel Borges

Uma outra maneira de obter o mesmo resultado acima:

Select IdFuncionario,Nome From Funcionario where IdFuncionario >= 3 and IdFuncionario <= 6;

_________________________________________________________________________________
2.Selecionando funcionrios cujo cdigo no esteja entre 3 e 6

Select IdFuncionario,Nome From Funcionario Where IdFuncionario not between 3 and 6;


IdFuncionario Nome
1 Joaquim Jos
2 Pedro Silva
7 Diana Cristina
8 Miriam Lagos

Uma outra maneira de obter o mesmo resultado acima:

Select IdFuncionario,Nome From Funcionario where not (IdFuncionario >= 3 and IdFuncionario <= 6);
________________________________________________________________________________
Por enquanto s pessoal.

Veja tambm

Select Bsico - Parte 1


Select Bsico - Parte 2
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 4
Continuando nossa srie de posts sobre Select vamos falar um pouco sobre o operador IN.
Sintaxe IN

expresso_teste [not] in ( subquery | expresso [ ,..., n] )

expresso_teste - Qualquer expresso vlida

not - Indica que o resultado do predicado deve ser invertido.

subquery - uma subconsulta que possu como resultado uma coluna que server para testar se um dos
valores corresponde a expresso_teste

expresso - uma lista de expresses para testar se um dos valores corresponde a expresso_teste

Observao
expresso_teste, subquery e expresso devem ser do mesmo tipo.

_________________________________________________________________________________
Exemplos

Nestes exemplos utilizaremos a tabela Funcionario criada no post Tabelas para nossos exemplos

Contedo parcial tabela Funcionrio

IdFUncionario Nome
1 Joaquim Jos
2 Pedro Silva
3 Mrio Mattos
4 Manuel Antnio
5 Maria Aparecida
6 Daniel Borges
7 Diana Cristina
8 Miriam Lagos

_________________________________________________________________________________
1.Selecionando funcionrios com cdigo de departamento igual a 1,5 e 7

Select IdFuncionario,Nome From Funcionario where IdDepto in (1,5,7);

IdFuncionario Nome
1 Joaquim Jos
5 Maria Aparecida
7 Diana Cristina

Uma outra maneira de obter o mesmo resultado acima:

Select IdFuncionario,Nome From Funcionario where IdDepto=1 or IdDepto=5 or IdDepto=7;


_________________________________________________________________________________
2.Selecionando funcionrios com cdigo de departamento diferente de 1,5 e 7

Select IdFuncionario,Nome From Funcionario where IdDepto not in (1,5,7);


IdFuncionario Nome
2 Pedro Silva
3 Mrio Mattos
4 Manuel Antnio
6 Daniel Borges
8 Miriam Lagos

Uma outra maneira de obter o mesmo resultado acima:

Select IdFuncionario,Nome From Funcionario where not (IdDepto=1 or IdDepto=5 or IdDepto=7);


________________________________________________________________________________
No falaremos agora sobre subquerys, decicaremos um post somente para este assunto.

Por enquanto s pessoal.

Veja tambm

Select Bsico - Parte 1


Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 5
Que tal falarmos um pouco sobre operadores matmaticos?
Na linguagem SQL padro temos poucos operadores matemticos. O que acontece que cada SGDB acaba suprindo
esta lacuna com funes especficas, falaremos somente sobre os operadores padro.

Operadores Matemticos

Operador Funo
+ Soma
- Subtrao
* Multiplicao
/ Diviso

____________________________________________________________________________________
Exemplos

Primeiro vamos criar uma tabela para utilizar em nossos exemplos:

-- Cria Tabela Produto


Create table Produto (IdProduto int, NomeProduto varchar(100), PrecoUnitario decimal(10,2), QtdeEstoque int);

-- Inclui dados
Insert into Produto (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (1,'TV LCD 32',1250.50,120);
Insert into Produto (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (2,'DVD',220.80,300);
Insert into Produto (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (3,'Notebook i5',1300.20,170);
Insert into Produto (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (4,'Pendrive 2MB',20.75,100);
Insert into Produto (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (5,'Camera Fotografica',179.20,255);
Insert into Produto (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (6,'Filmadora',350.77,75);
Insert into Produto (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (7,'Blu-Ray',319.90,500);
Insert into Produto (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (8,'GPS',377.89,180);
Insert into Produto (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (9,'Celular',89.99,277);
Insert into Produto (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (10,'MP3',183.77,280);

Tabela Produto

IdProduto NomeProduto PrecoUnitario QtdeEstoque


1 TV LCD 32 1050.50 120
2 DVD 220.80 300
3 Notebook i5 1300.20 170
4 Pendrive 2MB 20.75 100
5 Camera Fotografica 179.20 255
6 Filmadora 350.77 75
7 Blu-Ray 319.90 500
8 GPS 377.89 180
9 Celular 89.99 277
10 MP3 183.77 280

___________________________________________________________________________________
1.Acrescentando 10% sobre preo unitrio dos produtos cuja quantidade de estoque for maior que 200

Select
NomeProduto,
PrecoUnitario,
PrecoUnitario * 1.1 AS PrecoUnitarioReajustado,
QtdeEstoque
From Produto where QtdeEstoque > 200;

NomeProduto PrecoUnitario PrecoUnitarioReajustado QtdeEstoque


DVD 220.80 242.880 300
Camera Fotografica 179.20 197.120 255
Blu-Ray 319.90 351.890 500
Celular 89.99 98.989 277
MP3 183.77 202.147 280

Neste exemplo criamos uma coluna calculada chamada PrecoUnitarioReajustado. Repare que aps a
expresso PrecoUnitario * 1.1 utilizamos 'AS' que indica que PrecoUnitarioReajustado um alias (apelido para coluna),
podemos criar apelidos para qualquer coluna.

___________________________________________________________________________________
2.Utizando expresses matemticas na clusula WHERE
Select
NomeProduto,
PrecoUnitario,
PrecoUnitario * 1.1 AS PrecoUnitarioReajustado,
QtdeEstoque
From Produto where PrecoUnitario * 1.1 > 400;

NomeProduto PrecoUnitario PrecoUnitarioReajustado QtdeEstoque


TV LCD 32 1050.50 1155.550 120
Notebook i5 1300.20 1430.220 170
GPS 377.89 415.679 180

No exemplo acima utilizamos a mesma expresso matemtica da coluna PrecoUnitarioReajustado na clusula WHERE,
para selecionar produtos que tenham preo unitrio acrescido de 10% maior que 400.
___________________________________________________________________________________

3.Precedncia dos operadores

Temos que levar em considerao que os operadores possuem a seguinte precedncia na realizao dos cculos: *, /, +
e -. Podemos mudar a ordem disto com a utilizao de parnteses.

Veja o exemplo abaixo:

Select
NomeProduto,
PrecoUnitario,
PrecoUnitario + 5 * 1.1 AS Reajuste1,
(PrecoUnitario + 5) * 1.1 AS Reajuste2,
QtdeEstoque
From Produto
Where NomeProduto In ('DVD','GPS');

NomeProduto PrecoUnitario Reajuste1 Reajuste2 QtdeEstoque


DVD 220.80 226.30 248.380 300
GPS 377.89 383.39 421.179 180

Verifique que o clculo da coluna Reajuste1 possu um resultado diferente da coluna Reajuste2.
O clculo das colunas feito da seguinte maneira:
- Reajuste1 = 5 * 1.1 e depois soma-se o PrecoUnitario

Equanto:

- Reajuste2 = (PrecoUnitario + 5) e depois multiplica-se por 1.1


___________________________________________________________________________________

Por enquanto isso pessoal.

Veja tambm

Select Bsico - Parte 1


Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 6
Select Bsico - Parte 6
Neste post vamos falar sobre a clusula DISTINCT.
Para comear vamos incluir algumas linhas na tabela Funcionario (ver Tabelas para nossos exemplos):

Insert Into Funcionario


(IdFuncionario,Nome,DDD,Fone,Email,IdDepto,Logradouro,NrLogradouro,ComplementoEndereco,Bairro,Cidade,UF,CEP
)
Values
(9,'Jos Maria','11','99999999','jm@xpto.com',1,'R ZZZZZ','55','','Vila Verde','Fortaleza','CE','12345678'),
(10,'Paula Silva','12','10101010','ps@xpto.com',2,'Av KKKKK','20','','Penha','Rio de Janeiro','RJ','11111111'),
(11,'Vanderlei Santos','13','51515151','vs@xpto.com',3,'R XXXX','23','','Tatuape','Guarulhos','SP','22222222'),
(12,'Josefa Cristina','41','78787878','jc@xpto.com',4,'R YYYYY','77','','Perdizes','Pederneiras','AM','33333333'),
(13,'Carla Maria','21','97979797','cm@xpto.com',5,'R XYZ','99','','Morumbi','Agudos','RJ','66666666');
___________________________________________________________________________________

Vejamos o resultado do Select abaixo:

Select bairro, cidade, uf from Funcionario;

bairro cidade uf
Sao Geraldo Sao Paulo SP
Sao Geraldo Sao Paulo SP
Sao Geraldo Sao Paulo SP
Sao Geraldo Sao Paulo SP
Sao Geraldo Sao Paulo SP
Sao Geraldo Sao Paulo SP
Sao Geraldo Sao Paulo SP
Sao Geraldo Sao Paulo SP
Vila Verde Fortaleza CE
Penha Rio de Janeiro RJ
Tatuape Guarulhos SP
Perdizes Pederneiras AM
Morumbi Agudos RJ

Reparem que as oito primeiras linhas se repetem. Mas como fazer para que s apaream linhas distintas em nossa
consulta?

A resposta simples basta utilzarmos a clusula DISTINCT. A clusula DISTINCT serve para eliminar as linhas
repetidas de uma instruo Select.
___________________________________________________________________________________

1.Eliminando linhas repetidas

Select Distinct bairro, cidade, uf from Funcionario;

bairro cidade uf
Sao Geraldo Sao Paulo SP
Vila Verde Fortaleza CE
Penha Rio de Janeiro RJ
Tatuape Guarulhos SP
Perdizes Pederneiras AM
Morumbi Agudos RJ

___________________________________________________________________________________
2.Selecionando UFs distintas

Select Distinct uf from Funcionario;

uf
SP
CE
RJ
AM
___________________________________________________________________________________

Por enquanto s pessoal.

Veja tambm

Select Bsico - Parte 1


Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 7
Como ordenar o resultado de uma consulta SQL?

Para ordenar o resultado de uma consulta SQL basta utilizarmos a clusula Order by.

Sintaxe

ORDER BY expresso_order_by [ ASC | DESC ]

expresso_order_by - epecifica qual coluna ou expresso da consulta deve ser ordenada. Ao invs de usar o nome de
uma coluna podemos usar um nmero inteiro positivo que representa a posio da coluna na lista de seleo.

ASC | DESC - indica se a coluna deve ser ordenada de maneira ascendente (ASC) ou descendente (DESC). O padro
a ordenao ascendente.
___________________________________________________________________________________
Nos exemplos abaixo utilizaremos as tabelas criadas e populadas nos posts: Tabelas para nossos exemplos e Select
Bsico - Parte 6

1.Ordenando a tabela Funcionario pelo nome de forma ascendente

Select IdFuncionario,Nome,Cidade,UF from Funcionario Order by Nome;

IdFuncionario Nome Cidade UF


13 Carla Maria Agudos RJ
6 Daniel Borges Sao Paulo SP
7 Diana Cristina Sao Paulo SP
1 Joaquim Jos Sao Paulo SP
9 Jos Maria Fortaleza CE
12 Josefa Cristina Pederneiras AM
4 Manuel Antnio Sao Paulo SP
5 Maria Aparecida Sao Paulo SP
3 Mrio Mattos Sao Paulo SP
8 Miriam Lagos Sao Paulo SP
10 Paula Silva Rio de Janeiro RJ
2 Pedro Silva Sao Paulo SP
11 Vanderlei Santos Guarulhos SP
___________________________________________________________________________________
2.Ordenando a tabela Funcionario pelo nome de forma descendente

Select IdFuncionario,Nome,Cidade,UF from Funcionario Order by 2 Desc;

IdFuncionario Nome Cidade UF


11 Vanderlei Santos Guarulhos SP
2 Pedro Silva Sao Paulo SP
10 Paula Silva Rio de Janeiro RJ
8 Miriam Lagos Sao Paulo SP
3 Mrio Mattos Sao Paulo SP
5 Maria Aparecida Sao Paulo SP
4 Manuel Antnio Sao Paulo SP
12 Josefa Cristina Pederneiras AM
9 Jos Maria Fortaleza CE
1 Joaquim Jos Sao Paulo SP
7 Diana Cristina Sao Paulo SP
6 Daniel Borges Sao Paulo SP
13 Carla Maria Agudos RJ

No exemplo acima utilizamos o nmero 2 no lugar do nome do funcionrio para fazer a ordenao.
___________________________________________________________________________________
3.Utilizando expresses para ordenar

Select IdProduto,NomeProduto,PrecoUnitario,QtdeEstoque,PrecoUnitario * QtdeEstoque as ValorEsqoue from Produto


Order by PrecoUnitario * QtdeEstoque Desc;

IdProduto NomeProduto PrecoUnitario QtdeEstoque ValorEsqoue


3 Notebook i5 1300.20 170 221034.00
7 Blu-Ray 319.90 500 159950.00
1 TV LCD 32 1050.50 120 126060.00
8 GPS 377.89 180 68020.20
2 DVD 220.80 300 66240.00
10 MP3 183.77 280 51455.60
5 Camera Fotografica 179.20 255 45696.00
6 Filmadora 350.77 75 26307.75
9 Celular 89.99 277 24927.23
4 Pendrive 2MB 20.75 100 2075.00
___________________________________________________________________________________

Por enquanto s pessoal.

Veja tambm

Select Bsico - Parte 1


Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 8
Neste post vamos fazer sobre o operador LIKE.
Com o operador LIKE conseguimos fazer comparaes mais elaboradas entre cadeias caracteres.

Sintaxe

expresso principal [NOT] LIKE expresso a ser pesquisada

expresso principal - a qualquer expresso caractere vlida. Esta expresso sofrer a pesquisa.

expresso a ser pesquisada - a expresso caractere que ser pesquisada na expresso principal. Nesta expresso
podemos utilizar os caracteres coringa.

Caractere Coringa Descrio


% Qualquer cadeia de caracteres
_ (sublinhado) Qualquer caractere nic
_____________________________________________________________________________________
Exemplos

Nos exemplos abaixo utilizaremos as tabelas criadas e populadas nos posts: Tabelas para nossos exemplos e Select
Bsico - Parte 6

1.Selecionando funcionrios comecem com a letra "J"

Select IdFuncionario,Nome,Bairro,Cidade from Funcionario where Nome like 'J%';

IdFuncionario Nome Bairro Cidade


1 Joaquim Jos Sao Geraldo Sao Paulo
9 Jos Maria Vila Verde Fortaleza
12 Josefa Cristina Perdizes Pederneiras
_____________________________________________________________________________________
2.Selecionando funcionrios terminem com a letra "A"

Select IdFuncionario,Nome,Bairro,Cidade from Funcionario where Nome like '%A';

IdFuncionario Nome Bairro Cidade


2 Pedro Silva Sao Geraldo Sao Paulo
5 Maria Aparecida Sao Geraldo Sao Paulo
7 Diana Cristina Sao Geraldo Sao Paulo
9 Jos Maria Vila Verde Fortaleza
10 Paula Silva Penha Rio de Janeiro
12 Josefa Cristina Perdizes Pederneiras
13 Carla Maria Morumbi Agudos
_____________________________________________________________________________________
3.Selecionando funcionrios que possuam a letra "M" em qualquer parte do nome

Select IdFuncionario,Nome,Bairro,Cidade from Funcionario where Nome like '%M%';

IdFuncionario Nome Bairro Cidade


1 Joaquim Jos Sao Geraldo Sao Paulo
3 Mrio Mattos Sao Geraldo Sao Paulo
4 Manuel Antnio Sao Geraldo Sao Paulo
5 Maria Aparecida Sao Geraldo Sao Paulo
8 Miriam Lagos Sao Geraldo Sao Paulo
9 Jos Maria Vila Verde Fortaleza
13 Carla Maria Morumbi Agudos
_____________________________________________________________________________________
4.Selecionando funcionrios cuja penltima letra seja "O"

Select IdFuncionario,Nome,Bairro,Cidade from Funcionario where Nome like '%O_';

IdFuncionario Nome Bairro Cidade


3 Mrio Mattos Sao Geraldo Sao Paulo
8 Miriam Lagos Sao Geraldo Sao Paulo
11 Vanderlei Santos Tatuape Guarulhos
_____________________________________________________________________________________
5.Selecionando funcionrios cuja segunda letra seja "A"

Select IdFuncionario,Nome,Bairro,Cidade from Funcionario where Nome like '_A%';

IdFuncionario Nome Bairro Cidade


3 Mrio Mattos Sao Geraldo Sao Paulo
4 Manuel Antnio Sao Geraldo Sao Paulo
5 Maria Aparecida Sao Geraldo Sao Paulo
6 Daniel Borges Sao Geraldo Sao Paulo
10 Paula Silva Penha Rio de Janeiro
11 Vanderlei Santos Tatuape Guarulhos
13 Carla Maria Morumbi Agudos

_____________________________________________________________________________________
Por enquanto s pessoal.

Veja tambm

Select Bsico - Parte 1


Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 7
Select - Utilizando a Clusula Union
Como combinar o resultado de duas consultas ou mais em um nico resultado?
Para combinar duas ou mais consultas e obter um nico resultado utilizamos a clusula UNION.

Sintaxe

UNION [ALL]

UNION - Combina vrias consultas em um nico resultado.

ALL- Traz todas as linhas para o resultado. Caso no seja especificado sero trazidas somente as linhas distintas.

Observaes

1 - O nmero de colunas de cada Select deve ser o mesmo;


2 - As colunas correspondentes de cada Select devem ter seus tipos de dados compatveis;
3 - Podemos utilizar ORDER BY porm somente no ltimo Select;
_________________________________________________________________________________
Exemplos

Nos exemplos abaixo utilizaremos as tabelas criadas e populadas nos posts: Tabelas para nossos exemplos e Select
Bsico - Parte 6

Alm disso vamos criar mais duas tabelas: ProdutoA e ProdutoB

-- ProdutoA
Create table ProdutoA (IdProduto int, NomeProduto varchar(100), PrecoUnitario decimal(10,2), QtdeEstoque int);

Insert into ProdutoA (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (1,'TV LCD 40',102.50,130);
Insert into ProdutoA (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (2,'DVD',280.80,300);
Insert into ProdutoA (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (3,'Notebook i7',130.50,190);
Insert into ProdutoA (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (4,'Pendrive 2MB',20.75,100);
Insert into ProdutoA (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (5,'Camera Fotografica',179.20,255);

-- ProdutoB
Create table ProdutoB (IdProduto int, NomeProduto varchar(100), PrecoUnitario decimal(10,2), QtdeEstoque int);

Insert into ProdutoB (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (10,'Filmadora',350.77,75);


Insert into ProdutoB (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (20,'iPhone',319.90,500);
Insert into ProdutoB (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (28,'iPod',77.89,180);
Insert into ProdutoB (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (39,'Geladeira',489.99,277);
Insert into ProdutoB (IdProduto, NomeProduto, PrecoUnitario, QtdeEstoque) Values (110,'Fogo',283.77,280);

Tabela Produto

NomeProduto
TV LCD 32
DVD
Notebook i5
Pendrive 2MB
Camera Fotografica
Filmadora
Blu-Ray
GPS
Celular
MP3
Tabela Produto A

NomeProduto
TV LCD 40
DVD
Notebook i7
Pendrive 2MB
Camera Fotografica

Tabela Produto B

NomeProduto
Filmadora
iPhone
iPod
Geladeira
Fogo
_________________________________________________________________________________
Exemplos

1.Selecionando todas as linhas das tabelas Produto, ProdutoA e ProdutoB

Select NomeProduto,'Tabela Produto' as Tabela From blog.Produto


Union All
Select NomeProduto,'Tabela ProdutoA' as Tabela From blog.ProdutoA
Union All
Select NomeProduto,'Tabela ProdutoB' as Tabela From blog.ProdutoB;

NomeProduto Tabela
TV LCD 32 Tabela Produto
DVD Tabela Produto
Notebook i5 Tabela Produto
Pendrive 2MB Tabela Produto
Camera Fotografica Tabela Produto
Filmadora Tabela Produto
Blu-Ray Tabela Produto
GPS Tabela Produto
Celular Tabela Produto
MP3 Tabela Produto
TV LCD 40 Tabela ProdutoA
DVD Tabela ProdutoA
Notebook i7 Tabela ProdutoA
Pendrive 2MB Tabela ProdutoA
Camera Fotografica Tabela ProdutoA
Filmadora Tabela ProdutoB
iPhone Tabela ProdutoB
iPod Tabela ProdutoB
Geladeira Tabela ProdutoB
Fogo Tabela ProdutoB

Neste exemplo foi criada uma coluna chamada "Tabela" para sabermos qual a tabela de origem de cada produto.
_________________________________________________________________________________
2.Selecionando e ordenando produtos distintos

Select NomeProduto as Tabela From Produto


Union
Select NomeProduto as Tabela From ProdutoA
Union
Select NomeProduto as Tabela From ProdutoB Order by 1;

Tabela
Blu-Ray
Camera Fotografica
Celular
DVD
Filmadora
Fogo
Geladeira
GPS
iPhone
iPod
MP3
Notebook i5
Notebook i7
Pendrive 2MB
TV LCD 32
TV LCD 40

Neste exemplo no utilizamos a clusula ALL, com isso o resultado final possu os produtos sem duplicidade. Tambm
foi utilizado um ORDER BY - repare que o ORDER BY foi colocado no ltimo Select.
_________________________________________________________________________________

Por enquanto s pessoal.

Veja tambm

Select Bsico - Parte 1


Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 7
Select Bsico - Parte 8
Manipulando Dados - INSERT
Nesta srie de posts falaremos sobre comandos de manipulao de dados. Vamos comear pelo comando Insert.
O comando INSERT adiciona linhas em uma determinada tabela.

Sintaxe

INSERT [INTO]
nome da tabela [ ( lista de colunas ) ]
VALUES
( lista de expresses )

INTO - parmetro opcional para indicar o nome da tabela;

nome da tabela - nome da tabela que receber os dados;

lista de colunas - colunas que recebero os dados;

VALUES - introduz a lista de expresses;

lista de expresses - valores fixos e expresses;

__________________________________________________________________________________
Exemplos

Nos exemplos abaixo utilizaremos a tabela Produto ver: Tabelas para nossos exemplos e Select Bsico - Parte 6

Tabela Produto

IdProduto NomeProduto PrecoUnitario QtdeEstoque


1 TV LCD 32 1050.50 120
2 DVD 220.80 300
3 Notebook i5 1300.20 170
4 Pendrive 2MB 20.75 100
5 Camera Fotografica 179.20 255
6 Filmadora 350.77 75
7 Blu-Ray 319.90 500
8 GPS 377.89 180
9 Celular 89.99 277
10 MP3 183.77 280

___________________________________________________________________________________
1.Utilizando todos os parmetros

Insert Into Produto (IdProduto,NomeProduto,PrecoUnitario,QtdeEstoque) Values (11,"Fogo de 4 Bocas",500,300);

___________________________________________________________________________________
2.No especificando a lista de colunas e utilizando expresses

Insert Produto Values (12,"Geladeira 270 litros",500,300*5);

Repare que neste exemplo utilizamos uma expresso para inserir o dado da coluna QtdeEstoque (300*5).
___________________________________________________________________________________

Tabela Produto depois dos Inserts


IdProduto NomeProduto PrecoUnitario QtdeEstoque
1 TV LCD 32 1050.50 120
2 DVD 220.80 300
3 Notebook i5 1300.20 170
4 Pendrive 2MB 20.75 100
5 Camera Fotografica 179.20 255
6 Filmadora 350.77 75
7 Blu-Ray 319.90 500
8 GPS 377.89 180
9 Celular 89.99 277
10 MP3 183.77 280
11 Fogo de 4 Bocas 500.00 300
12 Geladeira 270 litros 500.00 1500

___________________________________________________________________________________

Por enquanto s pessoal.

Veja tambm

Select Bsico - Parte 1


Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 7
Select Bsico - Parte 8
Manipulando Dados - DELETE
Neste post vamos mostrar como excluir linhas de uma tabela.

O comando DELETE exclui linhas de uma determinada tabela.

Sintaxe

DELETE
[ FROM { <tabela> | <view>} [ ,...n ] ]
[ WHERE <condio> ]

Onde:

<tabela> | <view> - Tabela(s) ou view(s) utilizada(s) na excluso.

WHERE - clusula usada para definio das condies.

<condio> - Define a condio para excluso.

Observao: CUIDADO, caso a clusula WHERE no seja utilizada todas as linhas da tabela sero excluidas.
____________________________________________________________________________________
Exemplos

Nos exemplos abaixo utilizaremos a tabelas Produto criada no post Select Bsico - Parte 5

Tabela Produto

IdProduto NomeProduto PrecoUnitario QtdeEstoque


1 TV LCD 32 1050.50 120
2 DVD 220.80 300
3 Notebook i5 1300.20 170
4 Pendrive 2MB 20.75 100
5 Camera Fotografica 179.20 255
6 Filmadora 350.77 75
7 Blu-Ray 319.90 500
8 GPS 377.89 180
9 Celular 89.99 277
10 MP3 183.77 280
11 Fogo de 4 Bocas 500.00 300
12 Geladeira 270 litros 500.00 1500

1. Excluindo produtos com cdigo maior que 10

Delete From Produto Where IdProduto > 10;

IdProduto NomeProduto PrecoUnitario QtdeEstoque


1 TV LCD 32 1050.50 120
2 DVD 220.80 300
3 Notebook i5 1300.20 170
4 Pendrive 2MB 20.75 100
5 Camera Fotografica 179.20 255
6 Filmadora 350.77 75
7 Blu-Ray 319.90 500
8 GPS 377.89 180
9 Celular 89.99 277
10 MP3 183.77 280
___________________________________________________________________________________

2. Utilizando uma expresso para excluir produtos

Delete From Produto Where PrecoUnitario > 5*200;

IdProduto NomeProduto PrecoUnitario QtdeEstoque


2 DVD 220.80 300
4 Pendrive 2MB 20.75 100
5 Camera Fotografica 179.20 255
6 Filmadora 350.77 75
7 Blu-Ray 319.90 500
8 GPS 377.89 180
9 Celular 89.99 277
10 MP3 183.77 280
___________________________________________________________________________________

Por enquanto s pessoal.

Veja tambm

Select Bsico - Parte 1


Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 7
Select Bsico - Parte 8
Select - Utilizando a clusula UNION
Manipulando Dados - UPDATE
O comando UPDATE permite a alterao dos dados de uma determinada tabela.
Sintaxe

UPDATE
<tabela> | <view>
SET coluna [ ,coluna...] = { expresso }
[WHERE <condio>]

Onde:

<tabela> | <view> - Tabela ou view utilizada na alterao.

SET - Especifica a lista de colunas que sero alteradas.

coluna - Coluna que ser alterada.

expresso - Qualquer expresso vlida.

WHERE - Clusula usada para definio das condies.

<condio> - Define a condio para alterao dos dados.

Observao: CUIDADO, caso a clusula WHERE no seja utilizada todas as linhas da tabela sero alteradas.
____________________________________________________________________________________
Exemplos

Nos exemplos abaixo utilizaremos a tabelas Produto criada no post Select Bsico - Parte 5

Tabela Produto

IdProduto NomeProduto PrecoUnitario QtdeEstoque


1 TV LCD 32 1250.50 120
2 DVD 220.80 300
3 Notebook i5 1300.20 170
4 Pendrive 2MB 20.75 100
5 Camera Fotografica 179.20 255
6 Filmadora 350.77 75
7 Blu-Ray 319.90 500
8 GPS 377.89 180
9 Celular 89.99 277
10 MP3 183.77 280

1. Aumentando em 10% o preo de todos os produtos

Update Produto Set PrecoUnitario = PrecoUnitario * 1.1;

IdProduto NomeProduto PrecoUnitario QtdeEstoque


1 TV LCD 32 1375.55 120
2 DVD 242.88 300
3 Notebook i5 1430.22 170
4 Pendrive 2MB 22.83 100
5 Camera Fotografica 197.12 255
6 Filmadora 385.85 75
7 Blu-Ray 351.89 500
8 GPS 415.68 180
9 Celular 98.99 277
10 MP3 202.15 280
___________________________________________________________________________________

2. Aumentando em 100 a quantidade de estoque dos produtos com cdigo maior que 4

Update Produto Set QtdeEstoque = QtdeEstoque + 100 Where IdProduto > 4;

IdProduto NomeProduto PrecoUnitario QtdeEstoque


1 TV LCD 32 1375.55 120
2 DVD 242.88 300
3 Notebook i5 1430.22 170
4 Pendrive 2MB 22.83 100
5 Camera Fotografica 197.12 255
6 Filmadora 385.85 75
7 Blu-Ray 351.89 500
8 GPS 415.68 180
9 Celular 98.99 277
10 MP3 202.15 280

___________________________________________________________________________________
3. Aumentando em 100 a quantidade de estoque e acrescentado 5% ao preo unitrio dos produtos com cdigo
menor que 5

Update
Produto Set
QtdeEstoque = QtdeEstoque + 100,
PrecoUnitario = PrecoUnitario * 1.05
Where IdProduto < 5;

IdProduto NomeProduto PrecoUnitario QtdeEstoque


1 TV LCD 32 1444.33 220
2 DVD 255.02 400
3 Notebook i5 1501.73 270
4 Pendrive 2MB 23.97 200
5 Camera Fotografica 197.12 355
6 Filmadora 385.85 175
7 Blu-Ray 351.89 600
8 GPS 415.68 280
9 Celular 98.99 377
10 MP3 202.15 380

___________________________________________________________________________________
Por enquanto s pessoal.

Veja tambm

Manipulando Dados - DELETE


Select Bsico - Parte 1
Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 7
Select Bsico - Parte 8
Select - Utilizando a clusula UNION
Select - Agrupando Dados
Neste post falaremos como agrupar dados e como utilizar funes de agregao.
Para agrupar dados em consultas SQL utilizamos a clusula GROUP BY.

Sintaxe

GROUP BY expresso,[...,n]

expresso - qualquer expresso vlida.

Observao: As expresses ou colunas que forem utilizadas no SELECT e no forem utilizadas em funes de
agregao devem ser especificadas na clusula GROUP BY.

____________________________________________________________________________________
Funes de Agregao

Funo Descrio Sintaxe


AVG Retorna o valor mdio AVG ( [ALL | DISTINCT] expresso )
MIN Retorna o menor valor MIN ( [ALL | DISTINCT] expresso )
MAX Retorna o maior valor MAX ( [ALL | DISTINCT] expresso )
SUM Retorna a soma SUM ( [ALL | DISTINCT] expresso )
COUNT Retorna o nmero de itens COUNT ( { [ALL | DISTINCT] expresso} | * )

expresso - qualquer expresso vlida.


____________________________________________________________________________________
Exemplos

Nos exemplos abaixo utilizaremos as tabelas Funcionario e Produto criadas e populadas nos posts: Tabelas para nossos
exemplos e Select Bsico - Parte 5

1. Agrupando os dados da tabela Funcionrio por Bairro e UF

Select Bairro,UF From Funcionario Group by Bairro,UF;

Bairro UF
Morumbi RJ
Penha RJ
Perdizes AM
Sao Geraldo SP
Tatuape SP
Vila Verde CE

____________________________________________________________________________________

2. Agrupando os dados da tabela Funcionrio por Bairro, UF e contando as linhas de cada grupo

Select Bairro,UF,Count(*) as Total From Funcionario Group by Bairro,UF;

Bairro UF Total
Morumbi RJ 1
Penha RJ 1
Perdizes AM 1
Sao Geraldo SP 8
Tatuape SP 1
Vila Verde CE 1
____________________________________________________________________________________

3. Selecionando o menor e o maior preo unitrio da tabela produto

Select
Max(PrecoUnitario) As MaiorPrecoUnitario,
Min(PrecoUnitario) As MenorPrecoUnitario
From Produto;

MaiorPrecoUnitario MenorPrecoUnitario
1501.73 23.97

____________________________________________________________________________________

4. Valor total do estoque

Select Sum(PrecoUnitario * QtdeEstoque) As ValorTotalEstoque From Produto;

ValorTotalEstoque
1409183.68
____________________________________________________________________________________

5. Mdia de preos dos produtos

Select AVG(PrecoUnitario) As MediaPrecoUnitario From Produto;

MediaPrecoUnitario
487.673000
___________________________________________________________________________________
Por enquanto s pessoal.

Veja tambm

Manipulando Dados - INSERT


Manipulando Dados - UPDATE
Manipulando Dados - DELETE
Select Bsico - Parte 1
Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 7
Select Bsico - Parte 8
Select - Utilizando a clusula UNION
Joins - Parte 1 (Inner Join)
Nesta srie de posts falaremos sobre Joins.

Devemos lembrar que um banco de dados relacional baseado na teoria dos conjuntos.

Um Join nada mais do que uma juno ou relacionamento entre tabelas. Em um banco de dados relacional uma
tabela como um conjunto.

Inner Join - A figura ao lado (diagrama de Venn) representa a interseco entre dois conjuntos. Esta figura sempre
utlizada por meu amigo Edison Cotrim para explicar para algum que no entende quase nada sobre SQL o que
um Inner Join.

Resumindo um Inner Join a interseco entre duas ou mais tabelas.

Sintaxe

Inner Join tabela | view On condio

tabela | view - tabela ou view que ser relacionada no Join.

On - clusula onde a condio ser especificada.

condio - condio que define o Join.

Agora chega de teoria e vamos ao que interessa.

_____________________________________________________________________________________

Exemplo

Para o exemplo a seguir vamos utilizar as tabelas Funcionario e Departamento criadas no post Tabelas para nossos
exemplos

Contedo parcial tabela Funcionario Tabela Departamento

IdFuncionario Nome IdDepto IdDepto NomeDepto


1 Joaquim Jos 1 1 Administrao
2 Pedro Silva 2 2 Contabilidade
3 Mrio Mattos 3 3 TI
4 Manuel Antnio 4 4 Almoxarifado
5 Maria Aparecida 5 5 Segurana
6 Daniel Borges 6 6 Controladoria
7 Diana Cristina 7 7 Compras
8 Miriam Lagos 8 8 Contas a Pagar
9 Jos Maria 1
10 Paula Silva 2
11 Vanderlei Santos 3
12 Josefa Cristina 4
13 Carla Maria 5

Relacionando os funcionrios aos seus respectivos departamentos

Select
f.IdFuncionario, f.Nome, d.IdDepto, d.NomeDepto
From
Funcionario f
Inner Join Departamento d On (d.IdDepto = f.IdDepto);

IdFuncionario Nome IdDepto NomeDepto


1 Joaquim Jos 1 Administrao
2 Pedro Silva 2 Contabilidade
3 Mrio Mattos 3 TI
4 Manuel Antnio 4 Almoxarifado
5 Maria Aparecida 5 Segurana
6 Daniel Borges 6 Controladoria
7 Diana Cristina 7 Compras
8 Miriam Lagos 8 Contas a Pagar
9 Jos Maria 1 Administrao
10 Paula Silva 2 Contabilidade
11 Vanderlei Santos 3 TI
12 Josefa Cristina 4 Almoxarifado
13 Carla Maria 5 Segurana

Na consulta acima definimos apelidos (aliases) para as tabelas, isso facilita nossa vida na hora de fazer os
relacionamentos e referncia das colunas. J falamos sobre a utilizao de apelidos em colunas no post Select Bsico -
Parte 5. Para a tabela Funcionario a letra "f" foi colocada logo aps o nome da tabela definindo assim seu apelido, e
a letra "d" foi definida como o apelido da tabela Departamento.

O que determina o relacionamento (Join) entre as tabelas Funcionario e Departamento a condio de igualdade
especificada na clusula On entre as colunas IdDepto. Isto , a consulta traz as linhas que possuem os valores das
colunas IdDepto iguais entre as tabelas.

Outro detalhe importante quando utilizamos Joins especificar a qual tabela cada coluna pertence. Isso feito
colocando antes do nome da coluna o apelido da tabela ou o nome da mesma acrescido de ".", ous seja: <tabela |
apelido>.<coluna>.

Quais as vantagens disso:

- A consulta fica melhor documentada;


- Caso duas ou mais tabelas tenham o mesmo nome de coluna no receberemos uma mensagem de erro;
___________________________________________________________________________________
Por enquanto s pessoal.

Veja tambm

Manipulando Dados - INSERT


Manipulando Dados - UPDATE
Manipulando Dados - DELETE
Select Bsico - Parte 1
Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 7
Select Bsico - Parte 8
Select - Utilizando a clusula UNION
Select - Agrupando Dados
Joins - Parte 2 (Left Join)
Continuando nossa srie de posts sobre Joins neste post falaremos sobre Left Join.
O diagrama abaixo mostra o que um Left Join:

Analisando as figuras acima podemos dizer que uma juno do tipo Left Join nada mais do que o total do conjunto
esquerda. Independente de existir, ou no, um item correspondente no conjunto da direita.

Sintaxe

Left [Outer] Join tabela | view On condio

tabela | view - tabela ou view que ser relacionada no Left Join.

On - clusula onde a condio ser especificada.

condio - condio que define o Left Join.


____________________________________________________________________________________
Exemplos

Para os exemplos a seguir vamos utilizar as tabelas Funcionario e Departamento criadas no post Tabelas para nossos
exemplos

Contedo parcial tabela Funcionario Tabela Departamento

IdFuncionario Nome IdDepto IdDepto NomeDepto


1 Joaquim Jos 1 1 Administrao
2 Pedro Silva 2 2 Contabilidade
3 Mrio Mattos 3 3 TI
4 Manuel Antnio 4 4 Almoxarifado
5 Maria Aparecida 5 5 Segurana
6 Daniel Borges 6 6 Controladoria
7 Diana Cristina 7 7 Compras
8 Miriam Lagos 8 8 Contas a Pagar
9 Jos Maria 1
10 Paula Silva 2
11 Vanderlei Santos 3
12 Josefa Cristina 4
13 Carla Maria 5
14 Alex Fabri 12
16 Miguel Angelo 16
15 Vanessa Silva 15
17 Fernando Silveira 19
___________________________________________________________________________________

1. Exemplo de Left Join


Select
f.IdFuncionario, f.Nome, d.IdDepto, d.NomeDepto
From
Funcionario f
Left Join Departamento d On (d.IdDepto = f.IdDepto);

IdFuncionario Nome IdDepto NomeDepto


1 Joaquim Jos 1 Administrao
2 Pedro Silva 2 Contabilidade
3 Mrio Mattos 3 TI
4 Manuel Antnio 4 Almoxarifado
5 Maria Aparecida 5 Segurana
6 Daniel Borges 6 Controladoria
7 Diana Cristina 7 Compras
8 Miriam Lagos 8 Contas a Pagar
9 Jos Maria 1 Administrao
10 Paula Silva 2 Contabilidade
11 Vanderlei Santos 3 TI
12 Josefa Cristina 4 Almoxarifado
13 Carla Maria 5 Segurana
14 Alex Fabri NULL NULL
16 Miguel Angelo NULL NULL
15 Vanessa Silva NULL NULL
17 Fernando Silveira NULL NULL

Repare que todas as linhas da tabela Funcionario foram selecionadas, mesmo as que no possuem um IdDepto
correspondente na tabela Departamento, para estas linhas as colunas IdDepto e NomeDepto so mostradas com
valor NULL. Porm, NULL no bem o que podemos chamar de valor, NULL seria na realidade a ausncia de valor.
___________________________________________________________________________________
2. Usando Left Join para selecionar as linhas da tabela Funcionario que no possuem correspondente na tabela
Departamento
Select
f.IdFuncionario, f.Nome, d.IdDepto, d.NomeDepto
From
Funcionario f
Left Join Departamento d On (d.IdDepto = f.IdDepto)
Where d.IdDepto is NULL

IdFuncionario Nome IdDepto NomeDepto


14 Alex Fabri NULL NULL
16 Miguel Angelo NULL NULL
15 Vanessa Silva NULL NULL
17 Fernando Silveira NULL NULL

Para selecionarmos somente as linhas da tabela Funcionario que no possuem correspoente na tabela Departamento,
criamos a condio "d.IdDepto is NULL".
___________________________________________________________________________________
Por enquanto s pessoal.

Veja tambm

Joins - Parte 1 (Inner Join)


Manipulando Dados - INSERT
Manipulando Dados - UPDATE
Manipulando Dados - DELETE
Select Bsico - Parte 1
Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 7
Select Bsico - Parte 8
Select - Utilizando a clusula UNION
Select - Agrupando Dados
Joins - Parte 3 (Right Join)
Continuando nossa srie de posts sobre Joins neste post falaremos sobre Right Join.
O diagrama abaixo mostra o que um Right Join:

Analisando as figuras acima podemos dizer que uma juno do tipo Right Join nada mais do que o total do conjunto
direita. Independente de existir, ou no, um item correspondente no conjunto da esquerda.

Sintaxe

Right [Outer] Join tabela | view On condio

tabela | view - tabela ou view que ser relacionada no Right Join.

On - clusula onde a condio ser especificada.

condio - condio que define o Right Join.


____________________________________________________________________________________
Exemplos

Para os exemplos a seguir vamos utilizar as tabelas Funcionario e Departamento criadas no post Tabelas para nossos
exemplos

Contedo parcial tabela Funcionario Tabela Departamento

IdFuncionario Nome IdDepto IdDepto NomeDepto


1 Joaquim Jos 1 1 Administrao
2 Pedro Silva 2 2 Contabilidade
3 Mrio Mattos 3 3 TI
4 Manuel Antnio 4 4 Almoxarifado
5 Maria Aparecida 5 5 Segurana
6 Daniel Borges 6 6 Controladoria
7 Diana Cristina 7 7 Compras
8 Miriam Lagos 8 8 Contas a Pagar
9 Jos Maria 1 20 Estoque
10 Paula Silva 2 21 Marketing
11 Vanderlei Santos 3 22 Contas a Receber
12 Josefa Cristina 4 23 Contas a Pagar
13 Carla Maria 5 25 Produo
14 Alex Fabri 12 26 Operacional
16 Miguel Angelo 16 27 Juridico
15 Vanessa Silva 15 28 Vendas
17 Fernando Silveira 19

___________________________________________________________________________________
1. Exemplo de Right Join
Select
f.IdFuncionario, f.Nome, d.IdDepto, d.NomeDepto
From
Funcionario f
Right Join Departamento d On (d.IdDepto = f.IdDepto);

IdFuncionario Nome IdDepto NomeDepto


1 Joaquim Jos 1 Administrao
9 Jos Maria 1 Administrao
2 Pedro Silva 2 Contabilidade
10 Paula Silva 2 Contabilidade
3 Mrio Mattos 3 TI
11 Vanderlei Santos 3 TI
4 Manuel Antnio 4 Almoxarifado
12 Josefa Cristina 4 Almoxarifado
5 Maria Aparecida 5 Segurana
13 Carla Maria 5 Segurana
6 Daniel Borges 6 Controladoria
7 Diana Cristina 7 Compras
8 Miriam Lagos 8 Contas a Pagar
NULL NULL 20 Estoque
NULL NULL 21 Marketing
NULL NULL 22 Contas a Receber
NULL NULL 23 Contas a Pagar
NULL NULL 25 Produo
NULL NULL 26 Operacional
NULL NULL 27 Juridico
NULL NULL 28 Vendas

Repare que todas as linhas da tabela Departamento foram selecionadas, mesmo as que no possuem um IdDepto
correspondente na tabela Funcionario , para estas linhas as colunas IdFuncionario e Nome so mostradas com
valor NULL. Porm, NULL no bem o que podemos chamar de valor, NULL seria na realidade a ausncia de valor.
___________________________________________________________________________________
2. Usando Right Join para selecionar as linhas da tabela Departamento que no possuem correspondente na
tabela Funcionario
Select
f.IdFuncionario, f.Nome, d.IdDepto, d.NomeDepto
From
Funcionario f
Right Join Departamento d On (d.IdDepto = f.IdDepto)
Where f.Nome is NULL;

IdFuncionario Nome IdDepto NomeDepto


NULL NULL 20 Estoque
NULL NULL 21 Marketing
NULL NULL 22 Contas a Receber
NULL NULL 23 Contas a Pagar
NULL NULL 25 Produo
NULL NULL 26 Operacional
NULL NULL 27 Juridico
NULL NULL 28 Vendas

Para selecionarmos somente as linhas da tabela Departamento que no possuem correspoente na tabela Funcionario,
criamos a condio "f.Nome is NULL".
___________________________________________________________________________________
Por enquanto s pessoal.

Veja tambm

Joins - Parte 1 (Inner Join)


Joins - Parte 2 (Left Join)
Manipulando Dados - INSERT
Manipulando Dados - UPDATE
Manipulando Dados - DELETE
Select Bsico - Parte 1
Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 7
Select Bsico - Parte 8
Select - Utilizando a clusula UNION
Select - Agrupando Dados
Joins - Parte 4 (Full Join)
Continuando nossa srie de posts sobre Joins neste post falaremos sobre Full Join.
O diagrama abaixo mostra o que um Full Join:

Analisando a figura acima podemos dizer que uma juno do tipo Full Join o soma dos dois conjuntos.

Sintaxe

Full [Outer] Join tabela | view On condio

tabela | view - tabela ou view que ser relacionada no Full Join.

On - clusula onde a condio ser especificada.

condio - condio que define o Full Join.

OBSERVAO

Esta sintaxe funciona com o SQL Server. Nos exemplos tambm iremos simular isto no MySQL.
____________________________________________________________________________________
Exemplos

Para os exemplos a seguir vamos utilizar as tabelas Funcionario e Departamento criadas no post Tabelas para nossos
exemplos

Contedo parcial tabela Funcionario Tabela Departamento

IdFuncionario Nome IdDepto IdDepto NomeDepto


1 Joaquim Jos 1 1 Administrao
2 Pedro Silva 2 2 Contabilidade
3 Mrio Mattos 3 3 TI
4 Manuel Antnio 4 4 Almoxarifado
5 Maria Aparecida 5 5 Segurana
6 Daniel Borges 6 6 Controladoria
7 Diana Cristina 7 7 Compras
8 Miriam Lagos 8 8 Contas a Pagar
9 Jos Maria 1 20 Estoque
10 Paula Silva 2 21 Marketing
11 Vanderlei Santos 3 22 Contas a Receber
12 Josefa Cristina 4 23 Contas a Pagar
13 Carla Maria 5 25 Produo
14 Alex Fabri 12 26 Operacional
16 Miguel Angelo 16 27 Juridico
15 Vanessa Silva 15 28 Vendas
17 Fernando Silveira 19

___________________________________________________________________________________
1. Exemplo de Full Join (SQL Server)

Select
f.IdFuncionario, f.Nome, d.IdDepto, d.NomeDepto
From
Funcionario f
Full Join Departamento d On (d.IdDepto = f.IdDepto);

IdFuncionario Nome IdDepto NomeDepto


1 Joaquim Jos 1 Administrao
2 Pedro Silva 2 Contabilidade
3 Mrio Mattos 3 TI
4 Manuel Antnio 4 Almoxarifado
5 Maria Aparecida 5 Segurana
6 Daniel Borges 6 Controladoria
7 Diana Cristina 7 Compras
8 Miriam Lagos 8 Contas a Pagar
9 Jos Maria 1 Administrao
10 Paula Silva 2 Contabilidade
11 Vanderlei Santos 3 TI
12 Josefa Cristina 4 Almoxarifado
13 Carla Maria 5 Segurana
14 Alex Fabri NULL NULL
16 Miguel Angelo NULL NULL
15 Vanessa Silva NULL NULL
17 Fernando Silveira NULL NULL
NULL NULL 20 Estoque
NULL NULL 21 Marketing
NULL NULL 22 Contas a Receber
NULL NULL 23 Contas a Pagar
NULL NULL 25 Produo
NULL NULL 26 Operacional
NULL NULL 27 Juridico
NULL NULL 28 Vendas

___________________________________________________________________________________
2. Simulando Full Join no MySQL
Select
f.IdFuncionario, f.Nome, d.IdDepto, d.NomeDepto
From
Funcionario f
Left Join Departamento d On (d.IdDepto = f.IdDepto)
Union
Select
f.IdFuncionario, f.Nome, d.IdDepto, d.NomeDepto
From
Funcionario f
Right Join Departamento d On (d.IdDepto = f.IdDepto);

Repare que no exemplo para o MySQL utilizamos dois comandos Select, um utilizando Left Join e outro utilizando Right
Join. Para criar um resultado nico usamos a clusula Union.
___________________________________________________________________________________ Por enquanto
s pessoal.

Veja tambm

Joins - Parte 1 (Inner Join)


Joins - Parte 2 (Left Join)
Joins - Parte 3 (Right Join)
Manipulando Dados - INSERT
Manipulando Dados - UPDATE
Manipulando Dados - DELETE
Select Bsico - Parte 1
Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 7
Select Bsico - Parte 8
Select - Utilizando a clusula UNION
Select - Agrupando Dados
Select - Subquerys
Faz algum tempo que no escrevo nada. Hoje vamos falar sobre Subquerys.

Uma Subquery nada mais do que uma comando Select dentro de outro comando Select.
_________________________________________________________________________________

Exemplos

Para os exemplos a seguir vamos utilizar as tabelas Funcionario e Departamento criadas no post Tabelas para nossos
exemplos

_________________________________________________________________________________

1. Utilizando Subquery em clusulas Where

Select
IdFuncionario,Nome,IdDepto
From
Funcionario
Where IdDepto in (Select IdDepto from Departamento Where NomeDepto like 'c%');

IdFuncionario Nome IdDepto


2 Pedro Silva 2
6 Daniel Borges 6
7 Diana Cristina 7
8 Miriam Lagos 8
10 Paula Silva 2

Neste exemplo utilizamos uma Subquery para selecionar funcionrios que possuem departamentos que iniciam com a
letra "C".

Conseguiramos obter o mesmo resultado utilizando Join maneira:

Select
a.IdFuncionario,a.Nome,a.IdDepto
From
test.Funcionario a
Inner Join test.Departamento b On (b.IdDepto = a.IdDepto)
Where
NomeDepto like 'c%'
_________________________________________________________________________________

2. Mais um exemplo de Subquery utilizando a clusula Where:

Select
IdFuncionario,Nome,IdDepto
From
Funcionario
Where IdDepto in (Select Min(IdDepto) From Departamento);

IdFuncionario Nome IdDepto


1 Joaquim Jos 1
9 Jos Maria 1

Neste exemplo selecionamos os funcionrios com o Menor cdigo de Departamento.


_________________________________________________________________________________

3. Utilizando uma Subquery em uma coluna:

Select
a.IdDepto,
a.NomeDepto,
(Select Min(f.Nome) From Funcionario f Where f.IdDepto=a.IdDepto ) as Primeiro_Funcionario
From
Departamento a

IdDepto NomeDepto Primeiro_Funcionario


1 Administrao Joaquim Jos
2 Contabilidade Paula Silva
3 TI Mrio Mattos
4 Almoxarifado Josefa Cristina
5 Segurana Carla Maria
6 Controladoria Daniel Borges
7 Compras Diana Cristina
8 Contas a Pagar Miriam Lagos
20 Estoque NULL
21 Marketing NULL
22 Contas a Receber NULL
23 Contas a Pagar NULL
25 Produo NULL
26 Operacional NULL
27 Juridico NULL
28 Vendas NULL

Nesta consulta utilizamos uma Subquery para coluna calculada "Primeiro_Funcionario", est coluna mostrar o primeiro
funcionrio de cada departamento. Verifique para que os Departamentos que no possuem funcionrios temos o valor
NULL como resultado.

_________________________________________________________________________________

Observaes:

Nos exemplos as Querys mais internas so executadas primeiro, a seguir as Querys principais so executadas.

Tambm podemos verificar que as Querys mais internas retornam um nico valor. Neste caso poderamos utilizar
os operadores relacionais : = , < , > , >= , etc. , ao invs do operador IN. O operador IN indicado para quando temos
mais de um resultado nas Querys mais internas.

_________________________________________________________________________________

Veja tambm

Joins - Parte 1 (Inner Join)


Joins - Parte 2 (Left Join)
Joins - Parte 3 (Right Join)
Manipulando Dados - INSERT
Manipulando Dados - UPDATE
Manipulando Dados - DELETE
Select Bsico - Parte 1
Select Bsico - Parte 2
Select Bsico - Parte 3
Select Bsico - Parte 4
Select Bsico - Parte 5
Select Bsico - Parte 6
Select Bsico - Parte 7
Select Bsico - Parte 8
Select - Utilizando a clusula UNION
Select - Agrupando Dados

You might also like