Olá galera, esta é a Parte VII, onde irei mostrar alguns Scripts para obtermos dados no nosso banco e conhecemos um pouco mais sobre a linguagem SQL.
1 ) Obter o nome, cpf e a descrição do Tipo de Cliente
Modo 1
SELECT C.Nome, C.CPF, TC.Descricao 'TipoCliente'
FROM Cliente C, TipoCliente TC
WHERE C.IDTipoCliente = TC.IDTipoCliente;
Modo 2
SELECT C.Nome, C.CPF, (
SELECT TC.Descricao
FROM TipoCliente TC
WHERE C.IDTipoCliente = TC.IDTipoCliente ) 'TipoCliente'
FROM Cliente C
Modo 3
Vamos criar uma Function e chamar ela de Cliente_TipoCliente
Veja sua implementação
DELIMITER $$
DROP FUNCTION IF EXISTS `dbdevmedia`.`Cliente_TipoCliente` $$
CREATE FUNCTION `dbdevmedia`.`Cliente_TipoCliente` (xIDCliente int(10)) RETURNS VarChar(40)
BEGIN
Declare xTipoCliente VarChar(40);
SELECT TC.Descricao INTO xTipoCliente
FROM Cliente C, TipoCliente TC
WHERE C.IDTipoCliente = TC.IDTipoCliente
AND C.IDCliente = xIDCliente;
RETURN xTipoCliente;
END $$
DELIMITER ;
Como Usar :
SELECT C.Nome, C.CPF, CLIENTE_TIPOCLIENTE(C.IDCliente) 'TipoCliente'
FROM Cliente C
2) Obter Nome do Cliente, Logradouro, Numero, CEP, Complemento(separados por virgula)
Modo 1
SELECT C.Nome, Concat(E.Logradouro, ',', E.Numero, ',', E.Complemento, ',', E.CEP) Endereco
FROM Cliente C, Endereco E
WHERE C.IDEndereco = E.IDEndereco;
Modo 2
SELECT C.Nome, ( SELECT Concat(E.Logradouro, ',', E.Numero, ',', E.Complemento, ',', E.CEP) Endereco
FROM Endereco E
WHERE C.IDEndereco = E.IDEndereco) Endereco
FROM Cliente C;
Modo 3
SELECT C.Nome, Concat_WS(',', E.Logradouro, E.Numero, E.Complemento, E.CEP) Endereco
FROM Cliente C, Endereco E
WHERE C.IDEndereco = E.IDEndereco;
Modo 4
SELECT C.Nome, ( SELECT Concat_WS(',', E.Logradouro, E.Numero, E.Complemento, E.CEP) Endereco
FROM Endereco E
WHERE C.IDEndereco = E.IDEndereco) Endereco
FROM Cliente C;
Modo 5
DELIMITER $$
DROP FUNCTION IF EXISTS `dbdevmedia`.`Cliente_Endereco` $$
CREATE FUNCTION `dbdevmedia`.`Cliente_Endereco` (xIDCliente int(10)) RETURNS VarChar(40)
BEGIN
Declare xEndereco VarChar(40);
SELECT Concat_WS(',', E.Logradouro, E.Numero, E.Complemento, E.CEP) INTO xEndereco
FROM Cliente C, Endereco E
WHERE C.IDEndereco = E.IDEndereco
AND C.IDCliente = xIDCliente;
RETURN xEndereco;
END $$
DELIMITER ;
3) Obter o Nome, CPF, e a Descricao do Pais que o Cliente mora
Modo 1
SELECT C.Nome, P.Descricao Pais
FROM Cliente C, Pais P, UF UF, Cidade Ci, Bairro B, Endereco E
WHERE UF.IDPAIS = P.IDPAIS
AND Ci.IDUF = UF.IDUF
AND B.IDCIDADE = Ci.IDCIDADE
AND E.IDBAIRRO = B.IDBAIRRO
AND C.IDEndereco = E.IDEndereco;
Modo 2
SELECT C.Nome, ( SELECT P.Descricao
FROM Pais P, UF UF, Cidade Ci, Bairro B, Endereco E
WHERE UF.IDPAIS = P.IDPAIS
AND Ci.IDUF = UF.IDUF
AND B.IDCIDADE = Ci.IDCIDADE
AND E.IDBAIRRO = B.IDBAIRRO
AND C.IDEndereco = E.IDEndereco ) Pais
FROM Cliente C;
Modo 3
Vamos criar uma Function e chamar ela de Cliente_Pais
Veja sua implementação
DELIMITER $$
DROP FUNCTION IF EXISTS `dbdevmedia`.`Cliente_Pais` $$
CREATE FUNCTION `dbdevmedia`.`Cliente_Pais` (xIDCliente int(10)) RETURNS VarChar(40)
BEGIN
Declare xPais VarChar(40);
SELECT P.Descricao INTO xPais
FROM Cliente C, Pais P, UF UF, Cidade Ci, Bairro B, Endereco E
WHERE UF.IDPAIS = P.IDPAIS
AND Ci.IDUF = UF.IDUF
AND B.IDCIDADE = Ci.IDCIDADE
AND E.IDBAIRRO = B.IDBAIRRO
AND C.IDEndereco = E.IDEndereco
AND C.IDCliente = xIDCliente;
RETURN xPais;
END $$
DELIMITER ;
Vimos nesta Quick diversas formas de se obter o mesmo resultado, isso é muito interessante em SQL, pois temos várias abordagens, umas com desempenho mais rápidos que outras, outras mais elegantes que umas. SQL hoje é extremamente importante para qualquer programador, na hora de gerar uma consulta ou um Relatório
Fico por aqui e na próxima Quick Tips.
Um abraço
Wesley Y
wyamazack@rwsolution.com.br