Abrir tópico com a navegação

SQL - STRUTURED QUERY LANGUAGE


INSERT

Na linguagem SQL Padrão a unica maneira de incluir dados em uma tabela é atraves da sentença INSERT, que normalmente inclui uma unica linha.

INSERT INTO adm_categorias (CategoriaID,NomeCategoria,Descricao,Foto) VALUES (9,'CARROS','Carros de Passeio, Moto ou Vans','carros.gif')

 

UPDATE

Atualiza dados em uma linha.


UPDATE adm_categorias SET NomeCategoria = 'Carros de Alugel' WHERE Categoriaid = 9


DELETE

Eliminando dados em uma tabela.

DELETE FROM adm_categorias WHERE CategoriaID = 9

/* elimina na tabela adm_categorias a linha com codigo da categoria igual a 9 */

DELETE FROM adm_clientes


/* elimina todos os registros da tabela adm_clientes */


Comandos INSERT, UPDATE E DELETE no ScriptCase.


Para executar estes comandos o ScriptCase disponibiliza a macro sc_exec_sql.

sc_exec_sql('DELETE FROM adm_categorias WHERE CategoriaID = 9');



QUERY


A maneira que temos para pesquisar e obter dados das tabelas em um BD é através de um Query. Por mais basica que seja uma query tem que ter pelo menos dois componentes:

SELECT : Enumera o nome das colunas que contem os dados desejados

FROM : Especifica as tabelas em que estão localizadas as colunas;


Ex.: SELECT CategoriaID,NomeCategoria,Descricao,Foto FROM adm_categorias;


Podemos também evitar que dados sejam exibidos duplicados:

SELECT DISTINCT NomeCliente FROM adm_clientes

 

WHERE

Retorna apenas os valores da linhas que atendem as condições especificadas na clausula WHERE.

SELECT nomecliente FROM adm_clientes WHERE Sexo = 'M'



Operadores

Descrição

=

igual

!=

Não Igual

<>

Diferente

>

Maior

<

Menor

!<

Não Menor

!>

Não Maior

>=

Maior ou Igual

<=

Menor ou Igual

Cada um deles pode ser usado em condições de pesquisa para compor os predicados relacionais.


BETWEEN - AND : Especifica dados compreendidos em uma determinada faixa. Pode ser utilizado com numeros quanto com datas.

SELECT ClienteID,NomeCliente FROM adm_clientes WHERE DataNasc BETWEEN '1997-01-01' AND '1997-04-31'

SELECT ClienteID,NomeCliente FROM adm_clientes WHERE FornecedorID BETWEEN 1 AND 9


IS NUL : Permite selecionar linhas em que o conteudo do campo é nulo (VAZIO).

SELECT ClienteID FROM adm_pedidos WHERE DataPedido IS NULL


LIKE : Permite utilizar caracteres mascara para comparar dados em uma condição de pesquisa sobre valores texto. Utilizamos dois caracteres máscara:

SELECT NomeCliente FROM adm_clientes WHERE NomeCliente LIKE 'RIC%';

SELECT NomeCliente FROM adm_clientes WHERE NomeCliente LIKE 'J_A_';


IN : Permite selecionar dados que se encaixem em um conjunto ou mais lista de valores


SELECT ClienteID,NomeCliente FROM adm_clientes WHERE ClienteID IN ('ABCDE','ZXED','WW3CD')


Operadores AND e OR


Restringem ainda mais a seleção de linhas usando uma clausula WHERE, pois podemos utilizar mais de uma condição de pesquisa.


SELECT C.NomeCliente, P.ValorPedido FROM adm_clientes C, adm_pedidos P WHERE

(C.clienteid = 'P.ClienteID') AND

(P.datapedido IS NULL AND C.ClienteID = 'ABCDE' )


O resultado do codigo SQL acima será a apresentação de todos os pedidos que foram feitos pelo Cliente de codigo 'ABCDE' e que não preencheu a data de compra.

Observe que foi necessário a comparação dos valores das chaves primárias e estrangeiras das tabelas envolvidas para a recuperação correta dos dados.

Verifique, tambem, que por temos várias tabelas envolvidas foi necessário aplicarmos a abordagem de apelidos. Por exemplo, para não repetirmos o nome da tabela “adm_clientes” em varias partes do codigo SQL, associamos ao nome da tabela o apelo “C”.



Operadores Aritméticos

 

+

Adição ou Soma

-

Subtração

*

Multiplicação

/

Divisão


No exemplo a seguir, acrescentamos o valor 0,05 a coluna valorpedido do Cliente 'ABCDE'.


SELECT DISTINCT C.ClienteID, C.NomeCliente, P.ValorPedido + 0,05 AS DESCONTO FROM adm_clientes C, adm_pedidos P WHERE C.ClienteID = P.ClienteID AND C.ClienteID = 'ABCDE'


