Академический Документы
Профессиональный Документы
Культура Документы
Pessoal, para executarmos nossos exemplos seria interessante instalarmos um gerenciador de banco de dados.
Escolhi dois gerenciadores mas vocs podem escolher qualquer outro.
download MySQL
download Microsoft SQL Server
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.
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.
<tabela> | <view>
<condio de pesquisa>
Exemplos:
Nestes exemplos utilizamos a tabela Funcionario criada no post Tabelas para nossos exemplos
Veja tambm
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.
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.
- 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;
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.
Tudo isso parece muito complicado no? Acredito que uma imagem vai demonstrar melhor:
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.
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
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
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
IdFuncionario Nome
6 Daniel Borges
7 Diana Cristina
8 Miriam Lagos
_________________________________________________________________________________
2.Funcionrios com cdigo menor igual a 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'
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
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
IdDepto NomeDepto
2 Contabilidade
3 TI
4 Almoxarifado
5 Segurana
_________________________________________________________________________________
6.Departamento com cdigo igual a 2 ou 3 ou maior que 5
IdDepto NomeDepto
2 Contabilidade
3 TI
6 Controladoria
7 Compras
8 Contas a Pagar
_________________________________________________________________________________
7.Departamento com cdigo direrente de 3 - utilizando Not
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
_________________________________________________________________________________
9.Utilizando parntesis e not
Veja tambm
Sintaxe BETWEEN
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
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
IdFuncionario Nome
3 Mrio Mattos
4 Manuel Antnio
5 Maria Aparecida
6 Daniel Borges
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 not (IdFuncionario >= 3 and IdFuncionario <= 6);
________________________________________________________________________________
Por enquanto s pessoal.
Veja tambm
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
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
IdFuncionario Nome
1 Joaquim Jos
5 Maria Aparecida
7 Diana Cristina
Veja tambm
Operadores Matemticos
Operador Funo
+ Soma
- Subtrao
* Multiplicao
/ Diviso
____________________________________________________________________________________
Exemplos
-- 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
___________________________________________________________________________________
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;
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;
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.
___________________________________________________________________________________
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.
Select
NomeProduto,
PrecoUnitario,
PrecoUnitario + 5 * 1.1 AS Reajuste1,
(PrecoUnitario + 5) * 1.1 AS Reajuste2,
QtdeEstoque
From Produto
Where NomeProduto In ('DVD','GPS');
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:
Veja tambm
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.
___________________________________________________________________________________
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
uf
SP
CE
RJ
AM
___________________________________________________________________________________
Veja tambm
Para ordenar o resultado de uma consulta SQL basta utilizarmos a clusula Order by.
Sintaxe
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
No exemplo acima utilizamos o nmero 2 no lugar do nome do funcionrio para fazer a ordenao.
___________________________________________________________________________________
3.Utilizando expresses para ordenar
Veja tambm
Sintaxe
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.
Nos exemplos abaixo utilizaremos as tabelas criadas e populadas nos posts: Tabelas para nossos exemplos e Select
Bsico - Parte 6
_____________________________________________________________________________________
Por enquanto s pessoal.
Veja tambm
Sintaxe
UNION [ALL]
ALL- Traz todas as linhas para o resultado. Caso no seja especificado sero trazidas somente as linhas distintas.
Observaes
Nos exemplos abaixo utilizaremos as tabelas criadas e populadas nos posts: Tabelas para nossos exemplos e Select
Bsico - Parte 6
-- 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);
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
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
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.
_________________________________________________________________________________
Veja tambm
Sintaxe
INSERT [INTO]
nome da tabela [ ( lista de colunas ) ]
VALUES
( lista de expresses )
__________________________________________________________________________________
Exemplos
Nos exemplos abaixo utilizaremos a tabela Produto ver: Tabelas para nossos exemplos e Select Bsico - Parte 6
Tabela Produto
___________________________________________________________________________________
1.Utilizando todos os parmetros
___________________________________________________________________________________
2.No especificando a lista de colunas e utilizando expresses
Repare que neste exemplo utilizamos uma expresso para inserir o dado da coluna QtdeEstoque (300*5).
___________________________________________________________________________________
___________________________________________________________________________________
Veja tambm
Sintaxe
DELETE
[ FROM { <tabela> | <view>} [ ,...n ] ]
[ WHERE <condio> ]
Onde:
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
Veja tambm
UPDATE
<tabela> | <view>
SET coluna [ ,coluna...] = { expresso }
[WHERE <condio>]
Onde:
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
2. Aumentando em 100 a quantidade de estoque dos produtos com cdigo maior que 4
___________________________________________________________________________________
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;
___________________________________________________________________________________
Por enquanto s pessoal.
Veja tambm
Sintaxe
GROUP BY expresso,[...,n]
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
Nos exemplos abaixo utilizaremos as tabelas Funcionario e Produto criadas e populadas nos posts: Tabelas para nossos
exemplos e Select Bsico - Parte 5
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
Bairro UF Total
Morumbi RJ 1
Penha RJ 1
Perdizes AM 1
Sao Geraldo SP 8
Tatuape SP 1
Vila Verde CE 1
____________________________________________________________________________________
Select
Max(PrecoUnitario) As MaiorPrecoUnitario,
Min(PrecoUnitario) As MenorPrecoUnitario
From Produto;
MaiorPrecoUnitario MenorPrecoUnitario
1501.73 23.97
____________________________________________________________________________________
ValorTotalEstoque
1409183.68
____________________________________________________________________________________
MediaPrecoUnitario
487.673000
___________________________________________________________________________________
Por enquanto s pessoal.
Veja tambm
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.
Sintaxe
_____________________________________________________________________________________
Exemplo
Para o exemplo a seguir vamos utilizar as tabelas Funcionario e Departamento criadas no post Tabelas para nossos
exemplos
Select
f.IdFuncionario, f.Nome, d.IdDepto, d.NomeDepto
From
Funcionario f
Inner Join Departamento d On (d.IdDepto = f.IdDepto);
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>.
Veja tambm
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
Para os exemplos a seguir vamos utilizar as tabelas Funcionario e Departamento criadas no post Tabelas para nossos
exemplos
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
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
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
Para os exemplos a seguir vamos utilizar as tabelas Funcionario e Departamento criadas no post Tabelas para nossos
exemplos
___________________________________________________________________________________
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);
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;
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
Analisando a figura acima podemos dizer que uma juno do tipo Full Join o soma dos dois conjuntos.
Sintaxe
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
___________________________________________________________________________________
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);
___________________________________________________________________________________
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
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
_________________________________________________________________________________
Select
IdFuncionario,Nome,IdDepto
From
Funcionario
Where IdDepto in (Select IdDepto from Departamento Where NomeDepto like 'c%');
Neste exemplo utilizamos uma Subquery para selecionar funcionrios que possuem departamentos que iniciam com a
letra "C".
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%'
_________________________________________________________________________________
Select
IdFuncionario,Nome,IdDepto
From
Funcionario
Where IdDepto in (Select Min(IdDepto) From Departamento);
Select
a.IdDepto,
a.NomeDepto,
(Select Min(f.Nome) From Funcionario f Where f.IdDepto=a.IdDepto ) as Primeiro_Funcionario
From
Departamento a
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