domingo, 19 de dezembro de 2010

Paginação

PAGINAÇÃO - Uma outra ídéia para utlizar esta função seria para criar uma páginação para nossa Query, podendo utiliza-lá em alguma página na Web.

Ex: DECLARE
@NumeroDaPagina AS INT,
@TamanhoDaPagina AS INT

SET @NumeroDaPagina = 2
SET @TamanhoDaPagina = 5

SELECT
*
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY Quantidade DESC ) AS Numero,
                 Vendedor,
                  Produto ,
                 Quantidade,
                 Telefonemas
FROM Analise_Vendas) AS V WHERE Numero

BETWEEN (@NumeroDaPagina-1)* @TamanhoDaPagina+1 AND

@NumeroDaPagina*@TamanhoDaPagina ORDER BY Quantidade DESC,

Telefonemas

Partition by

PARTITION BY - Outra opção da sintaxe básica que se chama PARTITION BY, que


funciona mais ou menos como o group by, definindo por qual

critério nosso ROW_NUMBER deverá ser ressetado.



Ex: select ROW_NUMBER() over ( PARTITION BY Produto ORDER BY Quantidade Desc ) as Numero, Vendedor, Produto, Quantidade from Analise_Vendas

Row_Number

Row_number  Utilizando a função row_number podemos não só numerar as linhas


de uma tabela como também fazer essa numeração em uma ordem

específica, diferente da ordem na qual as linhas serão exibidas.



Ex: -- no SQL 2005 select ROW_NUMBER() over ( ORDER BY Quantidade desc ) as Numero, Vendedor, Produto, Quantidade, Telefonemas from Analise_Vendas

sexta-feira, 17 de dezembro de 2010

UNION ALL vs UNION e ordenação

Se você sabe que não pode haver valores duplicados entre duas tabelas, então sempre use UNION ALL. Ele salva o banco de dados de realizar diversas triagens para ordenação dos seus dados.



Seu DBA não estará satisfeito com você se usar UNION desnecessariamente. É uma característica padrão do UNION realizar ordenação, mesmo sem a existência da opção de ORDER BY.

quinta-feira, 16 de dezembro de 2010

Otimizações SQL

Algumas dicas para otimizações em instruções SQL (em alguns casos o servidor de banco de dados pode não suportar algumas instruções ou cláusulas).


1) Todas as vezes que for utilizar um SQL que possua condições de OR, é mais aconselhável e mais rápido utilizar IN, como no exemplo:

AO INVÉS DE

select * from projint where sit_projint = ‘AI’ or sit_projint = ‘EL’


DIGITE

select * from projint where sit_projint IN (‘AI’,‘EL’);



2) Quando existem duas ou mais condições AND juntas, especifique primeiro sempre a que possui o maior limite de ocorrências


AO INVÉS DE

select count(*) from pessoa where sit_pessoa = 11 AND cod_munic > 1100155


USE

select count(*) from pessoa where cod_munic > 1100155 AND sit_pessoa = 11



3) Quando existem duas ou mais condições OR juntas, especifique primeiro sempre a que possui o maior limite de ocorrências



AO INVÉS DE

select count(*) from pessoa where cod_munic > 1100155 OR sit_pessoa = 11



DIGITE

select count(*) from pessoa where sit_pessoa = 11 OR cod_munic > 1100155



4) Tenha cuidado com o sinal de <>



AO INVÉS DE

select count(*) from pessoawhere cod_munic < > 1100155



DIGITE

select count(*) from pessoawhere cod_munic < 1100155 OR cod_munic > 1100155

Transferindo registros de uma tabela para outra

para inserir dados de uma tabela para outra, seria assim:
INSERT INTO table1 (nome) SELECT nome FROM table2;

Criação de usuários

GRANT ALL PRIVILEGES ON meuBD.* TO ronderson@localhost

IDENTIFIED BY '123mudar' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Descrição: atribui todos os privilégios à todas as tabelas do banco de dadosmeuBD ao usuário ronderson, a partir da máquina localhost, cuja senha é 123mudar. O comando FLUSH PRIVILEGES atualiza as novas alterações no daemon do MySQL. Caso o usuário joao não existe, um novo usuário será criado.