ClienteID

NomeCliente

DESCONTO

ABCDE

Ana Claudia

10,05


Operador de Concatenação


Representado no MySQL pelo uso da função concat. Os argumentos tanto podem ser constantes string, quanto nomes de colunas.

SELECT concat(NomeCliente,” Feliz Aniversário”) from adm_clientes where month(DataNasc) = month(now()) AND day(DataNasc) = day(now());


Repare que utilizamos além da função concat, as funções day, month e now, que manipulam campos do tipo data dentro do MySQL, função de dia, mês e data/hora do sistema respectivamente.


FunÇÕes


Podemos utilizar querys para selecionar os resultados de operações realizadas com esses dados. Elementos que viabilizam as operações de dados de uma query:

O operador ou função é usado com constantes, nomes de colunas e assim por diante, para formar uma expressão nova.


Funções Agregadas

Produzem um único valor a partir de uma coluna inteira de dados. São também chamadas de funções de coluna.

AVG : Calcula a média da coluna selecionada para todos os itens do resultado da query.

SELECT AVG(ValorPedido) FROM adm_pedidos


MAX : Retorna o maior valor da coluna selecionada para todos os itens do resultado da query.

SELECT MAX(ValorPedido) FROM adm_pedidos;


MIN : Calcula o menor valor da coluna selecionada para todos os itens do resultado da query.

SELECT MIN(ValorPedido) FROM adm_pedidos;


SUM : Calcuma o somatorio da coluna selecionada para todos os itens do resultado da query.

SELECT SUM(ValorPedido) FROM adm_pedidos;


COUNT : Conta a quantidade de linhas de registro do resultado da query

SELECT COUNT(*) FROM adm_clientes;


Funções Não Agregadas

Retornam um valor para cada linha, porem não existe um padrão, dependem totalmente da implementação SQL que está sendo utilizada.


MID : é uma função para exibir uma parte de um texto. Lista todos os clientes com apenas os 5 primeiros caracteres de seu nome. A função SUBSTR tem o mesmo principio.

SELECT MID(NomeCliente,1,5) FROM adm_clientes;


UCASE : é uma função para tornar um texto em maiúsculo.

SELECT UCASE(NomeCliente) FROM adm_clientes;

LCASE : é uma função para tornar um texto em minúsculo.

SELECT LCASE(NomeCliente) FROM adm_clientes;


LENGTH : é uma função que retorna a quantidade de caracteres de um determinado campo/texto.

SELECT LENGTH(NomeFornecedor) FROM adm_fornecedores;


CASE : é uma função que faz iterações comparativas na query, sinonimo de um if/else ...

SELECT ClienteID, CASE WHEN Estado IN ('PA','PE','PI','AL','MA','CE','RN','SE','BA') THEN 'NORDESTE' WHEN Estado IN ('RJ','SP','MG','ES') THEN 'SUDESTE' ELSE 'OUTROS' END AS Regiao FROM adm_clientes;


Quebras e Organização


Existem três clausulas que podem ser acrescentadas à query permitindo que você organize o resultado como quiser.


GROUP BY

É a mais importante das três, pois nos permite agrupar linhas no resultado e construir algumas querys que, sem ela, seriam inviáveis.

SELECT F.NomeFornecedor,P.NomeProduto FROM adm_fornecedores F, adm_produtos P WHERE P.FornecedorID = F.FornecedorID GROUP BY F.FornecedorID;


À exceção das Funções Agregadas, toda a expressão (list select) da sentença SELECT tem que aparecer como colunas formadoras de grupos na clausula GROUP BY.

A ordem em que estas expressões são enumeradas na clausula GROUP BY determina a ordem em que as colunas serão agrupadas.

As Funções Agregadas não podem ser usadas em clausulas GROUP BY, pois geram um único valor e por isso não podem agrupar linhas.


Ex.: SELECT ClienteID,COUNT(ClienteID) FROM adm_pedidos;

O certo seria:

SELECT ClienteID, COUNT(ClienteID) FROM adm_pedidos GROUP BY ClienteID;


HAVING

Permite aplicar condições de pesquisa as linhas obtidas pela cláusula GROUP BY.

Nesta query listamos todos os clientes que tem diferença maior que 12700 entre seus pedidos.

SELECT ClienteID, MAX(ValorPedido),MIN(ValorPedido), MAX(ValorPedido) - MIN(ValorPedido) as Diferenca FROM adm_pedidos GROUP BY ClienteID HAVING MAX(ValorPedido) - MIN(ValorPedido) > 12700;

Desejo agora listar todos os clientes que fizeram mais que 20 pedidos.

SELECT ClienteID,COUNT(ClienteID) FROM adm_pedidos GROUP BY ClienteID HAVING COUNT(ClienteID) > 20;


ORDER BY


Permite classificar as linhas do resultado de diversas maneiras.