Qualificação de nome de Objeto SQL
Autor: Flavio Correia | Publicado: 2011-08-29T06:01:00-07:00



1. Qualificação de nome de Objeto.Técnica utilizada para referenciar o nome de uma coluna junto com o nome de uma tabela. Também conhecida como Fully Qualified Name (FQN), essa técnica consistente em qualificar o nome do objeto desde o significado mais específico até o mais abrangente.No caso de banco de dados, o mais específico é o nome da coluna, passando pelo nome da tabela, schema do banco, nome do banco e nome do servidor que é o mais abrangente.Servidor.Banco.Schema.Tabela.ColunaQualificando o nome da tabela e nome da coluna.select cliente.ClienteID, Cliente.Nome, Cliente.Fonefrom clientewhere Cliente.cidade = 'Sao Paulo'2. Junção.O SELECT pode operar com duas ou mais tabelas na seleção e apresentação de dados. Para montar essa seleção é necessário realizar a junção entre as tabelas. Para que isso seja possível, primeiro devemos identificar em cada tabela, um conjunto de coluna entre elas que mantém algum tipo de relacionamento. Seguindo os padrões de modelagem de dados e também os comandos para criar tabelas, utilizaremos as chaves primárias e estrangeiras das tabelas.Veja o exemplo abaixo:A tabela cliente tem como chave primária a coluna ClienteID.select * from clienteExiste a tabela pedido, onde são realizados todos os pedidos de vendas que os clientes realizam. Para identificar em cada pedido qual foi o cliente, incluímos na tabela Pedido a identificação do cliente. Nesse caso a tabela ganha uma coluna (ClienteiD) que é a chave estrangeira. Se desejarmos identificar os pedidos de um determinado cliente, podemos realizar uma consulta nessa tabela, aplicando o filtro na coluna clienteID. Exemplo:select * from pedidowhere ClienteID = 1Para realizar a operação de consulta de dados com duas tabelas, utilizamos a instrução JOIN. Abaixo segue a utilização:FROM Tabela1JOIN Tabela2On Tabela1.Coluna1 = Tabela2.Coluna2. O Join é utilizado após o FROM e deve aparecer entre o nome de duas tabelas.
. A junção que é realizada pelas colunas, deve ser colocada após a instrução ON.
. Voce deve especificar o qualificador de nome de objeto para referenciar a tabela e a coluna.
. Na apresentação dos dados, voce pode especificar o nome das colunas de ambas as tabelas.
. Se existir o mesmo nome de coluna em ambas as tabelas, utilizar o qualificador do nome de objeto para referenciar as colunas.Exemplos:. Apresenta os Pedidos e o nome da transportadora.select PedidoID, DataPedido, Peso, Nome, fonefrom pedido join transportadoraon pedido.transportadoraID = Transportadora.TransportadoraID. Apresenta os Pedidos e o nome dos clientesselect PedidoID, DataPedido, Peso,Nome, Contato, Fonefrom pedido join clienteon pedido.ClienteID= Cliente.ClienteID. Apresenta os Pedidos e os Itens de Pedidoselect PedidoID, DataPedido, Peso,ProdutoID, PrecoUnitario,Quantidade, Descontofrom pedido join pedidoitemon pedido.PedidoID = PedidoItem.PedidoID&nbsp;Msg 209, Level 16, State 1, Line 1Ambiguous column name 'PedidoID'.&nbsp;select Pedido.PedidoID, DataPedido, Peso, ProdutoID, PrecoUnitario,Quantidade, Descontofrom pedido join pedidoitemon pedido.PedidoID = PedidoItem.PedidoID. Apresentado apenas um pedido e seu itensselect Pedido.PedidoID, DataPedido, Peso, ProdutoID, PrecoUnitario,Quantidade, Desconto&nbsp; from pedido join pedidoitem&nbsp;&nbsp;&nbsp; on pedido.PedidoID = PedidoItem.PedidoID where pedido.PedidoID = 102943. Junção com 3 ou mais tabelas.Para incluirmos uma terceira tabela no processo de junção de tabelas, devemos utilizar mais uma instrução JOIN. Esse nova utilização da instrução será feita após o SQL realizar a primeira junção. Voce deve espeficiar esse novo JOIN somente após o relacionamento entre as coluna. Voce especifica o nome tabela e depois utiliza o ON para realizar o relacionamento dessa tabela com uma das tabelas do primeiro join.
Para incluir uma quarta tabela, utilizar o mesmo processo. O numero total de join em uma consultar será o total de tabelas envolidas na junção menos 1.FROM Tabela1JOIN Tabela2&nbsp; on Tabela1.Coluna1 = Tabela2.Coluna2JOIN Tabela3&nbsp; on Tabela2.Coluna3 = Tabela3.Coluna3. Apresenta os pedidos junto com o nome da transportadora e o clienteselect Pedido.PedidoID, Pedido.DataPedido, Pedido.Peso,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Transportadora.Nome, Transportadora.fone ,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cliente.Nome , Cliente.Contato , Cliente.Fone&nbsp; from pedido&nbsp; join transportadora&nbsp;&nbsp; on pedido.transportadoraID = Transportadora.TransportadoraID join cliente&nbsp;&nbsp; on pedido.clienteid = cliente.clienteid. Apresentar as transportadora que entregaram produtos para o cliente do USA.select Transportadora.Nome, Transportadora.fone ,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cliente.Nome , Cliente.Contato , Cliente.Fone&nbsp; from transportadora&nbsp; join pedido&nbsp;&nbsp;&nbsp; on Transportadora.TransportadoraID = pedido.transportadoraID&nbsp; join cliente&nbsp;&nbsp;&nbsp; on pedido.clienteid = cliente.clienteid where cliente.pais = 'USA'4. Utilizado apelido no nome da coluna e no nome da tabelaUma consulta pode apresentar duas colunas com o mesmo, sendo que cada uma delas pertence a tabelas diferentes. Na apresentação, voce pode colocar uma apelido para o nome da coluna. No exemplo anterior temos as colunas Nome e Fone que são da tabela transportadora e da tabela cliente. Para não gerar confusão na interpretação dos dados, vamos utilizar o apelido de coluna.select Transportadora.Nome as Transportadora, Transportadora.fone as FoneTransportadora,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cliente.Nome as Cliente, Cliente.Contato ContatoCliente, Cliente.Fone as FoneCliente&nbsp; from transportadora&nbsp; join pedido&nbsp;&nbsp;&nbsp; on Transportadora.TransportadoraID = pedido.transportadoraID&nbsp; join cliente&nbsp;&nbsp;&nbsp; on pedido.clienteid = cliente.clienteid where cliente.pais = 'USA'Podemos tambem simplificar o codigo, utilizando apelido no nome das tabelas. Utilizaremos esse apelido para utilizarmos na qualificação do objeto.select t.Nome as Transportadora, t.fone as FoneTransportadora,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.Nome as Cliente, c.Contato ContatoCliente, c.Fone as FoneCliente&nbsp; from transportadora as t&nbsp;&nbsp; join pedido as p&nbsp;&nbsp;&nbsp;&nbsp; on t.TransportadoraID = p.transportadoraID&nbsp;&nbsp; join cliente as c&nbsp;&nbsp;&nbsp;&nbsp; on p.clienteid = c.clienteid&nbsp; where c.pais = 'USA'