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
domingo, 19 de dezembro de 2010
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
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
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.
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
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;
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.
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.
Assinar:
Postagens (Atom)