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